Владимир Бойчук

Беспроводной программируемый по Wi-Fi комнатный термостат с монитором качества воздуха и другими полезными функциями

В системе автономного отопления моей квартиры работает выпускаемый серийно беспроводной комнатный термостат. Система, конечно, функционирует и без него: термостат был приобретен для экономии расхода газа и повышения комфорта.

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

Что в результате получилось – читайте дальше. Надеюсь, кроме меня проект будет интересен другим.

Знакомство

Возможности и характеристики:

- Связь между узлами термостата осуществляется по воздуху на радиочастоте.

- В течение суток термостат поддерживает постоянными три заданные значения температуры.

- Настройки термостата (программа работы, граничные параметры воздуха, другие) задаются дистанционно через Wi-Fi с формы в браузере.

- В термостат включена функция монитора качества воздуха с измерением температуры, уровня содержания углекислого газа и влажности воздуха.

- Термостат укомплектован часами реального времени с синхронизацией часов с сервером точного времени через Интернет.

- Управление термостатом осуществляется с интерфейса мобильного приложения Blynk. Кроме того, приложение Blynk принимает и отображает результаты измерения температуры, содержания СО2 и влажности воздуха. - Термостат автоматически переходит в автономный режим работы при отсутствии Wi-Fi.

- С термостата отправляются сообщения на е-мейл, если температура, содержание СО2 или влажность воздуха находятся за пределами пороговых значений.

- В термостате кроме температуры есть возможность поддержания в заданных пределах остальных измеряемых параметров воздуха.

- По окончании отопительного сезона термостат не придется прятать: останутся в работе монитор качества воздуха с отправкой сообщений на почту и часы.

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

Сборка

Для сборки устройства понадобятся компоненты, перечень которых и их ориентировочная стоимость по ценам сайта AliExpress приведена в таблице.

Компонент Цена, $
анализатор
Wi-Fi плата NodeMCU CP2102 ESP8266 2,53
Датчик температуры и влажности DHT22 2,34
Датчик содержания СО2 MH Z-19 18,50
Часы RTC DS3231 1,00
Экран OLED LCD синий 0.96" I2C 128x64 1,95
RF модуль 433MHz, передатчик (цена комплекта: передатчик, приемник) 0,99
4-канальный преобразователь логических уровней 3,3В-5В (Logical Layer Converter) 0,28
Стабилизатор напряжения LM7805 (10 шт.) 0,79
Адаптер AC100-240V 50/60Hz DC12V 2A 10,70
Макетная плата (стеклотекстолит), контакты и др. 2,00
контактор
Модуль Arduino Pro Mini 5V 1,45
RF модуль 433MHz (приемник)    -
2-канальный модуль реле 0,98
Адаптер AC-DC HLK-PM01 4,29
Макетная плата (стеклотекстолит), контакты и др. 2,00
Всего: 49,80

Если планируется собирать термостат с минимальными габаритами, то нужно заменить 4-канальный преобразователь логических уровней на 2-канальный и 2-канальный модуль реле на 1-канальный.

Оба устройства собраны на стеклотекстолитовых макетных платах. Монтаж – навесной. Модули установлены на панельки, собранные из «гребенок» контактов. Такой подход имеет ряд преимуществ: компоненты легко демонтируются, легко меняется монтаж под новую версию скетча и, наконец, в корпусе самоделки не видно каким способом он выполнен.

Антенны у передатчика и приемника – это провод длиной 17,3 см. Повышенная мощность передатчика и простейшие антенны обеспечивают надежную связь в пределах квартиры.

Анализатор

Мозг анализатора – контроллер ESP8266 на плате модуля NodeMCU CP2102. Он принимает сигналы с датчиков и формирует сигналы управления передатчиком и экраном.

При установке датчика DHT22 на плате, измеренная температура на 1,5…2°С выше реальной (даже без корпуса!). Поэтому следует размещать датчик температуры подальше от элементов с большим тепловыделением LM7805 и NodeMCU CP2102. Кроме того, было бы неплохо установить стабилизатор напряжения LM7805 на радиатор и однозначно необходимо обеспечить хорошую конвекцию воздуха в корпусе для понижения температуры и уменьшения ошибки ее измерений. Другой вариант избавиться от ошибки - вынести датчик DHT22 за объем корпуса – этот вариант проще и я выбрал его.

В Интернете много нареканий на низкую точность измерения влажности датчика DHT22. На сегодня есть альтернатива: более современные датчики температуры и влажности HTU21D, Si7021, SHT21.

На анализатор подается постоянное напряжение 12В от адаптера AC/DC. Далее стабилизатор постоянного напряжения LM7805 формирует напряжение 5В. Напряжение питания передатчика - 12В. При тестировании устройства, когда анализатор и контактор находятся рядом на рабочем столе, питание анализатора можно организовать с USB-порта компьютера, подав напряжение на модуль NodeMCU CP2102 стандартным кабелем USB – microUSB. Напряжение питания NodeMCU CP2102 и MH Z-19 – 5В, питание остальных узлов схемы (3,3В) формирует стабилизатор модуля NodeMCU CP2102.

Датчик температуры и влажности DHT22 подключен к выводу D6 модуля NodeMCU CP2102. Часы DC3231 и дисплей 0.96" подключены к ESP8266 (на модуле NodeMCU CP2102) через двухпроводный интерфейс I2C, а выводы Tx, Rx датчика содержания СО2 MH Z-19 подключены к выводам Rx, Tx ESP8266 соответственно. Сигнал на передатчик поступает с NodeMCU CP2102 через преобразователь логических уровней, который преобразует сигнал с NodeMCU CP2102 с амплитудой около 3,3В в сигнал, амплитуда которого близка к напряжению питания передатчика 12В.

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

Скетч анализатора для загрузки в ESP8266 находится под спойлером.

Если хотя бы один из параметров воздуха находится за пределами запрограммированных пороговых значений, то устройство в половине каждого часа отравляет на е-мейл письмо:

Сообщения на е-мейл отправляются php-скриптом. Скрипт загружен на мой почтовый сервер. Он понадобится, если планируется отправка сообщений с другого ресурса.

Контактор

Управление в контакторе осуществляет модуль Arduino Pro Mini. Он принимает сигнал с RF приемника и вырабатывает сигналы превышения пороговых значений параметров воздуха.

Напряжение питания всех узлов контактора 5В поступает с адаптера AC/DC HLK-PM01.

Сигналы с выводов контроллера 6 (h >Hmin), 5 (co2 > CO2max), 3 (t > Tmax) можно использовать для организации автоматического увлажнения, принудительной вентиляции или кондиционирования воздуха. Преимущество заключается в том, что отпадает необходимость в прокладке кабеля для передачи сигнала управления с датчика на ту или иную систему – достаточно разместить контактор неподалеку от одного из концов провода питания или управления системой.

Я, например, планирую кроме управления котлом отопления подключить к контактору еще и кухонную вытяжку - котел и вытяжка расположены рядом.

Скетч контактора для загрузки в Arduino Pro Mini - под спойлером.

Запуск термостата в работу

Пришло время включить термостат.

Шаг 1:

Сначала включим анализатор.

Вначале надо набраться терпения и, ничего не предпринимая, выждать 3 минуты. Термостат автоматически перейдет в автономный режим работы – без подключения по Wi-Fi к домашней сети и Интернету. Через 3 минуты на экране анализатора в трех строках начнет мелькать все, что ворочает термостат.

Первые две строки на экране не требуют комментариев. В третьей строке – режим работы термостата (Offline, Online или OffBlynk) и информация о выходе за пределы установленных пороговых значений параметров воздуха. Например, Offline CO2>1000 - термостат работает в автономном режиме, а измеренное содержание СО2 выше заданного порогового значения 1000 ppm.

Часы в автономном режиме будут показывать неправильное время. Они еще не синхронизированы с сервером точного времени, а также не выполнен ввод часового пояса – это в следующем шаге.

В автономном режиме установлена температура термостатирования 21°С на протяжении суток.

Шаг 2:

Освоившись с автономным режимом, выключим и снова включим адаптер AC/DC анализатора. На экране появится знакомое сообщение, к которому успели привыкнуть за три минуты ожидания автономного режима.

Устройство подняло точку доступа am-5108. Найдем эту точку в списке доступных сетей и подключимся к ней, пароль – на экране. Затем откроем в браузере страницу http://192.168.4.1.

Нажмем кнопку Configure WiFi (No Scan). Откроется страница с формой настроек термостата:

Эта же форма с незаполненными полями и комментариями:

Укажем в форме имя и пароль своей домашней сети, ключ идентификации BLynk, электронную почту. Изменим заданные по умолчанию часовой пояс, время (часы) и температуру для временных точек, а также пороговые значения температуры, влажности и содержания СО2.

Сутки двумя временными точками разбиты на три временных диапазона - первый: с 00 час 00 мин до точки 1 (Hour 1, Minute 1), второй: с точки 1 (Hour 1, Minute 1) до точки 2 (Hour 2, Minute 2) и третий: с точки 2 (Hour 2, Minute 2) до 00 час 00 мин. Полей для ввода минут на форме нет, минуты для точек 1,2 можно изменить в скетче (переменные MinPoint1, MinPoint2). В каждом из трех временных диапазонов можно задать свою температуру термостатирования - Temperature 0, Temperature 1 и Temperature 2. Если планируется поддерживать постоянной одну и ту же температуру в течение суток, то достаточно задать значение Temperature 0, а поля для точек 1,2 оставить пустыми.

При выборе пороговых значений можно ориентироваться на показатели, которые я нашел в Интернете:

  1. Комфортная температура ночью во время сна 19…21°С, днем - 22…23°С.
  2. Оптимальной относительной влажностью в холодное время года считается влажность 30…45%, а в теплое – 30…60%. Предельные максимальные показатели влажности: зимой она не должна превышать 60%, а летом – 65%.
  3. Максимальный уровень содержания углекислого газа в помещениях не должен превышать 1000 ppm. Рекомендованный уровень для спален, детских комнат – не более 600 ppm. Отметка 1400 ppm – предел допустимого содержания СО2 в помещении. Если его больше, то качество воздуха считается низким.

По умолчанию суточная программа термостатирования (днем – высокая температура, ночью – низкая) задана из предположения, что днем кто-то из жильцов находится в помещении, например, работает на дому. Программу легко изменить под свои реалии.

Поле e-mail можно не заполнять. Тогда предоставленная возможность получать письма на электронную почту о выходе параметров воздуха за пороговые значения будет утрачена. Без введенного ключа Blynk’а – невозможно управлять термостатом и получать информацию о параметрах воздуха на удалении. Впрочем, термостат не "растеряется", если останутся незаполненными поля с предельными значениями параметров воздуха, тогда за ним останется только одна функция: термостатирование.

И еще. Все числа вводите, пожалуйста, в формате переменных с плавающей запятой, далее преобразование в нужный формат выполняются в скетче. Исключение: временные точки 1,2 (час) - формат целого числа.

После сохранения настроек в памяти ESP8266 (кнопка Save), анализатор подключится к сети и начнет работу.

Если ошиблись (бывает!) или решили изменить настройки, снова придется дважды загрузить скетч в ESP8266. Первый раз – с раскомментированной в Setup’e строкой factoryReset(); а второй - с закомментированной, затем повторить шаг 2.

Шаг 3:

Теперь можно включить контактор.

При устойчивой радиосвязи между анализатором и контактором – светодиод D13 на плате Arduino мигает с частотой около 1Гц.

Если контактор принял с анализатора команду на включение обогревательного прибора или отопительной системы - замкнутся нормально разомкнутые контакты реле и загорится соответствующий ему светодиод на модуле реле.

Если нет проблем с «холостым ходом» контактора, то подключаем обогревательный прибор или электронику системы отопления. Обогревательный прибор следует подключать проводом определенного сечения. Удельный показатель для расчета сечения медного провода - 5 А/мм2.

Шаг 4:

Пришло время запустить на смартфоне приложение Blynk. В Интернете много информации о приложении Blynk – нет смысла ее повторять.

Переменные для Blynk (чтобы не искать их в скетче анализатора): температура - V1, влажность – V2, содержание СО2V3, температура термостатирования – V4, виртуальная кнопка - V10.

На моем смартфоне интерфейс Blynk’a (его можно изменять) имеет вид:

На графике – измеренная температура (белый), температура термостатирования (желтый), интервал времени – сутки. Переменные влажности и содержания СО2 на график не выведены, поскольку две дополнительные шкалы сильно ограничивают поле графика, где можно рассмотреть сами кривые.

Сигнал с виртуальной кнопки ТЕРМОСТАТ формируется только в момент нажатия на кнопку. При нажатии на кнопку на экране анализатора мелькает сообщение Тhermo OFF! или Thermo ON! – в зависимости от предыдущего состояния кнопки. Это сообщение актуально при тестировании термостата.

Скриншот ниже иллюстрирует процесс обогрева тепловентилятором мощностью 2 кВт/час помещения площадью около 5-ти квадратных метров с начальной температурой 16°С. Здесь - температура (желтый), влажность (синий) и содержание СО2 (красный).

Синхронная с пилой температуры зубчатая кривая влажности на графике - еще одно подтверждение известному факту, что открытый ТЭН сушит воздух, а пики на кривой содержания СО2 – свидетельство моих кратковременных визитов в помещение.

Теперь протестируем работу системы оповещений на е-мейл. Введем в адресную строку браузера закомментированную строку с http-адресом из кода php-скрипта. Если вы не забыли в настройках указать свой е-мейл, а в окне браузера - информация, как на картинке ниже, то проблем с приемом оповещений скорее всего не будет. Тест особенно полезен при переносе php-скрипта с моего сервера на другой.

Намерения

В дальнейшем планирую поработать над усовершенствованием термостата (как говорят, совершенству нет предела!)

Задач - уйма:

- Дополнить термостат датчиком температуры с беспроводной связью для измерения температуры на улице. - Заменить пару приемник-передатчик RF другой парой с большей дальностью связи при напряжении питания 3…5В. В идеале – хотелось бы собрать анализатор с питанием от двух батареек АА на протяжении отопительного сезона. - Уйти от ручного форматирования памяти ESP8266 перед каждым изменением настроек термостата через повторную загрузку скетча. - Расширить программируемый цикл работы термостата с суточного до недельного. - Заменить монохромный экран на цветной и с большим разрешением. Это позволит показывать всю информацию о работе термостата одним кадром, а выход параметров воздуха за пределы установленных границ – изменением цвета. - Затем заняться печатными платами и презентабельным внешним видом термостата.

Что еще можно улучшить? Принимаются предложения, замечания. Прислушаюсь к конструктивной критике.

Выводы

  • Благодаря подключению к Интернету, функционал термостата значительно расширился. Кроме основной функции, в нем реализован целый ряд других: от отправки оповещений на е-мейл - до возможности автоматического поддержания качества воздуха в помещении.
  • В термостате появилось новое качество: им можно управлять через Интернет.
  • Радует легкость, с которой программируется термостат: требуется лишь заполнить форму на странице браузера.
  • Появилась возможность сохранять в памяти термостата персональные данные, как это делается, например, в роутерах.

Мои закладки по теме с Хабра

1. Wi-Fi термометр на ESP8266 + DS18B20 всего за 4$

2. Компактный монитор домашнего воздуха (CO2, температура, влажность, давление) с Wi-Fi и мобильным интерфейсом

3. Использование RF-модулей

4. Обзор инфракрасного датчика CO2 MH-Z19

5. Измеряем концентрацию CO2 в квартире с помощью MH-Z19

6. Практический опыт использования Blynk для датчика СО2. Часть 1

7. Тёмная сторона MH-Z19

Тут же хочу выразить свою благодарность Сергею Сильнову (@kumekay). Он поделился со мной идеей ввода переменных в ESP8266 через Wi-Fi. Идею Сергей реализовал в устройстве, которое подробно описано в публикации «Компактный монитор домашнего воздуха (CO2, температура, влажность, давление) с Wi-Fi и мобильным интерфейсом». Боюсь, что без подсказки Сергея этот проект не скоро бы имел хеппи-энд.

P.S. 1. Макет из проекта достойно занял место старого термостата, поскольку тот в четвертом отопительном сезоне стал изредка "забывать" включать-выключать систему отопления.

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

Внимание!

Автор не несет ответственности за возможный негатив при повторении проекта. Вы отвечаете за все, что делаете.

Полную версию статьи можно найти тут.