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. Сразу отвечаю на вопрос, зачем так сложно? Можно посадить параллельно выключателю или на таймер?
— Да можно. Но включение по таймеру и свету меня не устроили. К тому же это хобби, реализация некоторых идей, который применяются в других проектах.

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

Комментарии (40)


  1. instalator
    30.01.2016 20:24

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

    Фото датчика


    1. sav13
      30.01.2016 21:36

      Передается на сервер по воздуху?


      1. instalator
        31.01.2016 08:53
        +1

        Через провод по MQTT


    1. Dmitry_Th
      31.01.2016 08:04

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


      1. sav13
        31.01.2016 08:13

        У меня и так датчик с контроллером на противоположной стене.
        И еще, алгоритм не работает как PID-регулятор, а срабатывает на скорость изменения влажности


    1. DjOnline
      31.01.2016 12:25

      Так у Silent Design есть же вентиляторы со встроенным датчиком влажности. Зачем было городить огород? У меня такой стоит, всё прекрасно работает. Если душ принять быстро, то влажность не успевает сильно повыситься, и вентилятор не включается. Если долгий душ или ванна — то сам включается.


      1. sav13
        31.01.2016 12:37

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


      1. instalator
        31.01.2016 12:56

        У меня в каждой комнате стоят датчики. Логика от встроенного датчика не гибкая. У меня же можно установить любой порог и любой алгоритм включения\отключения вентилятора.


  1. 22sobaki
    31.01.2016 00:17

    Еще один плюс по сравнению с подключением параллельно освещению: уменьшение количества пусков вентилятора, что также благотворно скажется на его долговечности.


    1. sav13
      31.01.2016 07:47

      Мои домашние очень не любят принимать душ при работающем вентиляторе ибо «дует им»
      Поэтому параллельно свету, даже по таймеру — для меня было плохо


  1. Teemon
    31.01.2016 05:19

    только я бы хотел уточнить: вроде бы считается, что нормальная влажность = 50-60%, для ванной — может быть даже еще и повыше.
    Таким образом, у вас и так воздух «суховат» и только кое-как достигает нормальных значений? Либо барахлит датчик влажности?
    в любом случае нужно же отталкиваться от требуемых значений, а не тех, которые были до пользования ванной.


    1. sav13
      31.01.2016 07:45

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


    1. FGV
      31.01.2016 07:47

      а почему SCL и SDA не подтянуты к питанию через резисторы?
      и еще вопрос, насколько стабильно работает esp?


      1. sav13
        31.01.2016 07:50

        Когда экспериментировал с ESP, обнаружил — перезагрузка контроллера вызывается либо переполнением памяти, либо долгим выполнением какой-то функции, мешающей работать WiFi по таймеру. Тогда срабатывает его WDT.
        В данной реализации все отладил. Поэтому после последней прошивки аптайм неделя, полет нормальный


        1. KamAdm
          01.02.2016 10:33

          А можно подробнее про зависание ESP и борьбу с ними. О каком переполнении памяти идет речь? Что за функции приводят зависанию?


          1. sav13
            01.02.2016 10:41

            Переполнение памяти происходит в основном из за страшной для микроконтроллера переменной типа String. Там ведь память динамически выделяется.
            Когда строка, например, для выдачи страницы, формируется сперва в памяти, а потом одним оператором выводится.

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

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

            Во многих местах спасают дополнительные задержки 100 и более миллисекунд, позволяющие эти самые WiFi функции отработать и успокоить WDT


            1. KamAdm
              01.02.2016 11:13

              Благодарю.


  1. bazis13
    31.01.2016 08:04

    Повставлял ардуин где надо и не надо, но в ванной вентиляция сделана на двух 120мм компьютерных вентиляторах, работающих круглосуточно. Шума почти не слышно, но с влажностью справляются.


  1. SilverHorse
    31.01.2016 08:04
    +1

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


  1. kmaximv
    31.01.2016 09:05
    +1

    sav13, на счет WEB-интерфейса, посмотрите как сделано здесь
    Поддерживает обновление данных по Ajax.
    Ещё можно добавить обновление прошивки через WEB-интерфейс.

    Вот здесь еще очень интересный вариант создания веб-интерфейса на темплейтах ссылка


    1. kmaximv
      31.01.2016 09:12

      Ссылки вырезало
      github.com/kmaximv/Wi-Fi-Sensor
      image

      Вот здесь еще очень интересный вариант создания веб-интерфейса на темплейтах github.com/luc-github/ESP8266


    1. sav13
      31.01.2016 09:30

      Обновление прошивки, на сколько я разобрался, получается только на модулях с 4Мб флэшем. Или маленькие скетчики заливать. У меня партия ESP07 завалялась.


      1. kmaximv
        31.01.2016 10:06

        А DHT11 нормально с ESP работает? Пробовал подключать DHT22, данные отдавал через раз, хотя с ардуинкой работал нормально.


        1. sav13
          31.01.2016 10:26
          +1

          С DHT никаких проблем. Что с 11, что с 22. В ранних адавуйтовских библиотекаках там нужно было тамаут подбирать к тактовой частоте. У ESP8266 — 15.
          В последних версиях этот параметр автонастраивающийся по микросекундам
          Может библиотеку сменить/обновить?
          Их много разных


          1. kmaximv
            31.01.2016 10:39

            Хорошо, попробую. А по УД к OpenHab не присматривались?


            1. sav13
              31.01.2016 10:42

              Присматриваюсь.
              К разным присматриваюсь.
              Сейчас еще несколько проектов реализую дома — определюсь.

              Супруга заказала контроль влажности растений.
              Будут сенсоры на Меге 8 с радио на батарейке в каждом горшке.
              И ESP-шка все это принимать и обрабатывать


              1. kmaximv
                31.01.2016 10:49

                О, я как раз такой проект задумал, с контролем влажности, автоматическим поливом и освещением. Какие сенсоры влажности собираетесь использовать?


                1. sav13
                  31.01.2016 10:54

                  Луженые, а в, перспективе, грифельные электроды.
                  Какие там еще сенсоры? Сопротивление почвы на аналоговый вход через делитель или измерительный мостик.
                  Питание мостика от вывода микроконтроллера, чтобы питание с батарейки не кушал в режиме сна
                  Еще хочу туда фоторезистор поставить и терморезистор (или далласовский датчик температуры)
                  Будет выдавать информацию по количеству света для каждого растения и температуре.
                  В общем, микроклимат целиком.
                  Ну и фитолампы с управлением по тому же радио.
                  Останется подобрать оптимальные режимы для каждого растения


                  1. kmaximv
                    31.01.2016 11:03

                    Тоже выбрал графитовые стержни для сенсоров. Буду с интересом следить за вашим проектом.


                  1. Aquahawk
                    31.01.2016 11:28

                    Прочтите это: oldoctober.com/ru/humidity_sensor


                    1. sav13
                      31.01.2016 11:51

                      Купил супруге на АЛИ такой вот измеритель
                      image
                      Там как раз похоже ЭДС почвы и мерится
                      Электрод угольный и медный
                      image
                      Работает уже года 3. Только лучше в почве не оставлять его.
                      Показания стабильны и с сухостью почвы коррелируют нормально

                      А переменный ток подавать на измеритель, это просто. Можно с ШИМ выхода.


  1. Aquahawk
    31.01.2016 11:06

    У меня на esp8266 приточка управляемая от co2, и в планах увлажнение и обогрев. Я наоборот влажность поднимаю и комфортно для меня не менее 40 процентов, а то и 50.


    1. sav13
      31.01.2016 11:38

      Влажность должна во всей квартире быть 40-50
      Летом так и происходит
      А ванной получается 60-70 после принятия душа. Грибок будет на потолке развиваться

      По CO2 хорошо кухню проветривать
      CO2 + датчик дыма (прозрачности воздуха) + датчик газа
      Тоже планирую сделать такой


      1. Aquahawk
        31.01.2016 11:56

        У вас на графиках падение влажности до 30%. Значит в квартире не выше, воздух то с квартиры зайдёт.
        По CO2. Я дома мало готовлю. У меня приточка в комнате, где рабочее место и спальня. я держу не не выше 600-800 ppm. Для этого всегда когда я в комнате работает приточка. Минут через 15 включается по co2 просто от того что я пришёл. И 10 литров испарения в сутки еле еле справляются. Если холодно на улице то не справляются.


  1. safari2012
    31.01.2016 13:23

    У вас по тексту везде ESP8266, а в конце статьи таргет ссылка на ESP8255. Такой чип тоже есть в природе, но вроде как мало кто использует…


    1. sav13
      31.01.2016 13:27

      Очепятка.
      Сейчас разве что ESP32 дождаться с нормальным SDK


  1. vworld
    01.02.2016 05:12

    мне вот интересно… рассыпуху всех элементов возможно поместить в стандартные круглые установочные коробки для розеток в бетонных или кирпичных стенах (выпускаются следующих размеров: диаметром 60, 68, 70 мм и глубиной от 40 до 70 мм)


    1. sav13
      01.02.2016 05:13

      Я размещал во внешней розетке.
      Думаю, со встраиваемыми розетками и коробками под них тоже не должно быть проблем


  1. vau
    01.02.2016 10:00
    +1

    У Вас на схеме R2 к S2 не с той стороны подключен


    1. sav13
      01.02.2016 10:01

      Спасибо. Поправил