Контроллер управления вытяжным вентилятором с WiFi
Почти два года прошло с изготовления контроллера управления влажностью для ванной комнаты. Все это время контроллер служил верой правдой без глюков и зависаний, как и положено хорошему устройству и даже обзавелся с легкой руки моей супруги гламурным корпусом ручной работы.
Но технический прогресс неумолимо бежит вперед и новые веяния опять не давали мне покоя. Давно вынашивал идею реализации концепции умного дома на WiFi модулях ESP8266. Некоторое время экспериментировал с этими модулями и теперь решил свой «умный дом» на них перевезти.
Основной целью проекта поставил реализацию новых возможностей, которые в дальнейшем буду применять в других устройствах.
Итак, что мне даст модернизация контроллера вентилятора на ESP8266?
Новые возможности
Перечень компонентов
$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
Сборка контроллера
Этот контроллер — прототип для будущих устройств на ESP8266, поэтому монтаж сделал на макетной плате.
Светофильтр под индикатор изготавливаю из папки-уголка для бумаг, купленной в магазине канцтоваров. Прозрачное окно для фоторезистора — защитная пленочка оставшаяся от какого-то телефона (заказывал когда-то с запасом, теперь валяются)
А это мой старый контроллер, проработавший в ванной два года
При отладке обнаружился технологический дефект — фотодиод за окошечком в корпусе получал слишком мало света и без усилителя не срабатывал при зажигании лампы в ванной комнате, пришлось его вывести наружу в сторону лампы
Теперь расскажу об особенностях программы, алгоритмах управления и настройках этого контроллера.
ESP8266, в отличие от Atmega328, на которой была реализована предыдущая версия, имеет гораздо больше памяти (ОЗУ, ПЗУ. EEPROM), что позволило вкупе со встроенным WiFi реализовать функции встроенного WEB-сервера, не экономя память для текстовых строк.
А вот с GPIO у ESP8266 довольно плоховато, поэтому, такая роскошь, как управления семисегментным индикатором напрямую ему не доступна. Поэтому и выбран индикатор на микросхеме TM1637, требующий для подключения всего два вывода.
Среда разработки
Я достаточно наигрался с различными прошивками ESP8266 позволяющими писать программы на встроенных интерпретаторах LUA, JC и вообще программировать через WEB. Пробовал писать на одном SDK. Остановился на компромиссном варианте — программировании в Arduino IDE.
Довольно простая установка, программирования и огромное количество готовых библиотек, которые, в большинстве своем, работают на ESP-шке. Эта среда позволила использовать много старого кода, обеспечивающего основную логику работы контроллера управления вентилятором сохранилось с предыдущей версии.
В основном интересно было перенести хорошо зарекомендовавший себя алгоритм, реализующий конечный детерменированный автомат состояний, описанный в таблице переходов состояний:
Подошли без проблем и ардуиновские библиотеки 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-сервера показывает основные параметры контроллера и позволяет вручную включить/выключить контроллер (аналог нажатия кнопки ручного управления)
Здесь же можно перейти на страницу сетевых настроек
и страницу настроек алгоритма работы контроллера
С этих двух страничек можно выполнить перезагрузку контроллера и сброс всех настроек «по умолчанию».
«Наводить красоту» на интерфейс я еще планирую в будущем, когда концепция умного дома на WiFi более менее устаканится у меня в голове.
Еще одна функция, реализованная в этой программе — часы реального времени, синхронизирующиеся по NTP протоколу в интернете. (Файлы WC_NTP.h и WC_NTP.cpp)
Описание основного алгоритма описывать не буду, логика работы себя хорошо зарекомендовала и осталось прежней, почитать про нее можно в предыдущей статье. Основные изменения коснулись дисплея. Хочу обратить внимания на одну «фичу» — функцию DisplaySpecialChar(), которая позволяет по битовой маске вывести любой символ, который можно придумать для отображения на семисегментном индикаторе. Я придумал вот такой символ «процентов» в отображении влажности
и символ «градусов» при отображении температуры
Биты в битовой маске соответствуют сегментам индикатора.
Ну и последняя из новых функций — сохранение параметров на сервер в интернете для отображения и последующего анализа. Сохраняются значения влажности, температуры, аналогового порта с фоторезистором для подстройки порога срабатывания освещения, время работы вентилятора, время горения света и UPTIME-время работы контроллера от последней перезагрузки.
Запись на сервер происходит в двух режимах. С большей периодичностью записываются параметры, когда в ванной «что-то происходит», в это время либо горит свет, либо работает вентилятор. Все таймауты настраиваются через WEB-интерфейс.
Сохраняются данные на мой сервер в интернете. Адрес сервера можно настроить, а вот формат записи пока зашит в программу. Опять до лучших времен устаканивании концепции ))). Сейчас параметры сохраняются простейших PHP-скриптом в таблицу с простейшей структурой.
Довольно просто перенастроить сохранения параметров на тот же «народный мониторинг». Лично меня это сервер не устраивает ограничениями в периодичности сохранения данных и глубине архива.
Оптимизация настроек контроллера
После «опытной эксплуатации» можно определить, правильно ли установлены пороги срабатывания освещения и влажности, а также таймауты различных событий. В прошлой реализации я установил время срабатывания 20 минут, сидя в ванной с секундомером. Понаблюдав за графиком параметров во время нескольких принятий душа я увидел следующее:
- Влажность в зимнее время меняется на 35-40%
- Время нормализации влажности при естественной вентиляции 20-25 минут
- Время нормализации влажности с работающим вентилятором 10-12 мин
- Вентилятор повышает эффективность проветривания вдвое
Исходя из этого можно смело снизить время работы вентилятора до 12 мин, тем самым продлив время его службы и чуточку сэкономив электроэнергию. Подобный анализ можно провести для других времен года, когда влажность в квартире совсем другая.
Теперь, после проведения анализа можно увеличить период записи параметров на сервер.
Выводы
- Контроллер на ESP8266 работает стабильно, функции свои выполняет.
- Функциональность его расширилась, теперь им легко управлять и он нормально интегрируется в систему Умного дома
- Некоторые вещи требуют доработки, например, WEB-интерфейс, авторизация доступа, серверная часть и некоторые неточности в расчете времени работы вентилятора и света. Может быть выявятся и другие хотелки по улучшению.
- Пилотный проект по Умному дому на WiFi можно признать успешным 😉
Скетч можно скачать здесь. Буду очень признателен, если сообщите о найденных ошибках.
Затраченное на проект время — два выходных дня
P.S. Сразу отвечаю на вопрос, зачем так сложно? Можно посадить параллельно выключателю или на таймер?
— Да можно. Но включение по таймеру и свету меня не устроили. К тому же это хобби, реализация некоторых идей, который применяются в других проектах.
Хаброхранилище опять глючило, поэтому картинки с моего блога. Там же можно посмотреть про мои наработки по умному дому
Источник
Контроллер на Arduino для рекуператора. Часть 1
Год назад я писал про недорогой рекуператор для системы приточно-вытяжной вентиляции, вот тут
Он работает на своем контроллере, и в первую очередь контроллер мне был нужен для тестирования разных режимов, а так же видеть кпд и температуры.
Как это все работает. Контроллер находится в боксе.
Внутри дисплей, джойстик и автомат на 6А для защиты вентиляторов.
На главном экране отображается, 4-е температуры, приток вытяжка, до и после рекуператора.
Air я обозначил данные с датчика качества воздуха, сначала пытался перевести их в значения co2, но без успешно, хотя в сети есть примеры перевода. У кого получиться дайте знать.
Efficiency % , это по сути кпд рекуператора, сейчас 52,7% это я давно не менял фильтры, а т.к. в внутри дома воздух грязнее чем уличный за городом, то дисбаланс, и приток чуть больше вытяжки, и чем больше забивается фильтр, тем меньше кпд. Надо менять.
Для сравнения фильтр с вытяжки
A post shared by Дмитрий Супрун (@sd.workshop) on Dec 19, 2016 at 3:07am PST
Фильтр приточный, более черный, но менее забитый
A post shared by Дмитрий Супрун (@sd.workshop) on Dec 19, 2016 at 3:08am PST
Ниже отображается скорость приточного и вытяжного вентилятора и режим работы, режима три: авто, ручной и размарозка
Движением джойстика вправо попадаем в меню.
Выбор меню происходит также движением вправо.
далее выбираем меню авто режима, ручного режима или выбора режимов.
Начнем с последнего, выбрав mode попадаем в выбор режима
В меню режима auto
Есть выбор установок.
И так co2_min — это минимальное значение качества воздуха при котором вентиляция выключится, например когда все ушли из дома, поймать этот момент очень сложно с данным датчиком.
co2_max — это значение качества воздуха при котором включается вторая скорость, реально работает когда увеличивается сильно кол-во людей, с +-1 человек скорей всего не сработает
detrost — время в минутах, сколько размораживается теплообменик, а размараживаться он начинает при сильном падении КПД при наличии за на входячем датчике менее -5, т.к. пластины обмерзают то передача тепла падает, падает КПД, и чем больше обмерзание, чем сильнее падает КПД. Можно отследить по долям миллиметра толщину инея на пластинах, работает четко.
Drying — режим не использую, сделал для теста отключает приток на заданное время постоянно через время заданное в значении Drying_T, тоесть чередование работает, не работает, задается и то и то время, вообще данная функция не нужна, только для экспериментов.
На след странице последняя функция данного меню
Eff_min — это значение кпд, при котором включается разморозка теплооменника.
Теперь меню ручного режима.
Drying, тоже самое что и в авто — «режим не использую, сделал для теста отключает приток на заданное время постоянно через время заданное в значении Drying_T, тоесть чередование работает, не работает, задается и то и то время, вообще данная функция не нужна, только для экспериментов.»
Supply fan — задаем скорость приточного вентилятора, 0 — выключен, 1 скорость или 2 скорость
Exhaust fan — задаем скорость вытяжного вентилятора, 0 — выключен, 1 скорость или 2 скорость
Ручной режим использую летом, т.к. нет байпаса, то иногда нужно в дом подать не подогретый воздух, тогда можно просто включить один приток.
Теперь как это все собрать.
И так основной компонент это плата Arduino Nano
Платформа Nano, построенная на микроконтроллере ATmega328 (по стоимости 400 руб)
Питание и запись программы осуществляется по usb mini, в целом удобно.
Так же мне потребовался LCD дисплей 128×64 12864 (по стоимости 350-400 руб)
Джойстик для управления (по стоимости 200 руб)
3-4 датчика температуры DS18B20 (по стоимости 100 руб)
4-е реле для включения вентиляторов и переключения их скорости. (по стоимости 200 руб)
У меня двух скоростные вентиляторы и их два, поэтому 4-е реле. Чуть ниже опишу как они работают.
Датчик качества воздуха MQ135 (по стоимости 150 руб)
Теперь все это надо соединить, желательно пайкой, для этого удобно купить макетную плату.
И так соединяем там
Далее чтобы все заработало необходимо подключить к ардуино компьютер и записать программный код.
Программа для ардуино с необходимыми библиотеками лежит тут
Сам код программы лежит тут
Подробнее о нем расскажу в следующей части описания.
Что бы я изменил, если не делать эксперименты, а просто собрать контроллер.
Дисплей удобен, джойстик не особо нужен, все значения можно задать с компа, ведь они почти не меняются, один раз задал и ок. Меню соответственно убрать. А переключение скоростей сделать внешним переключателем, так удобнее, не очень удобно все время лазить по меню. Т.к. режимы переключать не надо, нужно только одно реле, а не 4-е, которое отключает приток при разморозке. Можно поставить второе реле для включения догрева при температурах за бортом ниже -10, будет комфортнее, но нужен другой корпус и керамический тэн. Датчик качества воздуха не особо нужен в небольшом доме, проще переключателем выключать или увеличивать скорость когда гости, а если уж и делать то ставить полноценный датчик СО2.
Источник