Контроллер управления вытяжным вентилятором с WiFi

    image
    Почти два года прошло с изготовления контроллера управления влажностью для ванной комнаты. Все это время контроллер служил верой правдой без глюков и зависаний, как и положено хорошему устройству и даже обзавелся с легкой руки моей супруги гламурным корпусом ручной работы.

    image

    Но технический прогресс неумолимо бежит вперед и новые веяния опять не давали мне покоя. Давно вынашивал идею реализации концепции умного дома на WiFi модулях ESP8266. Некоторое время экспериментировал с этими модулями и теперь решил свой «умный дом» на них перевезти.

    Основной целью проекта поставил реализацию новых возможностей, которые в дальнейшем буду применять в других устройствах.
    Итак, что мне даст модернизация контроллера вентилятора на ESP8266?

    Новые возможности


    • Просмотр всех показателей по WiFi с компьютера/планшета/телефона.
    • Обработка дополнительных параметров — время наработки вентилятора и время горения лампы в ванной комнате.
    • Управление вентилятором по WiFi с компьютера/планшета/телефона.
    • Настройка работы контроллера по WiFi с сохранением значений в энергонезависимую память.
    • Периодическая запись значений всех показателей на сервер в интернете.
    • Ну и, раз все равно есть интернет, отображение времени с синхронизацией по NTP протоколу.

    Все эти функции дают возможность анализа работы контроллера и, в дальнейшем, оптимизации параметров управляющего алгоритма. Ну и данный контроллер войдет в общую систему умного дома с мониторингом параметров среды ванной комнаты.
    image
    Схема не сильно изменилась от предыдущей версии:
    • Atmega328 заменена на ESP8266
    • Семисегментный индикатор заменен готовый модуль дисплея на TN1637
    • Симистор с оптопарой заменены твердотельным реле (то же самое, но в корпусе).

    Все главные отличия в программе контроллера.

    Перечень компонентов


    • Модуль ESP8266 ESP07 с платой адаптером ~ $2.3
    • Четырехразрядный семисегментный дисплей на микросхеме TM1637 с I2C подключением ~ $1
    • Твердотельное реле OMRON G3MB-202P ~ $1
    • Блок питания 220В/3.3В 600мА ~ $2.2
    • Датчик температуры и влажности (точность низкая, но для моих задач достаточная) DHT11 ~ $0.7
    • Приборный пластиковый корпус 110х73х34 ~ $1
    • Фоторезистор, просто резисторы, макетка и провода

    Итого около $9
    Все детали кроме корпуса и блока питания куплена на aliexpress.com. Корпуса и БП по адекватным ценам заказываю с taobao.com
    image

    Сборка контроллера


    Этот контроллер — прототип для будущих устройств на ESP8266, поэтому монтаж сделал на макетной плате.
    image
    Светофильтр под индикатор изготавливаю из папки-уголка для бумаг, купленной в магазине канцтоваров. Прозрачное окно для фоторезистора — защитная пленочка оставшаяся от какого-то телефона (заказывал когда-то с запасом, теперь валяются)
    image
    А это мой старый контроллер, проработавший в ванной два года
    image
    При отладке обнаружился технологический дефект — фотодиод за окошечком в корпусе получал слишком мало света и без усилителя не срабатывал при зажигании лампы в ванной комнате, пришлось его вывести наружу в сторону лампы
    image
    image

    Теперь расскажу об особенностях программы, алгоритмах управления и настройках этого контроллера.

    ESP8266, в отличие от Atmega328, на которой была реализована предыдущая версия, имеет гораздо больше памяти (ОЗУ, ПЗУ. EEPROM), что позволило вкупе со встроенным WiFi реализовать функции встроенного WEB-сервера, не экономя память для текстовых строк.

    А вот с GPIO у ESP8266 довольно плоховато, поэтому, такая роскошь, как управления семисегментным индикатором напрямую ему не доступна. Поэтому и выбран индикатор на микросхеме TM1637, требующий для подключения всего два вывода.

    Среда разработки


    Я достаточно наигрался с различными прошивками ESP8266 позволяющими писать программы на встроенных интерпретаторах LUA, JC и вообще программировать через WEB. Пробовал писать на одном SDK. Остановился на компромиссном варианте — программировании в Arduino IDE.
    Довольно простая установка, программирования и огромное количество готовых библиотек, которые, в большинстве своем, работают на ESP-шке. Эта среда позволила использовать много старого кода, обеспечивающего основную логику работы контроллера управления вентилятором сохранилось с предыдущей версии.

    В основном интересно было перенести хорошо зарекомендовавший себя алгоритм, реализующий конечный детерменированный автомат состояний, описанный в таблице переходов состояний:
    image
    Подошли без проблем и ардуиновские библиотеки DHT для работы с датчиками влажности/температуры от Adafruit и для работы с индикатором на TM1637 DigitalTube.

    Подробности использования Arduino IDE для программирования ESP8266 хорошо описаны в этой статье

    Реализация новых функций


    Очень неудобно делать WiFi контроллеры, в которых зашиваются параметры подключения к сети. Представляете, во что выльется смена имени точки доступа или пароля при наличии десятка таких контроллеров дома?

    Поэтому в данном программе реализованы функции сохранения параметров подключения в энергонезависимую память EEPROM и настройка их по сети. Структура для сохранения параметров, а также чтение и запись ее реализованы в файлах WC_EEPROM.h и WC_EEPROM.cpp моего проекта. Верификация чтения и записи производится при помощи вычисления контрольной суммы конфигурации и сравнения ее с записанной в EEPROM.

    Кроме конфигурации сети в память сохраняются также все таймауты и прочие параметры алгоритма управления вентилятора, что позволяет оптимизировать и настраивать данный контроллер прямо «по воздуху».

    Отображение режимов работы, настройка конфигураций контроллера, а также непосредственное управление вентилятором реализовано при помощи встроенного WEB-сервера (фалы WC_HTTP.h и WC_НTTP.cpp)

    Алгоритм настройки точки доступа следующий:

    Если ESP-шка не смогла подключиться к прописанной в конфигурации EEPROM точке доступа, то она поднимает свою точку доступа и по адресу 192.168.4.1, позволяет сконфигурировать.
    Ну а если подключилась, то работает в штатном режиме.
    Главная страница WEB-сервера показывает основные параметры контроллера и позволяет вручную включить/выключить контроллер (аналог нажатия кнопки ручного управления)
    image
    Здесь же можно перейти на страницу сетевых настроек
    image
    и страницу настроек алгоритма работы контроллера
    image
    С этих двух страничек можно выполнить перезагрузку контроллера и сброс всех настроек «по умолчанию».

    «Наводить красоту» на интерфейс я еще планирую в будущем, когда концепция умного дома на WiFi более менее устаканится у меня в голове.

    Еще одна функция, реализованная в этой программе — часы реального времени, синхронизирующиеся по NTP протоколу в интернете. (Файлы WC_NTP.h и WC_NTP.cpp)

    Описание основного алгоритма описывать не буду, логика работы себя хорошо зарекомендовала и осталось прежней, почитать про нее можно в предыдущей статье. Основные изменения коснулись дисплея. Хочу обратить внимания на одну «фичу» — функцию DisplaySpecialChar(), которая позволяет по битовой маске вывести любой символ, который можно придумать для отображения на семисегментном индикаторе. Я придумал вот такой символ «процентов» в отображении влажности
    image
    и символ «градусов» при отображении температуры
    image
    Биты в битовой маске соответствуют сегментам индикатора.

    Ну и последняя из новых функций — сохранение параметров на сервер в интернете для отображения и последующего анализа. Сохраняются значения влажности, температуры, аналогового порта с фоторезистором для подстройки порога срабатывания освещения, время работы вентилятора, время горения света и UPTIME-время работы контроллера от последней перезагрузки.

    Запись на сервер происходит в двух режимах. С большей периодичностью записываются параметры, когда в ванной «что-то происходит», в это время либо горит свет, либо работает вентилятор. Все таймауты настраиваются через WEB-интерфейс.

    Сохраняются данные на мой сервер в интернете. Адрес сервера можно настроить, а вот формат записи пока зашит в программу. Опять до лучших времен устаканивании концепции ))). Сейчас параметры сохраняются простейших PHP-скриптом в таблицу с простейшей структурой.
    image
    Довольно просто перенастроить сохранения параметров на тот же «народный мониторинг». Лично меня это сервер не устраивает ограничениями в периодичности сохранения данных и глубине архива.

    Оптимизация настроек контроллера


    После «опытной эксплуатации» можно определить, правильно ли установлены пороги срабатывания освещения и влажности, а также таймауты различных событий. В прошлой реализации я установил время срабатывания 20 минут, сидя в ванной с секундомером. Понаблюдав за графиком параметров во время нескольких принятий душа я увидел следующее:
    image
    • Влажность в зимнее время меняется на 35-40%
    • Время нормализации влажности при естественной вентиляции 20-25 минут
    • Время нормализации влажности с работающим вентилятором 10-12 мин
    • Вентилятор повышает эффективность проветривания вдвое

    Исходя из этого можно смело снизить время работы вентилятора до 12 мин, тем самым продлив время его службы и чуточку сэкономив электроэнергию. Подобный анализ можно провести для других времен года, когда влажность в квартире совсем другая.

    Теперь, после проведения анализа можно увеличить период записи параметров на сервер.

    Выводы



    • Контроллер на ESP8266 работает стабильно, функции свои выполняет.
    • Функциональность его расширилась, теперь им легко управлять и он нормально интегрируется в систему Умного дома
    • Некоторые вещи требуют доработки, например, WEB-интерфейс, авторизация доступа, серверная часть и некоторые неточности в расчете времени работы вентилятора и света. Может быть выявятся и другие хотелки по улучшению.
    • Пилотный проект по Умному дому на WiFi можно признать успешным ;)

    Скетч можно скачать здесь. Буду очень признателен, если сообщите о найденных ошибках.

    Скетч контроллера вентилятора на WiFi

    Затраченное на проект время — два выходных дня

    P.S. Сразу отвечаю на вопрос, зачем так сложно? Можно посадить параллельно выключателю или на таймер?
    — Да можно. Но включение по таймеру и свету меня не устроили. К тому же это хобби, реализация некоторых идей, который применяются в других проектах.

    Хаброхранилище опять глючило, поэтому картинки с моего блога. Там же можно посмотреть про мои наработки по умному дому
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 41

      0
      У меня тоже организовано управление вентилятор по уровню влажности. Датчик поставил на вентиляторе, контроллер установленный в ванной передает данные влажности на сервер УД, который уже отдает команды на включение\выключение вентилятора, при достижении определенных порогов влажности.
      Фото датчика

        0
        Передается на сервер по воздуху?
          +1
          Через провод по MQTT
          0
          Расположив датчик далеко от вентилятора, достигнем более длительных интервалов работы, без «дребезга», уменьшим частоту паразитной обратной связи. Как результат — более равномерная работа вентилятора. Т.е. я бы датчик разместил там, где после душа сыро, а должно быть сухо, например, у шкафчика с порошками.
            0
            У меня и так датчик с контроллером на противоположной стене.
            И еще, алгоритм не работает как PID-регулятор, а срабатывает на скорость изменения влажности
            0
            Так у Silent Design есть же вентиляторы со встроенным датчиком влажности. Зачем было городить огород? У меня такой стоит, всё прекрасно работает. Если душ принять быстро, то влажность не успевает сильно повыситься, и вентилятор не включается. Если долгий душ или ванна — то сам включается.
              0
              Во первых, это хобби, что то делать своими руками
              Во вторых, из экономических соображений. Ваш вентилятор стоит больше 10 крублей
              В в третьих, мне и моим домашним не нравится, когда вентилятор включается при принятии душа ибо дует )))
                0
                http://www.klimatlite.ru/catalog/ventilyatory_silent/594/ventilyator_silent_100_chz/
                Покупал здесь 2 года назад за 2600, сейчас 5200 правда, но не 10.
                0
                У меня в каждой комнате стоят датчики. Логика от встроенного датчика не гибкая. У меня же можно установить любой порог и любой алгоритм включения\отключения вентилятора.
              0
              Еще один плюс по сравнению с подключением параллельно освещению: уменьшение количества пусков вентилятора, что также благотворно скажется на его долговечности.
                0
                Мои домашние очень не любят принимать душ при работающем вентиляторе ибо «дует им»
                Поэтому параллельно свету, даже по таймеру — для меня было плохо
                0
                только я бы хотел уточнить: вроде бы считается, что нормальная влажность = 50-60%, для ванной — может быть даже еще и повыше.
                Таким образом, у вас и так воздух «суховат» и только кое-как достигает нормальных значений? Либо барахлит датчик влажности?
                в любом случае нужно же отталкиваться от требуемых значений, а не тех, которые были до пользования ванной.
                  0
                  Летом влажность в квартире выше и ванной тоже.
                  В любом случае я не отталкиваюсь от абсолютных показателей, а организовываю работу по скорости изменения. При таком алгоритме даже если датчик глючит — вентилятор все равно включается нормально
                    0
                    а почему SCL и SDA не подтянуты к питанию через резисторы?
                    и еще вопрос, насколько стабильно работает esp?
                      0
                      Когда экспериментировал с ESP, обнаружил — перезагрузка контроллера вызывается либо переполнением памяти, либо долгим выполнением какой-то функции, мешающей работать WiFi по таймеру. Тогда срабатывает его WDT.
                      В данной реализации все отладил. Поэтому после последней прошивки аптайм неделя, полет нормальный
                        0
                        А можно подробнее про зависание ESP и борьбу с ними. О каком переполнении памяти идет речь? Что за функции приводят зависанию?
                          0
                          Переполнение памяти происходит в основном из за страшной для микроконтроллера переменной типа String. Там ведь память динамически выделяется.
                          Когда строка, например, для выдачи страницы, формируется сперва в памяти, а потом одним оператором выводится.

                          Борьба же в основном ведется с внутренним таймером WDT, срабатывающим, я так понял при невозможности выполнить базовые действия контроллера (чаще всего WiFi функции), связанные с обработкой моего кода.
                          Причем, отключить данный таймер у меня так и не получилось.

                          Например, 100% срабатывание данного таймера вызывает попытка выгрузить из контроллера по WEB интерфейсу файл размером более 200к (была у меня мысль логи на карточку писать и потом их выгружать)

                          Во многих местах спасают дополнительные задержки 100 и более миллисекунд, позволяющие эти самые WiFi функции отработать и успокоить WDT
                            0
                            Благодарю.
                    0
                    Повставлял ардуин где надо и не надо, но в ванной вентиляция сделана на двух 120мм компьютерных вентиляторах, работающих круглосуточно. Шума почти не слышно, но с влажностью справляются.
                      +1
                      Сначала не мог понять, в чем проблема с графиком, потом понял, что цвета в легенде и комментарии перепутаны (синий по легенде принадлежит безвентиляторному, а в комментарии наоборот).
                        +1
                        sav13, на счет WEB-интерфейса, посмотрите как сделано здесь
                        Поддерживает обновление данных по Ajax.
                        Ещё можно добавить обновление прошивки через WEB-интерфейс.

                        Вот здесь еще очень интересный вариант создания веб-интерфейса на темплейтах ссылка
                          0
                          Ссылки вырезало
                          github.com/kmaximv/Wi-Fi-Sensor
                          image

                          Вот здесь еще очень интересный вариант создания веб-интерфейса на темплейтах github.com/luc-github/ESP8266
                            0
                            Обновление прошивки, на сколько я разобрался, получается только на модулях с 4Мб флэшем. Или маленькие скетчики заливать. У меня партия ESP07 завалялась.
                              0
                              А DHT11 нормально с ESP работает? Пробовал подключать DHT22, данные отдавал через раз, хотя с ардуинкой работал нормально.
                                +1
                                С DHT никаких проблем. Что с 11, что с 22. В ранних адавуйтовских библиотекаках там нужно было тамаут подбирать к тактовой частоте. У ESP8266 — 15.
                                В последних версиях этот параметр автонастраивающийся по микросекундам
                                Может библиотеку сменить/обновить?
                                Их много разных
                                  0
                                  Хорошо, попробую. А по УД к OpenHab не присматривались?
                                    0
                                    Присматриваюсь.
                                    К разным присматриваюсь.
                                    Сейчас еще несколько проектов реализую дома — определюсь.

                                    Супруга заказала контроль влажности растений.
                                    Будут сенсоры на Меге 8 с радио на батарейке в каждом горшке.
                                    И ESP-шка все это принимать и обрабатывать
                                      0
                                      О, я как раз такой проект задумал, с контролем влажности, автоматическим поливом и освещением. Какие сенсоры влажности собираетесь использовать?
                                        0
                                        Луженые, а в, перспективе, грифельные электроды.
                                        Какие там еще сенсоры? Сопротивление почвы на аналоговый вход через делитель или измерительный мостик.
                                        Питание мостика от вывода микроконтроллера, чтобы питание с батарейки не кушал в режиме сна
                                        Еще хочу туда фоторезистор поставить и терморезистор (или далласовский датчик температуры)
                                        Будет выдавать информацию по количеству света для каждого растения и температуре.
                                        В общем, микроклимат целиком.
                                        Ну и фитолампы с управлением по тому же радио.
                                        Останется подобрать оптимальные режимы для каждого растения
                                          0
                                          Тоже выбрал графитовые стержни для сенсоров. Буду с интересом следить за вашим проектом.
                                            0
                                            Прочтите это: oldoctober.com/ru/humidity_sensor
                                              0
                                              Купил супруге на АЛИ такой вот измеритель
                                              image
                                              Там как раз похоже ЭДС почвы и мерится
                                              Электрод угольный и медный
                                              image
                                              Работает уже года 3. Только лучше в почве не оставлять его.
                                              Показания стабильны и с сухостью почвы коррелируют нормально

                                              А переменный ток подавать на измеритель, это просто. Можно с ШИМ выхода.
                              0
                              У меня на esp8266 приточка управляемая от co2, и в планах увлажнение и обогрев. Я наоборот влажность поднимаю и комфортно для меня не менее 40 процентов, а то и 50.
                                0
                                Влажность должна во всей квартире быть 40-50
                                Летом так и происходит
                                А ванной получается 60-70 после принятия душа. Грибок будет на потолке развиваться

                                По CO2 хорошо кухню проветривать
                                CO2 + датчик дыма (прозрачности воздуха) + датчик газа
                                Тоже планирую сделать такой
                                  0
                                  У вас на графиках падение влажности до 30%. Значит в квартире не выше, воздух то с квартиры зайдёт.
                                  По CO2. Я дома мало готовлю. У меня приточка в комнате, где рабочее место и спальня. я держу не не выше 600-800 ppm. Для этого всегда когда я в комнате работает приточка. Минут через 15 включается по co2 просто от того что я пришёл. И 10 литров испарения в сутки еле еле справляются. Если холодно на улице то не справляются.
                                0
                                У вас по тексту везде ESP8266, а в конце статьи таргет ссылка на ESP8255. Такой чип тоже есть в природе, но вроде как мало кто использует…
                                  0
                                  Очепятка.
                                  Сейчас разве что ESP32 дождаться с нормальным SDK
                                  0
                                  мне вот интересно… рассыпуху всех элементов возможно поместить в стандартные круглые установочные коробки для розеток в бетонных или кирпичных стенах (выпускаются следующих размеров: диаметром 60, 68, 70 мм и глубиной от 40 до 70 мм)
                                  +1
                                  У Вас на схеме R2 к S2 не с той стороны подключен
                                    0
                                    Спасибо. Поправил

                                  Only users with full accounts can post comments. Log in, please.