Прототип устройства управления светом для Умного Дома

Откуда взялась идея

Давно хотел сделать себе что-нибудь в духе Умного Дома, и 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 репозиторий.

PlatformIO

Для отладки программы я использовал плату из SDK, и только потом спаял собственную схему на небольшой макетке с минимальной обвязкой для работы ESP8266.

SDK плата с подключенным датчиком

Корпус

Корпус я решил сконструировать сам, используя FreeCAD, и напечатать на 3D принтере. Попутно смоделировать расположение всех модулей внутри, чтобы ничего не пересекалось (поскольку в реальной жизни такое не проходит 🙂 Конкурс красоты, конечно, моя коробка не выиграет, но для первого раза очень даже ничего получилось.

Моделирование компоновки отдельных элементов

И теперь печатаем:

Прототип готов

Сетодиодный модуль закрепил на радиаторе от старой материнской платы. Модуль очень прилично греется и при непосредственном контакте легко расплавит PLA пластик. Фирменный белый провод остался от старого чайника.

Постановка на боевое дежурство

Связь с сервером MQTT

Сервер MQTT я поставил на постоянно работающую RaspberryPi, подключенную к нашей домашней сети. Сделал отдельную Wi-Fi сеть для устройств Умного Дома. Связь между клиентами и сервером защищена SSL. Вместе с сервером идёт клиент для командной строки. С помощью него можно загрузить настройки для разных модулей и получать сообщения от других клиентов. Нужно чтобы каждый модуль загружал свои настройки.

Для того, чтобы прошивка модулей была универсальной, я сделал двухступенчатую систему идентификации каждого модуля. Каждый модуль имеет уникальный MAC адрес. А на сервере все настройки привязаны к текстовому имени устройства, в данном случае “kitchen-sink”. И существует одна строчка привязки MAC адреса радиомодуля устройства к имени. Таким образом, при замене модуля нужно поменять всего одну строчку в конфигурации на сервере.

На рисунке внизу величины параметров идут от “/config”, они задаются скриптом при старте севера. А величины, передаваемые модулями, содержатся внутри дерева “/status”. Сначала идёт имя параметра и, через пробел, значение. Строчка “effect/11 1” означает, что в матрице связи входов/выходов всего одна единичка – при срабатывании входа №1 нужно включить выход №1.

Зелёным отмечены сообщения от устройства.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.