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

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

© Geektimes