×Закрыть

DOU Labs: як в ElifTech розробили розумний кулер для води

В рубриці DOU Labs ми запрошуємо IT-компанії ділитись досвідом власних цікавих розробок та внутрішніх технологічних ініціатив. Питання і заявки на участь надсилайте на editors@dou.ua.

Офіси зазвичай оснащені кулерами для води. В ElifTech він також є, донедавна цілком пересічний: бутель з водою, дві кнопки для подачі води — гарячої та холодної — і жодних гарантій на те, що вода не закінчиться прямо перед твоєю чашкою. Ми взялися вдосконалити пристрій у рамках внутрішнього експерименту SmartOffice. Тож читайте що з цього вийшло.

Ідея

Ідея експерименту виникла під час командного мозкового штурму, у ході розмови про проекти розумних будинків і автоматизовані побутові прилади. Вирішили надати додаткових можливостей нашому офісному пристрою аби випробувати технології Internet of Things. Кулер — один з найпопулярніших за використанням девайсів, тож він і став пілотним проектом. Ми його назвали «Smart Water Cooler».

Команда розробників

Концепція Smart Water Cooler

У випадку зі звичайним приладом вода у офіс замовляється нерегулярно, доставка відбувається із затримкою. Через це часто-густо колектив залишається без питної води. Smart Water Cooler слідкує за запасом води та завчасно замовляє наступну партію через SMS-повідомлення, процес не потребує втручання людей. Колектив отримує у корпоративний чат нотифікацію від системи — щось на зразок «залишилось води лише на 3 горнятка чаю». Проте якщо людська істота все ж бажає втрутитись, рівень та температуру води можна перевірити з будь-якої точки світу.

Реалізація

Реалізацію розумного кулера ми здійснили у три етапи: дослідили, як влаштовано базову модель; розробили апаратне рішення та запрограмували його, інтегрувавши з Amazon Web Services.

Процеси здійснювали у такій послідовності:

  • аналіз рішень для визначення рівня води;
  • аналіз платформ та MCU (Micro Controller Unit) для реалізації проекту;
  • дослідження будови піддослідного кулера;
  • реалізація POC (Proof of Concept) з мінімальним втручанням у апаратну частину;
  • розробка ПЗ для мікроконтролера;
  • дооснащення Smart Water Cooler;
  • розробка ПЗ для моніторингу;
  • розробка UI.

Інтеграція визначення рівня води

Ми визначили три кандидати: поплавковий рівень, лічильник протоку рідин та сенсор ваги.
Проаналізувавши їх, відкинули перший, оскільки він потребує втручання у ємність з водою. Другий варіант, лічильник витрат рідини Arduino Water Meter, також потребує контакту з питною водою, до того ж його не так просто купити. Переможцем став сенсор ваги: знаючи показники повного і порожнього бутля, можна вирахувати залишок рідини.

Серед протестованих екземплярів найкраще себе показав масив з 4-х датчиків, що використовується у звичайних вагах, Scale Sensor OR Load Cell. Для підʼєднання датчика до MCU ми використали плату HX711 (Load Cell Amplifier).

Аналіз платформ та MCU (Micro Controller Unit) для реалізації проекту

Тут ми також мали трьох кандидатів: Tessel 2, Arduino + Ethernet/Wifi shield та ESP8266. Tessel 2 — надто потужне рішення для нашої задачі. Arduino Nano + Ethernet/WiFi shield поступився ESP8266, оскільки той має на борту Wi-Fi, потужний процесор і достатню кількість портів, при цьому його розміри та ціна мінімальні. У якості базової прошивки для MCU використали NodeMCU — це дало змогу вивчити нову мову програмування.

Дослідження будови піддослідного кулера

Кулер виявився, на диво, простим приладом, має багато вільного місця — це дало широкі можливості для апгрейду.

Реалізація POC (Proof of Concept)

Аби перевірити концепції, ми розробили мінімальне ПЗ для MCU. Дані передавали на локальний MQTT broker Mosquitto за допомогою поширеного у IoT стандарту MQTT. Швидкоруч прилаштували MCU у кулер і підключили термосенсор до ємності з водою.

У якості UI виступав MQTT Dashboard Android application, за допомогою якого ми бачимо на графіку зміну температури у реальному часі.

Розробка ПЗ для мікроконтролера

Дані отримуються із двох цифрових датчиків: температурного ds18b20 та датчика ваги через HX711. Передаються вони у JSON-форматі за допомогою протоколу MQTT через Wi-Fi підключення. Скрипти написали на мові Lua, вони виконуються NodeMCU firmware. Через обмеженість MCU, а саме неможливість використати криптографію та сертифікати, ми запустили у локальній мережі окремий MQTT broker у режимі мосту, що підписує повідомлення сертифікатом AWS та передає дані у AWS IoT.

SmartCooler/NodeMCU/cooler.lua на GitHub

Дооснащення Smart Water Cooler

Для спрощення монтажу скомпонували плату-перехідник та разом із додатковим блоком живлення інтегрували у кулер. Згодом підʼєднали датчики ваги і температури.

Розробка ПЗ для моніторингу

У AWS IoT налаштували Rule Action, що зберігає отримані від MCU дані у базу даних DynamoDB.

ПЗ для моніторингу реалізовано у вигляді Serverless Lambda function, що викликається за допомогою AWS CloudWatch із заданим інтервалом часу. Lambda перевіряє актуальний запис у DynamoDB та вирішує, які дії потрібно виконати.

SmartCooler/SupervisorLambda/index.js на GitHub

Lambda надсилає повідомлення у відповідну тему AWS SNS (Simple Notification Service), їх отримують Lambda-функції — так здійснюється нотифікація. Для доставки повідомлення у месенджер одна з Lambda-функцій використовує Slack Webhooks, а інша працює з сервісом Twilio для надсилання SMS.

Розробка UI

Web UI ми розробили на AngularJS та розмістили на AWS S3 у ролі хостингу.

Backend для UI імплементовано у вигляді AWS Lambda, що викликається через AWS API Gateway за допомогою звичайних REST запитів. Таким чином, вся програмна складова працює у Managed Cloud Environment, не потребуючи оренди серверу/VPC та додаткового адміністрування. Кількість використаних ресурсів повністю вписується у AWS Free Tier і фактично не потребує плати за використання.

Tech Stack

  • NodeMCU та мова програмування Lua;
  • Сервіс Twilio;
  • AWS IoT;
  • AWS DynamoDB;
  • AWS Lambda;
  • AWS SNS;
  • AWS CloudWatch;
  • AWS API Gateway.

Розробкою команда займалась близько місяця у вільний від проектів час. Окрім отриманого фану та пізнання нових технологій, проект спростив роботу офіс-менеджера та урятував офіс від ймовірної засухи.

Вже маємо на прикметі кілька SmartOffice проектів: автоматизація офісної сигналізації для автоматичного керування світлом і автоматизація опалення та кондиціювання повітря у офісі.

44 комментария

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

О, нормальная статья. А не все эти «где есть и развлекаться программисту» или «как трудоустроиться в IT, если вам за 50».

Кулер будет давать воду при отсутсвии интернета?

Так, звісно :)
Єдине- статус у UI, а також нотифікації відпрацюють лише коли повернеться з’єднання з AWS.
Мінусом є те, що частина історії зникне, оскільки мікроконтролер не зберігає проміжних даних.
Проблему зникання доступу до інтернет можна також вирішити, наприклад, використавши AWS Greengrass.

Планую розробити схожу систему для обліку електроенергії в квартирі. Можливо, порадите доступний датчик струму, бажано з інтерфейсом I2C.

google: «Energy Measurement IC i2c»
— выбираешь то что тебе подходит по спецификациям цене но главное то что ты можешь достать.

ЗЫ: чисто технически всё дело в методе замера (шунте) а саму схему можно «на коленках из подручных материалов» собрать вот интересный вариант на физике и современной элементарной (тоже впрочем физической) базе:

ozapuske.ru/...​ka-na-datchike-xolla.html

Ну собрали конструктор, ничего сверхистественного, а что дальше то?

Ми його назвали «Smart Water Cooler»

Круто!

Сделали — молодцы. Но раз уж выставили на всеобщее обозрение..

Что не понравилось:
— ардуино (стоимость + оверхед, хоть и быстрый вход)
— ангуляр (для пары циферок и графика?)
— бекенд (куча сервисов амазона для проекта уровня «хеллоу ворд»?)

Где буратина? Они ж ее откинули в самом начале в пользу ESP. Все на ней.

Какова себестоимость данного решения?

Рішення доволі бюджетне, впевнений, саме тому на нас чекатиме все більше смарт-приладів на зразок Xiaomi smart scales, kettle, etc.

Собівартість деталей складає приблизно 11$:
esp8266: 3$
HX711: 1$
4x load cell sensor: 5$
Power supply 5v: 1.5$

Так як кількість ресурсів, що ми використовуємо, не виходить за рамки AWS Free Tier- AWS не потребує плати за використання. У Free Tier вписуються більшість «домашніх» задач, таким чином AWS популяризує свої сервіси.
Детальніше тут: aws.amazon.com/ru/free

Воду доставляют не по одному бутлю. Как решили эту проблему?

Интересно lua и облака и динамо поддерживают больше одного каунтера? Ещё есть облачные программы для анализа изображений можно установить веб-камеру и сделать автоматический подсчёт количества бутылей в наличии.

Звісно, будь-яку логіку з каунтерами можна реалізувати у lambda function. У поєднанні з DynamoDB це практично ні у чому не обмежує імплементацію.
А ось задача з розпізнаванням зображень (на думку приходить OpenCV) дійсно цікава!

Вода доставляється партіями і кількість бутлів задана у DB.
Відстежуючи зміну ваги легко зрозуміти коли бутль замінено на наступний.
Отже за рахунок простого лічильника відомо коли потрібно надсилати СМС.

Дуже хороша стаття!

Я так понимаю, что скоро здесь начнут появляться поделки уровня школьников 3 класса на лего.

О! Я как раз пилю дома смарт-Лего-домик. Уже можно зажигать свет на заправке у шторм-труперов если кнопочку нажать.

Думаете, уже можно писать статью?

Думаю що можна :)

А у меня Тардис из лего, можно к вам в клуб ?)

Канешна! В качестве обряда инициации напишите статью на ДОУ, как вы его собирали!

Было бы здорово ещё голос чуви простая имитация.

ЗЫ: и хорошо бы облако через digital ocean а то амазон и мс совсем тренд не хайпово.

Тепер ви розумієте чому я не сприймаю все що пов’язано з Arduino серйозно :)

Это прекрасный интсрумент для школьников, для обучения их.

для школярів так

Это не Arduino, а ESP8266. Прошивка NodeMCU, код написан на LUA.
Сам недавно баловался, если подумать то чип просто революционный т.к за полтора бакса ты получаешь полноценный микроконтроллер с Wi-Fi. Но недостатков пока больше чем преимуществ.
Ну ничего — потихоньку эта отрасль набирает обороты и уже появляются фремворки на серьезных языках типа GO (недавно видел)
Так что я отношусь к НЕ Arduino вполне серьезно.

Для таких речей є С, а різні LUA, JavaScript, MicroPython це рівень прототипу не більше.

рекомендую:
www.cypress.com/products/wi-fi
www.ti.com/tool/cc3000em
www.ti.com/product/CC3200MOD
www.wiznet.io/product/wifi-module

Классно, качественно но дорого.
Если мы строим IOT то нужны характеристики:
— Максимальная доступность в идеале в раза 4 дешевле ESP8266.
— Быстрая разработка — как можно больше библиотек, а лучше хорошие фремворки.

Да и самое главное -чип представляющий собой полноценное устройство на кристале — т.е микроконтроллер + модуль связи.

чип представляющий собой полноценное устройство на кристале

те саме є e WiCIED, правда ціна набагато більша.

Вообще-то в популярном в народе OpenWRT встроен lua (для вебки).

залізо яке юзає

OpenWRT

набагато потужніше ніж esp8266

уже появляются фремворки на серьезных языках типа GO

О_О

це все Arduino like «подєлки», для любительських проектів і прототипів. Створені зменшити поріг входження, і підсадити на це (читати заробити на цьому) якомога більше людей які далекі від електроніки. Можна не мати поняття про закон Ома, але стати «програмістом мікроконтроллерів» :)

P.S. Бізнес Arduino бізнес на цьому процвітає: охопити велику аудиторію людей від школярів до гуманітаріїв, і продавати їм всякі непотрібні шилдики, як цей наприклад: www.ebay.com/...​1616b3:g:bnAAAOSw-0xYgvbe

P.S.S. В комерційних девайсах ніхто таке використовувати не буде.

Ок, во многих коммерческих проектах используют фреймворки. Назови мне хотя бы один годный enbeded фреймворк. А с приходом IoT требования к разработки устройств меняются.

Ок, во многих коммерческих проектах используют фреймворки.

 це не про embedded

Назови мне хотя бы один годный enbeded фреймворк.

, це не фреймворк, але використовуютсья SDK під конктерний девайс, нарпиклад для STM32 ліби SPL, для МК TI: TivaWare (www.ti.com/tool/sw-tm4c) де є більш високорівневі API функції для роботи із залізом.

До проекта жодних претензій, навпаки, все класно і акуратно зроблено.

Тоже самое лет 20 назад можно было услышать про любой софт. Когда-то вообще от ОС открещивались типа — на голом железе работает лучше и быстрее.
Я думаю что в скором времени когда умной должна стать любая зубная счетка, а любой дверной глазок должен будет распознавать людей по лицам на первый план выйдет разработка бизнес логики, причем достаточно быстрая. Вот здесь уже разработчику придется искать баланс между быстрой и удобной разработкой логики и производительностью — пойдут наборы универсальных библиотек, а следом и фреймворки. Э

поживемо — побачимо :)

зубная счетка

Сообщающая голосом: «Сегодня у вас на два зуба меньше».

Ну зачем же так. Мне достаточно знать реально ли чистил ребенок зубы с утра (хотя мне иногда мне нужно знать — реально ли я чистил зубы с утра) Ну не знаю, может еще что-то мерять типа уровень Ph, может простейшие экспресс анализы микрофлоры делать

Подписаться на комментарии