Владимир Бойчук
Два в одном: программируемый по Wi-Fi монитор качества воздуха и стрелочные часы
В свое время мне понравился монитор качества воздуха из публикации Сергея Сильнова «Компактный монитор домашнего воздуха (CO2, температура, влажность, давление) с Wi-Fi и мобильным интерфейсом».
В мониторе качества воздуха (далее – монитор) из проекта Сергея информация с датчиков температуры, влажности, давления, содержания СО2 в воздухе обрабатывается контроллером ESP8266 и отображается на монохромном экране несколькими кадрами. Кроме того, в мониторе через форму в браузере сохраняется в памяти ESP8266 ключ идентификации сервиса Blynk и автоматически отправляются данные на Blynk.
Монитор имел одну серьезную проблему: он зависал на стартовом кадре при выключении-включении или даже «промигивании» напряжения питания монитора.
Я повторил проект с несущественными изменениями, а для устранения зависаний монитора добавил в схему альтернативное питание. Простое, как грабли: обмотка реле находилась под напряжением адаптера AC/DC, а его контакты переключали питание с адаптера на батарейки, когда исчезало напряжение в сети 220В.
Мой мнимый успех продержался до первого длительного отключения электроэнергии в доме (у нас такое бывает). Дешевые батарейки разрядились раньше, чем появилось напряжение в розетках, а я вернулся к отправной точке.
После того, как наступил на свои же грабли, решил не искать простых решений.
Что изменено или добавлено в проект С. Сильнова:
- Автоматический переход монитора в автономный режим через 90 сек после выключения и повторного включения напряжения питания монитора, если в это время отсутствует Wi-Fi.
- Граничные значения температуры, содержание СО2, влажность воздуха, а также часовой пояс и время зима/лето вводятся в память ESP8266, как и ключ Blynk, с формы в браузере.
- Кардинально упрощено изменение граничных значений. Если раньше эта процедура выполнялась через компилятор кода, то теперь достаточно изменить запись в одном из полей формы с «0» на «1». Эта работа стала посильной даже не продвинутому юзеру.
- Информация о работе монитора выводится на цветной экран 1.44”, 128х128 одним кадром. Выход параметров воздуха за граничные значения отображается в кадре цветом.
- В мониторе рассчитывается и отображается на экране индекс жары (heat index, humindex).
- С монитора отправляются уведомления на е-мейл, если температура, содержание СО2 или влажность воздуха находятся за пределами заданных пользователем пороговых значений.
- Монитор может работать без подключения к сервису Blynk и адреса электронной почты.
- В монитор добавлены стрелочные часы реального времени, которые через Интернет синхронизируются с сервером точного времени.

Сборка
Для сборки устройства понадобятся компоненты, перечень которых и их ориентировочная стоимость по ценам сайта AliExpress приведена в таблице.
Компонент, Цена ($)
Wi-Fi плата NodeMCU CP2102 ESP82662, 53
Датчик температуры и влажности DHT222, 34
Датчик содержания СО2 MH Z-1918, 50
Экран TFTLCD 1.44" SPI 128x1282, 69
Часы RTC DS32311, 00
Монтажные провода, др. мелочи 2,00
Всего:29,06
Мозг монитора – контроллер ESP8266 на плате модуля NodeMCU CP2102. Он принимает сигналы с датчиков, часов и формирует сигнал управления экраном, синхронизирует часы, а также отправляет информацию на Blynk и е-мейл.

К сожалению, я не нашел библиотеку Fritzing’a для цветного экрана 1.44”, 128x128 с цоколевкой на 8 выводов, поэтому на схеме экран с 11 выводами. При монтаже обращайте внимание не на расположение вывода экрана относительно других, а на его функциональную нагрузку.
Если в модуле часов вы используете батарейку вместо аккумулятора, то не забудьте разорвать цепь заряда аккумулятора, иначе батарейка вздуется через несколько недель работы под напряжением. С автономным питанием часов точность хода 2 сек/год вам обеспечена.
Напряжение питания монитора 5В можно подать с USB–порта компьютера стандартным кабелем USB – microUSB на модуль NodeMCU esp12 .
Скетч монитора для загрузки в ESP8266 находится под спойлером.
На всякий случай, не поленитесь подправить встроенный драйвер I2C для ядра Arduino ESP8266. Инструкции – тут.
Если хотя бы один из параметров воздуха находится за пределами запрограммированных пороговых значений, то устройство примерно один раз в час отправляет сообщение на е-мейл следующего содержания:


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

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

Нажмем кнопку Configure WiFi (No Scan). Откроется страница с формой настроек термостата:
Укажем в форме имя и пароль своей домашней сети, ключ идентификации BLynk, свой е-мейл, часовой пояс, летнее/зимнее время, а также пороговые значения температуры, влажности и содержания СО2.
При выборе пороговых значений воздуха можно ориентироваться на показатели, которые я нашел в Интернете:
1. Комфортная температура ночью во время сна 19…21°С, днем — 22…23°С.
2. Оптимальной относительной влажностью в холодное время года считается влажность 30…45%, а в теплое – 30…60%. Предельные максимальные показатели влажности: зимой она не должна превышать 60%, а летом – 65%.
3. Максимальный уровень содержания углекислого газа в помещениях не должен превышать 1000 ppm. Рекомендованный уровень для спален, детских комнат – не более 600 ppm. Отметка 1400 ppm на протяжении длительного времени – предел допустимого содержания СО2 в помещении. Если его больше, то качество воздуха считается низким.
Поле e-mai можно не заполнять. Тогда предоставленная возможность получать письма на электронную почту о выходе параметров воздуха за граничные значения будет утрачена. Без введенного ключа Blynk’а вы потеряете возможность получать информацию о параметрах воздуха на удалении. Впрочем, монитор не «растеряется», если останутся незаполненными поля с предельными значениями параметров воздуха.
Заполняйте, не задумываясь, все поля формы с числами в формате с плавающей запятой, например, часовой пояс – 2.0. В скетче предусмотрены последующие преобразования чисел в нужный формат.
После сохранения настроек в памяти ESP8266 (кнопка Save), монитор подключится к сети и начнет работу.
Рассмотрим картинку на экране.


Дата, время, измеренная температура, содержание СО2 и влажность воздуха не требуют пояснений. Уточню, если параметры воздуха выйдут за пределы установленных вами граничных значений, то их отображение на экране изменит цвет с зеленого на красный.
Буква «В» на красном фоне говорит о том, что монитор работает без подключения к Blynk’у, а если появится буква «А» - исчезало питание и на момент его появления отсутствовал Wi-Fi (прибор перешел в автономный режим).
В общем, появление красного цвета на экране должно насторожить – есть отклонения от нормального функционирования устройства.
В нижнем правом углу на экране мы видим индекс жары (heat index, humindex).
«Humidex — безразмерная величина, основанная на точке росы. Данный индекс широко используется в канадских метеосводках летом. Согласно канадской метеорологической службе, значения Humidex выше 30 причиняют некоторый дискомфорт, выше 40 — большой дискомфорт, а значение выше 45 является опасным. Если humidex достигает 54, тепловой удар неизбежен. Влияние ветра этот индекс не учитывает.» (Википедия, humidex ).
Следует уточнить, что индекс жары рассчитывается только для относительно высоких температур, когда измеренная температура воздуха выше 21°С. Образно, индекс жары – это ощущаемая температура в жаркий летний безветренный день.
В соответствии с таблицей этой же статьи в Википедии измеренная температура 25°С при влажности 30% ощущается как 24°С, при 50% - 28°С, а при 90% - 35°С (на 10°С выше показаний термометра). В помещении этот показатель можно уменьшить, устроив «сквозняк» или включив вентилятор. Кондиционер включится автоматически, если вы задали температуру кондиционирования не выше 25°С. Индекс жары, на мой взгляд, более актуальный параметр качества воздуха, чем, допустим, давление, на которое мы никак не можем влиять.
Датчик DHT22, как и DHT11, наряду с «минусом» - низкой точностью измерения влажности обладает неоспоримым «плюсом»: на шине данных этого датчика есть информация о индексе жары. Я воспользовался этим «плюсом» и отобразил индекс жары на экране устройства.
В Интернете много нареканий на низкую точность измерения влажности датчика DHT22. Для тех, кто настроен отказаться от использования этого датчика в своих проектах, прошу посмотреть в сторону более современных датчиков температуры и влажности HTU21D, Si7021 или SHT21.
Пришло время запустить на смартфоне приложение Blynk.
Настройте у себя приложение. Переменные для Blynk (чтобы не искать их в скетче): температура — V1, влажность – V2, содержание СО2 – V3, индекс жары – V5.
На моем смартфоне интерфейс Blynk’a имеет вид:

На графике – измеренная температура (желтый), влажность (голубой), индекс жары (фиолетовый). Первый пик на графике – это нагрев датчика давления-влажности в ладони руки: кривая индекса жары при этом располагается выше кривой температуры. Второй пик – нагрев датчика с помощью фена. Влажность воздуха при нагреве датчика феном падает, а кривая индекса жары на некоторых участках повторяет или ниже линии температуры. (см. выноску).
Не беспокойтесь, если на графике исчезла линия температуры: при температуре ниже отметки 21°С кривая индекса жары повторяет кривую измеренной температуры.
Теперь протестируем работу системы оповещений на е-мейл. Введем в адресную строку браузера закомментированную строку с http-адресом из кода php-скрипта. Если вы не забыли в настройках указать свой е-мейл, а в окне браузера — информация, как на картинке ниже, то проблем с приемом оповещений скорее всего не будет. Тест особенно полезен при переносе php-скрипта с моего сервера на другой.
Выводы
Не буду повторять, что сделано, а остановлюсь на неоднозначных моментах.
Логична, например, постановка вопроса «А зачем здесь часы?». Ответ: Стрелочные часы нужны для наполнения экрана. Хотя в настоящее время цифровые часы встроены практически в каждый бытовой прибор, стрелочные обладают одним преимуществом: масштаб времени, благодаря циферблату, позволяет легко оценить время до какого-либо события. Не буду спорить - можно обойтись без часов.
Над чем нужно поработать:
• Организовать питание монитора от двух батареек типа АА на протяжении длительного времени - не меньше года.
• Внешний вид обсуждать не стоит – здесь у каждого свой взгляд и возможности. Мне, например, симпатичен вариант @avs24rus, он в качестве экрана использовал дисплей 7" в рамке с 3D печатью. Дорогую рамку можно заменить дешевой из багета. А на дисплей в режиме ожидания вывести пейзаж, портрет любимой или фото детей – у вас будет еще и оригинальная фоторамка в придачу.
Если вы не очень требовательны к эстетичной стороне вопроса, то, возможно, вас устроит нечто похожее:
Примечание. Первоначально монитор задумывался как универсальное готовое к использованию в термостате устройство. Его универсальность привела к неоправданному усложнению схемы. Поэтому позже я отказался от возможности использования решения по монитору в термостате и подредактировал публикацию. Следы от предыдущей более сложной версии устройства остались в комментариях.
Успехов!
Мои закладки по теме с Хабра
1. Wi-Fi термометр на ESP8266 + DS18B20 всего за 4$
3. Практический опыт использования Blynk для датчика СО2. Часть 1
5. Измеряем концентрацию CO2 в квартире с помощью MH-Z19
7. Измеряем концентрацию CO2 в квартире с помощью MH-Z19
И наконец, благодарю @kumekay за ценные советы. Решить проблему повторного ввода переменных в память монитора мне помогла публикация «Практический опыт использования Blynk для датчика СО2. Часть 1», @a3x. Глубокая разноплановая статья!
Полная версия статьи - habr.com.
