Борьба за открытое окно: технологии победили
Тема «закройте окно, мне холодно!» и «откройте окно, мне душно!» знакома каждому, но особенно она доставляет неудобств, когда начинается не в офисе, а дома.
«Наука обычно побеждает!» — подумал я. И решил доказать домашним (а я как раз тяжело дышу при закрытых окнах), что закрытые окна приводят к повышению концентрации СО2 в квартире, что не сказывается положительно ни на ком. Тем более на детях.
Описание влияния на здоровье по шкале ниже несколько преувеличены (а иначе как бы продавались системы вентиляции и «умные» окна, но суть отражают верно: лишний углекислый газ тело человека не радует, особенно в крупных мегаполисах).
Постановка задачи была такая: прибор должен быть маленький, питаться от любой USB-розетки, собирать данные о CO2 и передавать их куда-то, чтобы потом получать графики и анализировать. Для изменения настроек устройства не должны быть нужны провода.
Было принято решение строить сам прибор для снятия данных на ESP8266, а данные отправлять в конечном итоге в Grafana на Raspberry PI 3, которая и так есть и всегда включена.
Датчиков было заказано по два комплекта.
- CO2: CCS881 и MH-Z19.
- Температура и влажность: DHT-11(22) и BME280 (в последнем еще и давление).
Но сборка производилась на тех компонентах, которые приехали раньше.
Финальный комплект компонентов конкретной сборки
- Макетная плата 3 х 7 см — 48 рублей.
- ESP8266 Wi-Fi модуль ESP-12S — 365 рублей.
- DC-DC преобразователь AMS1117 (с 4.8–12 V в 3.3 V) — 11 рублей.
- DHT-11 — 55 рублей.
- CCS881 — 458 рублей.
- MICRO MINI5P USB to Dip Female B-type — 7 рублей.
- Тактовая кнопка (две штуки) — 4 рубля.
- Резисторы по одной штуке (1 кОм, 2.2 кОм, 10 кОм) — 3 рубля.
- Гребенка с четырьмя штырьками — 1 рубль.
- Провода — 3 рубля.
Дополнительно для проведения работ
- USB-TTL модуль CP2102 (для подключения к компьютеру).
- Кабель mini-USB.
- Сервер на Linux (у меня это Raspberry PI на Raspbian).
Софт
- Arduino IDE.
- Fritzing.
- Raspbian.
- Mosquitto.
- Telegraf.
- InfluxDB.
- Grafana.
0. Аппаратная часть
После определения модулей, которые будут использованы, сначала была отрисована принципиальная схема во Fritzing, а за ней превращена в удобочитаемую макетная. На реальной плате не предполагается наличие модуля USB-TTL, а только пины для его подключения.
Далее по схеме на макетной плате была собрана плата.
Готовую плату пока откладываем. И приступаем к настройке принимающей стороны.
1. Устанавливаем и запускаем mosquitto MQTT брокер (сервер и клиент)
Погнали.
Для настройки авторизации в файл /etc/mosquitto/conf.d/auth.conf записываем следующие параметры.
Создаем пользователя arduino для отправки данных с платы в брокер и назначаем ему пароль. Именно этот пароль нужно использовать в дальнейшем в скетче (вписать до заливки).
Создаем пользователя telegraf для сервиса по трансляции данных в базу. Этот пароль тоже записываем — он будет нужен для настройки telegraf. В этом случае ключ -c применять категорически нельзя, так как это приведет к перезаписыванию файла ключей.
Перезапускаем сервис, чтобы применились настройки.
Теперь уже можно проверять работу брокера. Открываем на «прослушку» все топики брокера под определенным названием (в нашем случае sensors/…)
Чтобы закинуть что-то в эфир у нас есть два варианта:
- Перейти в конец данной статьи, скорректировать в соответствии с уже известными логином, паролем и IP-адресом mosquitto скетч и залить его на ESP скетч и убедиться, что от него летят данные.
- Открыть второе окно терминала и оттуда что-то отправить в топик sensors. Например, “Hello world!”:
Если все сделано правильно, то в первом окне терминала мы увидим свое сообщение. Можно продолжать.
2. Устанавливаем и запускаем influxDB
Здесь без каких-то особых нюансов, все по инструкции, коих много. Все заработало с первого раза.
Сразу создаем двух пользователей: одного для сервиса telegraf, а второго уже для Grafana.
3. Устанавливаем и запускаем telegraf
Установка завершена :) Но есть нюансы. Вся настройка заключается в корректировке файла /etc/telegraf/telegraf.conf.
До следующего раздела все оставляем по умолчанию. В связке логин и пароль выше — доступ к InfluxDB, а ниже — к mosquitto.
Перезапускаем сервис, чтобы применились настройки.
После этого можно проверить работоспособность связки InfluxDB и telegraf:
В результате в списке баз мы должны увидеть базу sensors.
4. Установка и запуск Grafana
Сразу после запуска Grafana становится доступна по адресу http://localhost:3000. Логин и пароль по умолчанию: admin\admin. Лучше его сразу поменять, для этого жмем на шестеренку слева и переходим в раздел Server Admin. Далее все интуитивно понятно.
5. Запуск ESP8266
Открываем в IDE скетч wifi_weather_station_mqtt.ino.
В соответствии со своими настройками правим в начале:
Заливаем поправленный скетч в плату.
Для заливки нажимаем на кнопку ближе к датчику DHT, держим ее, а затем нажимаем на крайнюю и обе отпускаем.
После запуска платы ищем Wi-Fi сеть ESP***** и подключаемся к ней. Если окно настройки не всплывает автоматически, то открываем http://192.168.4.2.
После выбора сети обязательно нажимаем /wifisave.
После перезагрузки устройства проверяем на сервере данные с ESP:
6. Настройка Grafana
В графическом интерфейсе настраиваем Data Source.
Далее добавляем интересующие нас дашборды по такому примеру (или можно на один график, но мне показалось неудобным). График рваный, так как проводились разные опыты над ESP.
В результате после настройки я получил такое решение, доступное мне откуда угодно:
Скетч
Скетч очень тщательно закомментирован, чтобы по-максимуму не вызывать вопросов.
Датчики типа DHT имеют свойство с платами ESP периодически выкидывать максимальные для себя значения (2147483647), поэтому данные по температуре и влажности более 100 просто не передаем.
Некоторым помогает перепрошивка ESP в другую версию прошивки — мне не помогло. Опытным путем установлено, что опрос раз в десять секунд приводит к минимальному числу таких всплесков.
Инструкция по использованию
Крайняя кнопка на плате — перезагрузка.
Кнопка между датчиком и другой кнопкой имеет две функции:
- Удерживаем и нажимаем перезагрузку — перевод в режим программирования платы по кабелю.
- Один раз нажать во время нормальной работы платы — перевод в режим конфигурирования Wi-Fi через портал.
Если зайти на IP-адрес платы во время нормальной работы, то ответ должен быть такой: Not found: /
Веб-команды (на примере адреса платы 192.168.0.100):
- http://192.168.0.100/restart — перезагрузка платы.
- http://192.168.0.100/reburn — перевод платы в режим прошивки по воздуху. Для прошивки в IDE нужно выбрать порт:
После нажатия upload ввести пароль, который ранее задан в зоне конфигурирования в скетче.
- http://192.168.0.100/wifi — перевод платы в режим настройки Wi-Fi. Чтобы действие выполнилось наверняка, забиваем настройки платы сетью SSID: 0000, passw: 0000.
Послесловие
По результатам проекта окна в квартире теперь стабильно открыты, так как даже в детской при двух маленьких детях при закрытых окнах за три–четыре часа уровень СО2 уползает с 450–490 до 750 ppm. Тема наконец закрыта :)
P.S.
Дальнейшим развитием проекта планируется с управление приточной вентиляцией с HEPA-фильтрами, дабы автоматизировать процесс. Управление пластиковыми окнами рассматривалось, но так как окна и откидные и распашные и их нужно иногда мыть — признано для себя решением неверным.
Единственная реальная у нас проблема: уровень концентрации пыльцы в воздухе (к сожалению, в доме есть аллергики). В остальном — не существенно, хотя живём в пяти домах от Ленинского проспекта. Просто этаж низкий, окна во двор, в деревья между домами :)
Второй частью планируется стать вынос всех параметров, зависящих от внешних факторов (адрес MQTT-брокера, порт, логины, пароли, интервалы) в ту же веб-морду, для чего планируется в том числе переписать библиотеку.
Третьей частью планируется освоить 3D-моделирование и напечатать корпус. Но тут пока возможны нюансы (ко мне доехали остальные датчики: MH-Z19 и BME280), и для определения точности, возможно, я сделаю еще одну близкую модель, но с ними. Тогда корпус нужно будет сделать универсальным.
Комментарий недоступен
Ну - всё по фэншую! Arduino, макетка, Rpi, linux command line, скрипты, конфиги, grafana, вот это всё))
Забыл ведь самое главное: https://github.com/slemik99/public/tree/master/wifi_weather_station_mqtt
Комментарий недоступен
Статья скорее для хабра. С точки зрения технической составляющей - здорово, подробно расписано.
Но с точки зрения вопроса «открывать или не открывать окна» - раскрыт только вопрос об уровне CO2.
Понятное дело, лишний углекислый газ это плохо, но я например часто закрываю окна из-за:
1. Сильного шума снаружи.
2. Холода.
3. Сквозняк.
Думаю можно еще несколько причин найти, если вспомнить. Поэтому зачастую лучше чуть-чуть подышать лишним СО2, но спать в тишине и тепле, чтобы с утра проснуться выспавшимся и непростуженым, что довольно таки полезно :)
Проблему концентрации CO2 без проблем с шумом и пылью решает такой прибор как бризер. Например, Tion S3. Я пользую, мне нравится.
Отличное замечание, спасибо. Дополню статью, пока можно. Дальнейшим развитием проекта планируется управление приточной вентиляцией, дабы автоматизировать процесс. Единственная реальная проблема: уровень концентрации пыльцы в воздухе (к сожалению в доме есть аллергики). В остальном - не существенно, хотя живём в 5 домах от Ленинского проспекта. Просто этаж низкий, окна во двор, в деревья между домами :)
Почему просто не купить датчик и не пропустить весь этот ебаторий?
Это такое Лего для тех, кто постарше. Фан. Не страдают, а наслаждаются!))
Тем-кому решить проблему за деньги - могут готовое решение купить. У меня - MagicAir от тиона, который бризерами и управляет (по концентрации углекислоты как раз).
Вот уж точно не мой метод) Ну и просто датчик потом наращивать функциями неясно как
Жесть!
Автор, а вы в курсе, что есть такие углекислые ванны, например? Где человек специально забирается в "СО2", и это очень благотворно на его здоровье отзывается.
Или что есть, например, метод Бутейко, когда человек сознательно насыщает себя углекислым газом через задержку дыхания? И проходят все болезни.
—-
Закрытые форточки плохо не из-за СО2, а совсем из-за другого. Повышенный СО2 - наоборот, это очень хорошо.
можно ссылки не исследования, подтверждающие подобную информацию?)
Есть и иглотерапия и пиявки и кропопускание
Это же не значит, что нужно теперь дышать повышенной концентрацией СО2 постоянно правда? Процедуры на то и процедуры, что лимитированы по времени. Да и доказательств у Вас не нашлось. Про Бутейко: а есть дыхательная гимнастика по Стрельниковой, где наоборот вдыхают и говорят тоже все лечит...
Миша, к каждой новой статьёй открываю тебя с разных сторон :)
Сочувствую близким автора. Им возможно просто не комфортно постоянно находиться на сквозняке. А он их достал своими открытыми окнами, да еще какой изощренный способ выбрал, что бы все было только, как он хочет и только, как ему комфортно.
Спасибо от близких )
Речи о сквозняке не идёт ни в коем случае.
Ну все, VC окончательно поглотил хабр. RIP.
Посему сразу Рип. Глядя на современный хабр, welcome back.
Вы красавчик, пишите, смоделим корпус))
Я бы не доверял CCS881, он совсем странные вещи измеряет, а не СО2.
в плане замена на mh-z19, точнее хочу поставить рядом и сравнить
По моим наблюдениям напряжно находиться в помещении, где выше 1500 ppm и теплее 26. При температуре 20-22 можно и больше ppm не заметить, и наоборот, если в помещении 27-28, уже при 800 ppm будет хреново.
RIP Habr
Все это можно было сделать в 5 раз проще на Pysense + Lopy4
Обязательно изучу, спасибо
Mikhail, спасибо. Понравилось. Плюсанулось).
Маленький вопрос: откуда взяты данные "Влияние концентрации углекислого газа на состояние человека"(первая иллюстрация в статье)? Насколько это научно?
Картинку я нарисовал. Данные из трёх статей. Одна из https://cyberleninka.ru/article/v/vliyanie-kontsentratsii-uglekislogo-gaza-na-organizm-cheloveka
Есть идеи как контролировать качество измерений? Как производить калибровку готового прибора?
Есть возможность провести сравнительный тест с, например, MT8057S?
Планирую рядом поставить другую сборку с другими датчиками и далее посмотреть разницу и решить что делать следующим шагом.
Какая прекрасная статья! Автор хорош, Хабр RIP :)
Т.е. если открыть окно, то воздух станет свежее? Ну нихерасе новости!
Купил бы готовое законченное решение с GUI)
Очень круто, спасибо. Попробуем воспроизвести.
В москве. Открывать окно в надежде, что в квартире станет свежее)) пфффф))
Комментарий недоступен
Кошмар моего детства, батя себе напердит в зале и давай проветривать весь дом, окна заклеены на зиму, поэтому просто открывалась дверь, а за окном минус 25, очень неприятно.
Если по делу, свежий воздух очень важен, к примеру у нас в офисе было невозможно работать, хоть и прохладно, но дышать нечем, вот не хватало такого датчика.
Главное что бы не возникало сквозняков, был случай, буквально два месяца назад знакомая на ночь открыла окна, продуло лицевой нерв, теперь половина лица не работает, нет мимики, не круто
Михаил у нас есть чат в телеграмме по iot , ваша железка под него подходит. Хотите я вас туда добавлю?
Нет, спасибо ) Это хобби, а чатов уже зашкаливает
Да уж заморочились )) Все никак на бризер не решусь, от xiaomi неплохой вариант появился с датчиком CO2, хотя мне и простой бы пошел - главное шум от улицы убрать, и чтобы тихий в комнате был (тут тионы и не подходят)
Комментарий удален модератором
Ты крут!!!