- PVSM.RU - https://www.pvsm.ru -
Меня зовут Евгений, и я — веб разработчик. Уже есть десятки постов о различных метеостанциях на ардуино, но мне хотелось написать о том, что в 2016 году можно быстро, легко и без знания электротехники собрать полезный датчик на ардуино, который легко может работать с вашей инфраструктурой, написанной на чём угодно.
Если вам интересно, зачем вообще измерять СО2, то полезные ссылки вы можете найти в конце поста.
Итак, наша цель — сделать датчик температуры, влажности и СО2 с отображением данных на дисплей и отсылкой на веб сервер. Что нам для этого понадобится:
1. Ардуино. Я взял Wemos D1, основанный на микроконтроллере ESP-8266EX. Он совместим с ардуино, у него есть свой Wi-Fi, и стоит он 6.3$.
2. Датчик СО2. Ранее я пробовал обычный MQ-135, но даже после прожига, калибровки и учёта поправок на температуру и влажность погрешности был довольно заметные — около 300 ppm. Так что для гарантии точных измерений я взял MH-Z19 — самый дорогой компонент схемы, 27$.
3. Датчик температуры и влажности. Использовал стандартный и любимый всеми DHT11 за 1.44$:
4. I2C совместимый дисплей. Я взял самый дешёвый hd44780 за 3.06$.
5. Чтобы это выглядело не очень ужасно, и было перемещаемо, так же неплохо иметь корпус. Чтобы не заморачиваться с выпиливанием, я взял корпус за 8$ с дырками и креплениям под usb и дисплей. Внимание — в корпусе должны быть дырки для проветривания, иначе он будет измерять только свою особую атмосферу.
6. Отладочный USB кабель и около 10 проводков. Цену учитывать не буду.
Итоговая стоимость — 44 доллара, если брать на алиэкспресс. Аналогичные устройства без возможности что-то передавать в сеть сейчас стоят у китайцев в районе 100$. Аналог от Tion, которые в количестве делают свои посты на гиктаймс с рекламой бризеров, пока в разработке (не имею к ним отношения, а жаль).
Заказал, обождал месяц — приступаем к сборке! Нет ничего проще.
1. Подключаем датчик температуры и влажности. Земля к земле, прах к праху, плюс к пяти вольтам на ардуино, цифровой выход к цифровому выходу (я использовал D5).
2. Подключаем датчик СО2. У него есть богатый выбор интерфейсов — PWM, аналоговый и цифровой вывод. Единственный элемент пайки — надо приделать ножки на нужные выходы. Проверял лично — работают все. Остановился на получении цифровых данных — точно, красиво, лаконично, и так же есть возможность отсылать команды на калибровку, что мне впрочем не потребовалось. Опять же — земля к земле, плюс к другим пяти вольтам, TX и RX выводы на цифровые пины — в моём случае, на D6 и D7.
3. Подключаем дисплей. И снова — земля к земле, плюс на последний оставшийся выход на пять вольт, SDA на дисплее к SDA на ардуино, SCL так же к SCL.
И… Всё! Можно закручивать получившееся добро в корпус, если вы конечно не умудрились сделать какую-нибудь ошибку при подключении. Обратите внимание, чтобы у датчика СО2 не оказались прижаты воздухозаборники (или как это корректнее назвать, белые такие штуки). Как бонус, при сборке в корпусе значительно уменьшаются отклонения в измерении.
Отлично, нам осталось “только” написать софт. В ссылках ниже есть репозиторий на гитхабе, который можно просто залить и использовать. Единственный тонкий момент — у вашего дисплея может оказаться другой адрес. Воспользуйтесь мини программой из ссылок для сканирования адресов i2c и поменяйте на нужный, если сразу не заработает. Перед сканированием отключите остальные устройства, иначе можно получить много мусора.
Да, Wemos D1 является совместимым с Arduino, и вам нужно просто добавить в Arduino IDE соответствующую борду. Подключаем стандартным коротким кабелем по micro USB и заливаем прошивку. Если вы всё сделали верно, то устройство сначала постарается подключиться к Wi-Fi (сеть и пароль берётся из файла настроек), затем ждёт некоторое время для “разогрева” датчиков, и наконец покажет данные на дисплее. Если по сети данные отправить не получится, то будет об этом сообщать. Если уровень CO2 допустимый, то после загрузки подсветка выключится, и включится только если вам пора открыть форточку.
У меня это выглядит так:
Теперь насчёт работы с сетью. Не мудрствуя лукаво, я собираю данные в JSON и отсылаю его на сервер обычным POST запросом, где простой скрипт на PHP кладёт его в MySQL базу. Далее можно посмотреть, как изменялись ваши условия жизни в течении дня при помощи PHP и Google Charts — вся серверная часть тоже есть в ссылках.
В итоге по смешной цене, с нулевыми знаниями в электротехнике и с минимальными затратами времени мы может получить примерно такие симпатичные графики:
Не скажу, что это прям срывает покрова с простой истины, что “меньше народу — больше кислороду”, и что нужно периодически проветривать, да и про это много раз говорили — в том числе и про вред пластиковых окон. Но на этом примере понятно, насколько просто, быстро, надёжно и красиво можно сделать практически любой датчик, который поставляет данные для какой-то более сложной системы.
Да, показания я сравнивал с вот китайским датчиком Green Life — показания практически идентичные, только мой немного быстрее реагирует на изменение обстановки:
Конечно, многое можно было бы сделать лучше. Навскидку я вижу следующие минусы:
Автор: jehy
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/gadzhety/112093
Ссылки в тексте:
[1] Код для ардуино: https://github.com/jehy/arduino-esp8266-mhz-19-serial
[2] Серверная часть: https://github.com/jehy/co2-online-display
[3] тут: http://co2.jehy.ru/
[4] тут: http://whois.jehy.ru
[5] geektimes.ru/company/tion/blog/269134: https://geektimes.ru/company/tion/blog/269134/
[6] О wemos d1: http://www.wemos.cc/wiki/doku.php?id=en:d1
[7] Спецификации датчика MH-Z19 : http://eleparts.co.kr/data/design/product_file/SENSOR/gas/MH-Z19_CO2%20Manual%20V2.pdf
[8] Хорошая статья: http://www.2150692.ru/faq/87-co2-mhz19-arduino
[9] Сканирование устройств на i2c: http://playground.arduino.cc/Main/I2cScanner
[10] Будущий аналог датчика от Tion (не имею к нему отношения): http://tion.ru/magicair/
[11] Решение для перезапуска ESP8266 на уровне железа: http://samopal.pro/wdt-ne555/
[12] тут: http://vk.com/fablabum
[13] Библиотека : https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
[14] Библиотека : https://github.com/bblanchon/ArduinoJson
[15] Библиотека : https://github.com/adafruit/DHT-sensor-library
[16] Источник: https://geektimes.ru/post/270958/
Нажмите здесь для печати.