Фактически, это адаптация проекта по управлению поливным коллектором. Надоело вручную включать и выключать вечером автомат секции теплого пола, решил немного автоматизировать процесс.
В данном случае отказался от использования ШИМ-контроллера и модуля клавиатуры; исполнительный механизм – релейные модули и управление идет напрямую от ESP.
Для местного управления добавил 4 кнопки, подключенные к единственному аналоговому входу – это первый проект у меня, где я использовал подобный подход. Словил интересную аномалию: сначала по ошибке сделал подтяжку делителя не к 3,3В, а к 5В – ну и схема делителя была чуть другая. Суть в том, что на аналоговый вход приходило напряжение выше, чем напряжение питания. Проявилось это как невозможность авторизоваться на wifi-точке. Как? Понятия не имею. Облазил весь дебаг – точки видны, идет переключение между ними, идет попытка подключения – и все, ошибка авторизации. Отключаешь подтяжку – все ок. С того времени чуть переделал делитель, но, возможно, все же стоило использовать второй вариант из этих статей – не потребовался бы отдельный резистор подтяжки. Зато найти несколько одинаковых резисторов оказалось проще.
Таймер нажатия для улучшения помехоподавления для кнопок в коде не использовал, пока ложных срабатываний не было.
Дополнительно подключил один термодатчик ds18b20. В настройках таймера добавил возможность срабатывания лишь по факту повышенной или пониженной температуры относительно установленной. В идеале, конечно, добавить еще функцию термостата – т.е., срабатывание исключительно по триггеру температуры, без учета времени.
Состояние всех реле сохраняется между перезапусками. Разбивку EEPROM пришлось чуть поменять относительно проекта для поливного коллектора – добавилось сохранение состояния еще одного исполнительного устройства (технически, ничего не мешает использовать один байт для сохранения состояния всех реле или всех кранов в случае с коллектором, но места хватает, а код так чуть проще), плюс хранение триггера термостата и значения температуры для термостата.
Для сборки проекта использовал самый маленький из имеющихся корпусов с arduino.ua. Пришлось использовать 2 отдельных релейных модуля по 2 реле вместо одного на 4 – мешала центральная крепежная стойка. Термодатчик первоначально разместил в верхней крышке. Это было ошибкой – корпус довольно ощутимо подогревался электроникой внутри, в итоге показания уплывали градусов на 15. В итоге переделал конструкцию под внешний датчик, после чего все стало нормально. Отсутствие вентиляции в корпусе, конечно, минус – нагрев особенно заметен, когда работают несколько реле. Но пока все работает.
В этот раз в качестве “мозга” проекта использовал ESP-12 с платой-адаптером. На плате местного управления разместил кнопки с резистивными делителями и светодиоды индикации включения реле. Светодиоды подключены параллельно тем, что размещены на релейных модулях.
БП – на 5В с того же arduino.ua; далее из 5В на плате-адаптере делается 3,3В с помощью стабилизатора 7333. Он не вполне становится на штатное посадочное место, поэтому можно использовать “мостики” из монтажного провода для крайних выводов. Для использования стабилизатора надо не забыть убрать на плате перемычку между его входом и выходом. Так как на плате-адаптере нет выхода после стабилизатора, то для вывода питания клавиатуры и термодатчика можно в дальнейшем использовать точку – посадочное место для этой перемычки.
Входы/выходы устройства сделаны с использованием 2EDGRM-5.08 – двух 4-контактных под выходы и одного двухконтактного под ввод питания. Использовал узкую монтажную плату под размещение всех разъемов, рассверлив отверстие до нужного диаметра. При этом практически не остается металлизации, за которую может держаться разъем, поэтому при пайке соединительных проводов активно использовал связь с соседними точками.
Вариант первый, до добавления внешнего датчика:
Как выяснилось, пластик крышки весьма хрупкий и активно скалывается при сверлении. Сверлить большие отверстия стоит постепенно, с шагом в 0,5 мм.
Итоговый вид после переделки под внешний датчик:
Еще из аномалий, замеченных уже в процессе использования – легкое помигивание отключенных светодиодов. Почему так происходит – не разбирался. Update: возможно, это из-за того, что модули реле active low (не проверял) и разницы в питании между модулями реле и микроконтроллером. В итоге “0” для модуля – это +3.3В от микроконтроллера, а вторым концом светодиод подключен к +5В. Напряжение близкое к засветке красного светодиода, а из-за каких-нибудь пульсаций он в итоге и помигивает. По-идее, надо бы развязать питание реле и входных каскадов и запитать вход от 3.3В.