Откуда взялась идея
Давно хотел сделать себе что-нибудь в духе Умного Дома, и IoT (Internet of Things). Для начала решил сделать устройство для управления светом. Лампочек в квартире много, есть люстры с несколькими отдельно включаемыми лампами, есть коридор, где свет хорошо бы включать только по необходимости, и так далее. И, конечно, делать для каждой ситуации своё устройство неэффективно. Поэтому возникла идея сделать нечто универсальное и программно настраиваемое для конкретного места. Естественно, всё должно быть подключено к Wi-Fi для централизованного управления.
В качестве тестового полигона решил использовать мойку на кухне. Мойка стоит в тёмном углу, в качестве временной меры мы поставили там лампу на прищепке с выключателем на проводе. Но работать с незащищённым выключателем мокрыми руками рядом с заземлённой раковиной – не очень удачное решение. Да и руки часто заняты.
Принципиальная схема
Для универсальности устройство имеет два входа и три выхода. Ко входам могут быть подключены датчики движения, или просто выключатели. К двум выходам – реле для управления нагрузкой. К третьему выходу подключен светодиод для индикации текущего состояния. По умолчанию на него выводится статус подключения к Wi-Fi, но это можно поменять настройками.
Дополнительно может быть подключен датчик температуры и влажности, но это на будущее.
Программа устройства имеет настраиваемую матрицу управления – как сигналы на входах влияют на выходы. Дополнительно есть настраиваемые задержки на входах и выходах.
Для управления по сети выбрал протокол MQTT. Это очень популярная система, в которой есть сервер, поддерживающий базу данных с разными величинами. И клиенты, подключаясь к серверу, могут, во-первых, обновлять значения, а во-вторых, получать уведомления об изменении значений, которые им интересны.
Таким образом можно связать любое устройство с любым другим. Есть очевидная схема с датчиками, сообщающими о включении / выключении света, и центральным устройством с экраном, где всё это отображается. Но можно представить и более интересные варианты, когда, например, последовательное срабатывание датчиков в коридоре приводит к включению света в комнате, поскольку человек движется в ту сторону.
Железо
В качестве “мозга” был выбран модуль ESP8266. У него есть достаточно цифровых входов и, конечно, главное отличие от Arduino – встроенный Wi-Fi. Модуль недорогой, его легко программировать благодаря наличию SDK. Он вставляется в разъём на небольшой самодельной макетной плате. Также на плате находятся резисторы для обеспечения работы модуля и конвертер 5В -> 3.3В.
Позже пришлось добавить стабилизатор напряжения питания из конденсатора и диода. Иначе модуль перезагружался при срабатывании реле. Хотя контрольные сигналы на реле подключены через оптопары, а питание катушек идёт от 5В, т.е. до конвертера питания ESP8266.
Датчик движения – самый обыкновенный, с двумя подстроечными сопротивлениями.
Для управления нагрузкой я сначала использовал двухканальный модуль с механическими реле, но после пары месяцев эксплуатации заменил реле на твердотельный модуль.
Реле управляются напряжением в 5 Вольт, а модулю ESP8266 требуется 3.3 Вольта. Так что понадобился источник питания 220 -> 5 Вольт и дополнительный слаботочный модуль для понижения до 3.3.
В качестве источника света я взял уже готовый светодиодный модуль, работающий от 220 Вольт.
Софт
Для разработки софта я на этот раз использовал не IDE для Arduino, а среду PlatformIO, основанную на универсальном редакторе Atom. Это решение на 100% совместимо с Linux, и можно вести разработку одновременно на разных платформах, синхронизируясь через git репозиторий.
Для отладки программы я использовал плату из SDK, и только потом спаял собственную схему на небольшой макетке с минимальной обвязкой для работы ESP8266.
Корпус
Корпус я решил сконструировать сам, используя FreeCAD, и напечатать на 3D принтере. Попутно смоделировать расположение всех модулей внутри, чтобы ничего не пересекалось (поскольку в реальной жизни такое не проходит 🙂 Конкурс красоты, конечно, моя коробка не выиграет, но для первого раза очень даже ничего получилось.
И теперь печатаем:
Прототип готов
Сетодиодный модуль закрепил на радиаторе от старой материнской платы. Модуль очень прилично греется и при непосредственном контакте легко расплавит PLA пластик. Фирменный белый провод остался от старого чайника.
Связь с сервером MQTT
Сервер MQTT я поставил на постоянно работающую RaspberryPi, подключенную к нашей домашней сети. Сделал отдельную Wi-Fi сеть для устройств Умного Дома. Связь между клиентами и сервером защищена SSL. Вместе с сервером идёт клиент для командной строки. С помощью него можно загрузить настройки для разных модулей и получать сообщения от других клиентов. Нужно чтобы каждый модуль загружал свои настройки.
Для того, чтобы прошивка модулей была универсальной, я сделал двухступенчатую систему идентификации каждого модуля. Каждый модуль имеет уникальный MAC адрес. А на сервере все настройки привязаны к текстовому имени устройства, в данном случае “kitchen-sink”. И существует одна строчка привязки MAC адреса радиомодуля устройства к имени. Таким образом, при замене модуля нужно поменять всего одну строчку в конфигурации на сервере.
На рисунке внизу величины параметров идут от “/config”, они задаются скриптом при старте севера. А величины, передаваемые модулями, содержатся внутри дерева “/status”. Сначала идёт имя параметра и, через пробел, значение. Строчка “effect/11 1” означает, что в матрице связи входов/выходов всего одна единичка – при срабатывании входа №1 нужно включить выход №1.
Зелёным отмечены сообщения от устройства.
Leave a Reply
You must be logged in to post a comment.