Год эксплуатации контроллера управления вентилятора в ванной на ESP8266 выявил массу недочетов в эксплуатации. И хотя интеграция в MajorDoMo этого устройства прошла на ура, основные из них создавали проблемы
- «Подвисание» контроллера при отсутствии сервера или вайфая, связанные с таймаутами в протоколе TCP/IP
- Перезагрузки контроллера при интенсивном обмене информацией с сервером
- Удаленная кнопка включения вентилятора из туалета постоянно ловила помехи, вызывая ложные включения выключения
Эксперимент с протоколами MQTT/HTTP и прочими особо ничего не изменил. 100% надежности работы так и не получилось. Рассматривая пути решения проблемы — вернуть все назад на Atmega328, перейти на ESP32 или поискать более менее стабильную прошивку ESP8266 типа BLYNK, остановился на первом, но с дополнением радиомодуля NRF24L01 и библиотеки Mysensors.
Вот что из этого получилось:
Аппаратная часть
Плату сделал под старый корпус, блок питания, индикатор, кнопку и реле. В схему добавил простейший подовитель помех для внешней кнопки. Ну и ESP8266 заменил на Atmega328p-pu и модуль NRF24L01
Далее все по накатанной технологии
Проектирую плату
Изготавливаю при помощи лазерно-ламинаторной технологии (вспоминая утюг, как страшный сон). Травлю в растворе лимонной кислоты с добавлением пергидроля.
Сверление и вырезание выполняю на станке
Остается только все спаять и отладить
Сравнение со старой платой на ESP8266
Со сборкой железа все. Собираю в коробку и программирую
Список основных компонентов:
- Микроконтроллер Atmega328P-PU ~ $1.8 (сильно подорожали в последнее время)
- Модуль NRF24L01 ~ $0.75
- Сенсор DHT21 (AM2301) ~ 3$
- Модуль индикатора TM1637 ~ $0.6
- Блок питания 3.3В ~ $2 (зависит от партии)
- Блок питания около $1
- Прочие детали < $1
Итого бюджет по деталям около $10
Особенности прошивки
В прошивке использовались готовые библиоткеки
- Библиотека Mysensors 2.2.0
- Библиотека работы с семисегментным индикатором на TM1637
- Библиотека DHT11/21/22 от Adafruit
- Моя библиотека работы с кнопками, описанная здесь
В текущей ноде объявлены 5 информационных параметров — влажность, температура, наличие света, работа вентилятора и ручной режим, 3 параметра для конфигурации — установка уровня влажности, уровня АЦП с фотореле и время работы вентилятора по таймеру и один параметр управления, включающий/выключающий ручной режим работы (имитирующий кнопку). Также периодически запрашивается текущее время у сервера по протоколу Mysensors.
Алгоритм работы упрощен по отношению к предыдущим версиям.
Ручной режим включает вентилятор на время заданное таймером или выключает вентилятор на это же время. В автоматическом режиме вентилятор включается при достижении порога влажности и отсутствии света и выключается при нормализации влажности.
Прошивку, схему и печатную плату в формате SprintLayers можно взять на GitHub вместе с другими моими проектами умного дома
Теперь самое интересное
Настройка MajorDoMo
Для взаимодействия MySensors с Majordomo нужен NRF24L01 подключенные к серверу (в моем случае Orange PI PC с такой вот универсальной платой), сервис MYSGW и модуль MajorDoMo Mysensors, устанавливаемый из Маркета дополнений. Также следует обратить внимание, что настройки на контроллерах Mysensors (скорость работы, выбор канала …) полностью соответствуют настройкам при сборе MYSGW.
На сервере я установил модуль NRF24L01 с дополнительным усилителем RFX2401C и внешней антенной на 2dBi
Включаю контроллер и добиваюсь, что статистика, включенная флагом #define MY_DEBUG показывает старт библиотеки с модулем и обмен с сервером. После этого в настройках MajorDoMa захожу в устройства Mysensors и нахожу ноду с номером, указанным #define MY_NODE_ID 30
Если этот параметр убрать в прошивке, то сервер сам присвоит ID ноды, аналогично службе DHCP
Меняю в настройках названия ноды с номера на удобное мне
После этого можно переходить к настройкам сенсоров моды. Если презентация всех сенсоров прошла номально, то все сенсоры автоматически появляются в настройках данной ноды
Для тех сенсоров, которым требуется отображение по ссылке «Добавить» в колонке «Устройство» создаю простые устройства, связанные со значением value данного сенсора
Все, можно переходит к части отображения параметров. В данном случае я создал отдельную схему на который вывел все интересующие меня параметры работы вентилятора
Тип параметров я выбрал в виде информеров, хотя можно было сделать HTML элементы.
На параметре «вентилятор» добавил действие по клику, меняющее свойство управляющего параметра, что приводи к включению/выключению вентилятора в ручном режиме параллельно кнопке
Добавлю график из плугина «Графики», отображающий влажность и работу вентилятора (по желанию можно и другие параметры). Код, который формируется при настройке графика вставляется на сцену в виде HTML элемента
В коде можно задать размеры графика и время отображения
На вкладке «Просмотр и Редактировать» визуально настраиваем расположение элементов сцены и размеры графика
Вот такая простая SCADA система. Теперь на этой схеме можно наблюдать процесс работы вентилятора, а также управлять в ручном режиме. Здесь на графике показана работа во время двух процедур принятия ванной и душа, а также ручные включения вентилятора по кнопке
Настройка параметров будет осуществляться через модуль Mysensors по ссылке «Установить значение».
Ну вот и все. Новая версия контроллера успешно прошла недельную опытную эксплуатацию. Никаких недостатков пока не выявлено. Сбоев нет, помехи на кнопке не ловятся. Данные стабильно передаются на сервер. Красота!
При необходимости можно добавить управление вентилятором через любое исполнительное устройство, подключенное к MajorDoMo — выключатель или miHome Cube, например. Добавить уведомления по режимам работы контроллера. Настроить форму настройки параметров. Пока такой задачи не стоит. Ведь в таких проектах что главное — главное во время остановиться делать все в соответствии ТЗ и не усложнять сущность без надобности (C). На данном этапе я рад, что нашел готовое серверное решение значительно упрощающее превращение отдельных умных железок в полноценный умный дом
Мой длинный путь усовершенствования контроллера вентилятора здесь
А это мой помощник и «повелитель хаоса»
Извините за назойливость а почему остановились именно опять на агмеге? esp32 думаете тоже не стабильна и будет зависать? пробовали с блин тоже виснет? меня это тема тоже волнует сколько людей столько и мнений.
Блинк не пробовал. Мне кажется, проблема не в прошивке, а в железе.
ESP32 пока показывает себя более стабильной, только избыточна. А так как я наплодил сенсоров на батарейках — NRF24 в них себя очень неплохо показывает
*Атмега
*Blink
просьба перезвонить, интересует модуль управления вентиляцией 89519018080 Андрей
здравствуйте. Необходимо реализовать блок управления вентилятором мощностью 70 вт.
Включение от освещенности с задержкой до 15 мин (больше 30 мин включен свет вентилятор выключается), влажности (более 60% включение). Соединение с интернет не нужно. Я не нашел предложения по датчикам света с регулировкой чувствительности.
Любой фоторезистор подключенный к аналоговому входу контроллера
Или цифровой сенсор типа MAX44009 который просто возвращает текущую освещенность