Веб разработчик
7,1
рейтинг
12 февраля в 09:50

Ещё один способ определения качества воздуха на Arduino — с передачей данных в сеть из песочницы

Меня зовут Евгений, и я — веб разработчик. Уже есть десятки постов о различных метеостанциях на ардуино, но мне хотелось написать о том, что в 2016 году можно быстро, легко и без знания электротехники собрать полезный датчик, претендующий на IoT, который легко может работать с вашей инфраструктурой, написанной на чём угодно.

Если вам интересно, зачем вообще измерять СО2, то полезные ссылки вы можете найти в конце поста.

Итак, наша цель — сделать датчик температуры, влажности и СО2 с отображением данных на дисплей и отсылкой на веб сервер. Что нам для этого понадобится:

Компоненты


1. Ардуино. Я взял Wemos D1, Arduino совместимую плату, основанную на микроконтроллере ESP-8266EX. Wemos совместим с ардуино IDE, у него есть свой Wi-Fi, и стоит он 6.3$.

как выглядит


2. Датчик СО2. Ранее я пробовал обычный MQ-135, но даже после прожига, калибровки и учёта поправок на температуру и влажность погрешности был довольно заметные — около 300 ppm. Так что для гарантии точных измерений я взял MH-Z19 — самый дорогой компонент схемы, 27$.

как выглядит


3. Датчик температуры и влажности. Использовал стандартный и любимый всеми DHT11 за 1.44$. В комментариях подсказывают, что лучше брать DHT22, но для схемы и стоимости это не принципиально:

как выглядит


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 — показания практически идентичные, только мой немного быстрее реагирует на изменение обстановки:

как выглядит
На картинке поднята контрастность дисплея — на нём всё видно отлично, но телефон перекорёжило от его света:


Выводы


Конечно, многое можно было бы сделать лучше. Навскидку я вижу следующие минусы:

  1. Дисплей с выключенной обладает очень низкой контрастностью. Лучше брать другой, разорившись ещё центов на 10.
  2. При включенной подсветке экран немного мерцает. Не критично, но видимо не нравится ему, что от ардуины запитывается сразу три устройства на пять вольт. Вероятно, правильно было бы сделать раздельное питание.
  3. Конечно, всё это можно красиво спаять, а не просто покидать в коробку, кое как соединив.
  4. Датчик температуры и влажности иногда возвращает левые огромные значения. Их я просто отсекаю, но вообще неприятно. Возможно, сказывается общая запитка или некачественное соединение.
  5. Конечно, можно было бы накапливать статистику и периодически её отсылать (и накапливать в случае ошибок) — никому не нужно знать своё качество воздуха с точностью до 5 секунд.
  6. Чтобы не вбивать данные вайфайной точки при компиляции, можно было бы сделать, чтобы в случае, если коннект не удался, устройство переходило в режим вайфай точки (да, Wemos это умеет), подцепившись к которой, можно его перенастроить — в том числе ввести новое имя сети и пароль.
  7. Wemos D1 всем хорош, но у меня иногда вылетает (раз в 2-3 дня) по неизвестным причинам, и сам перегружается только через несколько часов. Вроде как не мой софт кривой, просто борда не очень стабильная. Можно с этим бороться подключением устройства к какой-нибудь ардуино нано, которая его перезапускает при необходимости, или просто поставить железку с таймером, которая будет раз в полчаса перезапускать устройство (благо у него есть вход RESET).
  8. При выдёргивании и возврате обратно питания, датчик СО2 сходит с ума, что лечится перезагрузкой. Я это решил простым способом — при накоплении некоторого количества непрерывных ошибок, устройство само себя перезапускает, после чего всё приходит в норму. Вероятно, можно было бы решить это более правильным способом на уровне железа.
  9. Температура измеряется с точностью до двух градусов, влажность — с точностью до десяти процентов. В бытовых целях достаточно, а для какого-то другого использования понадобится датчик поточнее.
  10. Если вам требуется отправить один небольшой пакет данных, то библиотека для работы с JSON это убийство воробьёв из пушки. Гораздо проще собрать JSON ручками, или вообще передавать параметры при помощи GET/POST, что я вначале и делал. Но при наличии огромного количества оперативки на Wemos — почему нет, так красивее. Но при портировании кода на маломощную ардуину скорее всего придётся переписать это.
  11. В текущей реализации нет управления яркостью подсветки — она может быть только включена и выключена. Можно убрать перемычку и поставить вместо неё сопротивление или ввести на ардуино — тогда вы сможете управлять яркостью подсветки.
  12. Так же можно сделать управление или получение информации при помощи приложения. Самый простой способ, как ни смешно — добавить телеграмм бота — библиотека для связи ардуино через телеграмм уже есть.


Что дальше


А дальше я хочу отдохнуть от рабочих будней и поиграть с друзьями в лазертаг. Одна проблема — стоит игра от 500 рублей в час на человека. Это при полном отсутствии расходников. А купить комплект для игры будет стоит каких-то совсем заоблачных денег — примерно от 8000. Так что для того, чтобы поиграть в лазертаг, надо сначала его собрать. Планирую сделать что-то вроде Skirmos — где каких-то денег будет стоит только сам ствол, который должен быть довольно прочным. Интересно? Следите за публикациями! А что вы делаете на Arduino?

Ссылки


Основное


  1. Код для ардуино
  2. Серверная часть
  3. Посмотреть на воздух в моём офисе можно тут
  4. Взять меня на работу (да, я её ищу) можно тут


Полезное


  1. Если вы ничего не знаете про СО2 — geektimes.ru/company/tion/blog/269134
  2. О wemos d1
  3. Спецификации датчика MH-Z19
  4. Хорошая статья, примерно про то же самое, но без сети, с дисплеем от телефона, с работой по PWM и на Arduino nano
  5. Сканирование устройств на i2c
  6. Будущий аналог датчика от Tion (не имею к нему отношения)
  7. Решение для перезапуска ESP8266 на уровне железа
  8. Ещё одна хорошая статья про ESP, Lua и CO2
  9. А тут студенты МАМИ занимаются всякой хорошей элетроникой. Кстати, им требуются преподаватели. Скоро буду там вести лекции.

Использованные библиотеки


  1. Библиотека для работы с дисплеем
  2. Библиотека для создания JSON
  3. Библиотека для работы с семейством сенсоров DHT
Джехи @jehy
карма
11,0
рейтинг 7,1
Веб разработчик
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (95)

  • 0
    1. Как по Вашему насколько датчик CO2 точно работает?
    2. Можно ему доверять измерения с указанными в документациями погрешностями?
    3. Есть ли какието особенности, подводные камни при его использовании?
    • +1
      1) Как написал, сравнивал с китайским девайсом — результаты весьма коррелируют.
      Ну и представляю примерно, сколько когда должно быть ppm — с открытым окном, с закрытым, при одном и нескольких людях в помещении. Очень похоже.
      2) В документации указана точность до 50ppm. На мой взгляд, для бытового применения вполне хватает пары пороговых значений — в 700 и в 1000ppm. Её он обеспечивает. Если же интересуют точные измерения, то конечно надо сравнить с показаниями крутого промышленного датчика, которого у меня под рукой нет. Если у кого есть — можем попробовать.
      3) Про реакцию на перепад напряжения я написал. Так же конечно следует учитывать условия эксплуатации — должна быть не загрязнённая среда (в каком-нибудь цеху датчик может быстро засориться) и температура от 0 до 50. Выше 50 у вас вряд ли будет, а вот на улицу датчик зимой высовывать не стоит. По поводу датчика температуры и влажности — тоже стоит учитывать описанные в спецификации условия эксплуатации.
      • 0
        Спасибо надо будет себе преобрести на посмотреть.
      • 0
        сравнивал с китайским девайсом

        А что за девайс?
        • +1
          В статье же есть, с картинкой.
  • 0
    Аналоговый датчик в качестве заголовка страницы — как то не очень. Лучше его вынести на отдельную страницу, если так уж хочется смотреть на него.
    • 0
      Дело вкуса. Там показывается последнее значение и наглядно видны границы. Люблю gauge из Google charts — по нему всё понятно людям, которые не понимают графики.
  • 0
    Прошу прощения за глупый вопрос: в каких единицах измеряется концентрация углекислого газа? Это проценты или другие величины?
    • 0
      Общепринятая еденица измерения — parts per million (ppm). Об этом много где говорят, так что не стал заново писать. По ссылкам в подвале можно почитать и про единицы и про то, что они значат, и какие вредные значения.
  • +1
    Евгений — полное вам уважение! Совсем недавно здесь же была рекламная статья о датчике СО за 100 баксов. Как раз тогда меня очень смутила стоимость устройства — цена показалась запредельной для достаточно примитивного устройства. Собственно, обоснованность моих сомнений вы только что подтвердили: у вас, при розничной закупке, себестоимость 44$. У массового продукта с оптовыми закупочными ценами цена реализации — over 100$ (почти в 3 раза выше). При этом у вас добавлены доп.функции — влажность + работа по сети.
    Отличная работа и отличная статья!
    • 0
      у вас, при розничной закупке, себестоимость 44$. У массового продукта с оптовыми закупочными ценами цена реализации — over 100$

      Не спешите делать выводы.

      Тот же барометр на arduino мне обошелся в $10. Попробуйте купить за такую стоимость в магазине.

      Это не массовый продукт а «на любителя». Термометр — да, нужен всем. Стоит копейки. А вот барометр и тем более измерительно углекислого газа — нужен единицам. И часто такие устройства у любителей выходят дешевле, ведь они не платят налогов, не платят зарплаты бухгалтерам и пр., не делают рекламу…
      • +1
        Да, хотел написать комментарий в том же духе. Себестоимость во-первых мало что значит, а во-вторых сильно зависит от массовости производства. Железо — ничто, маркетинг — всё.
        Правда, в данном случае непонятно, почему цена довольно высока у китайцев, которые обычно не вкладываются в рекламу и продают всё по цене, близкой как раз к себестоимости. Это вам не какое-нибудь мвидео. Но всё равно, 100$ это вполне нормальная цена.
        Ну и надо сказать, что определение влажности обычно есть на любых китайских датчиках, а добавление работы по сети практически ничего не стоит.
  • 0
    Отличная статья, довольно подробная, прямо инструкция пошаговая. А теперь внимание, вопрос! Напишите про размер итогового прибора, и поместится ли он в подрозетник стандартный или углубленный.
    • 0
      Размер определяется в общем-то размером борды. Это 68.6*53.4мм. Должен влезть. Плюс наверняка можно взять мини вариант борды, если выходов хватит.
    • +1
      Если делать минималистично, то надо собирать на esp8266 (версия распайки 12), качественно питание 220 -> на 5 и 3.3 вольта. В таком случае в подрозетник должно поместиться, но придется немного попаять. Дисплей 1602 в подрозетник не поместится, но если дисплей нужен — можно взять 128x64 олед — может быть даже парочку.
  • 0
    Ээээ, называть ESP-8266 ардуиной — это немного неправильно. Arduino-like шилд на ESP-8266.
    • 0
      Wemos D1, использованный автором, не шилд, а девелоперская борда в форм-факторе Arduino Uno. Для нее есть драйвера для работы с официальной средой разработки и она совместима с большей частью шилдов для Arduino Uno.
  • +2
    Тоже купил себе такой датчик, и заметил, что если при включении датчика реальный уровень CO2 больше 1000ppm, то датчик начинает несколько завышать показания.
    Не сталкивались с таким?

    P.S. Практически сделал автономный индикатор CO2 на этом датчике на STM32 (без нелюбимой многими Arduino). Нужна ли статья?
    • 0
      Не сталкивался, я очень остро реагирую на воздух, и поэтому условий с более 100ppm на старте не было. Попробую.

      Статья скорее не про датчик СО2, а про то, как легко и быстро можно собрать полезное работающее устройство, претендующее на IoT. Понятно, что можно использовать STM32, можно Rastberry, наверняка можно вообще обойтись датчиком и индикатором со стрелкой (PWM же есть). Холивар по Arduino меня не очень волнует, что оказалось под рукой, на том и собрал. Но вообще мне нравятся средства лёгкого прототипирования, поскольку по текущей жизни идёт очень большое количество итераций разработки, и зачастую результат всё равно уходит в помойку. Главное в таких условиях — скорость создания. А если продукт востребован, то дальше можно на любой оптимальной платформе собрать.

      Кстати, сколько у вас времени ушло с STM32 до почти готового решения?
      • 0
        условий с более 100ppm на старте не было

        Средний уровень CO2 в воздухе по планете сейчас около 400 ppm.

        Кстати, сколько у вас времени ушло с STM32 до почти готового решения?

        Прошивка писалась одновременно с некоторыми экспериментами с железом. Упор делался на сокращение потребления устройства, поэтому приходится экспериментировать с режимами пониженного потребления контроллера, индикатора и другого.
        Пока около меньше недель потратил, по несколько часов по вечерам.
      • +1
        Прошу прощения, подумал, что вопрос звучал, нужна ли эта статья, на него и отвечал. Статья про STM32 конечно нужна — интересно же сравнить. И не ардуиной единой…

        Да, я имел в виду что конечно же не было условий с ppm более 1000, описался, вы ведь про 1000 на старте говорили.
    • +1
      конечно нужна!
      Особенно. если будет такой же подробной с кодом, ссылками и подводными камнями
  • 0
    а что с питанием, сколько ест — MH-Z19 не замеряли? По mq-135 какими библиотеками(примерами) пользовались для перевода в ppm?
    • 0
      В спецификации MH-Z19 заявлено: Average current < 18 mA @ 3.6 ~ 5.5 V DC, что достигается, вероятно, отсутствием нагревательного элемента.
    • +1
      Сколько ест — не замерял, сейчас при себе мультиметра нет.

      MQ-135 это только на первый взгляд хорошее решение — он очень сильно зависит от температуры и влажности. Ну и определять сопротивление для каждого датчика после прожига надо. Самое смешное было, окгда у меня датчик сошёл с ума и начал выдавать абсолютно неудобоваримые показания… Оказалось, что на кухне жена пирог с ромом пекла. Датчик честно поймал этанол из другой комнаты и об этом рассказал…

      Сделал свой гибрид из нескольких библиотек (вроде бы этой и этой), правда, корреляция по температуре и влажности довольно сомнительна — автор писал, что в даташите вероятна ошибка. В общем, если вам надо примерно знать, когда всё совсем плохо, то mq135 подойдёт с учётом поправок. Но не более.
      Мой код для mq-135 тут.
      • 0
        Пробовал второй вариант библиотеки, после определенного порога показания уходили в минус. Возможно это проблемы с питанием, у меня 135 ел примерно 100мА и ПроМини начинала сильно греться.
        Просто 135-ый в 10 раз дешевле, но уже склоняюсь к тому что зря сэкономил )
        Кстати ваш дхтt11 в отличии от дхт22, сильно врет по влажности.
      • 0
        Поглядываю в сторону датчика MH-Z14, не изучали его? Возможно есть что сказать, на первый взгляд выглядит «солиднее».
        • 0
          Ниже в комментариях уже писал — те же яйца, только сбоку. Различий в даташите не обнаружил, но z14 выглядит как выходец из мира стимпанка.
          • 0
            Про MH-Z14 пишут
            Правду выдает только по UART, через ШИМ показывает уровень в два раза ниже реального (осциллографом проверяли, что действительно такой импульс, в формулах не ошиблись). В целом датчик нормальный, в паре с ESP8266 (NodeMCU v1.0) работает хорошо
    • +1
      Я измерял у своего датчика, потребление тока там импульсное, при напряжении 5В большую часть времени 4 мА, но каждые 6 сек потребление возрастает до 100 мА, длительность импульса меньше секунды.
      Во время импульса через защитный фильтр на торце датчика видно, что там что-то начитает светиться красным — скорее всего, лампа накаливания (она дает излучение в большом диапазоне длин волн).
      • 0
        скорее всего там инфракрасный диод широкого спектра — это инфракрасный сенсор. ИК-диоды иногда отсвечивают красным
  • +1
    На сколько мне известно, картинки под спойлером браузер загружает, но просто не отображает. По этому «осторожно, трафик» тут не работает %)
    • 0
      Да, спасибо, поправил.
  • 0
    А дешевле датчики не рассматривали? Или их нет в продаже?
    • 0
      После того, как накололся с MQ-135 (история в комментариях выше), решил взять гарантированное решение с большой точностью и цифровым выводом. Альтернативы есть, но или дороже, или сильно зависимые от внешних факторов. Впрочем, насчёт стоимости я сильно не заморачивался — вполне могут быть и более дешёвые решения.
  • 0
    Спасибо за статью. Как раз вовремя. Буквально вчера тоже начал собирать домашнюю метеостанцию.
    Arduino mega + ESP-8266 + LCD4884 = Основные мозги. Датчики DHT11 для дома, DHT22 — для улицы. Передавать данные с датчиков температур и влажности хочу по беспроводному модулю NRF24L01. Покопаю Ваш код на выгрузку данный web странице. Может задействую свою Raspberry pi для сбора данных и обработки. Пока он как медиацентр.

    В планах собрать из «Ultrasonic Mist Maker Fogger» (пока идет с китая) увлажнитель воздуха. И включать его удаленно по NRF24L01 через реле в зависимости от влажности DHT11.

    • 0
      Про увлажнители я готов хоть сейчас ещё один топик написать. Если вкратце — не стоит использовать ультразвуковой — у вас будет милый налёт по всем поверхностям. Ну или заливайте в него дистиллированную воду — вроде помогает. Ну и увлажнитель должен хорошо мыться, иначе в нём заводится жизнь, которую вы потом раскидываете по всему дому.

      Мне гораздо больше нравится увлажнитель по типу «ведро с дисками и вентиллятором» — он исправно испаряет литров по 10 в сутки и не оставляет никаких следов. Минус — в том, что всё, что есть на рынке, стоит безумных денег (больше 10.000 за ведро, Карл, ведро с дисками и вентиллятором), и в механизме используются пластиковые шестерёнки, которые через год стираются и умирают — а купить новые негде.
      Будет круто, если сделаете свой увлажнитель вёдерного типа — себестоимость никакая, надо только найти, из чего диски сделать. Готов у вас его купить.

      Насчёт выгрузки данных — никакой магии — подключаемся по вайфаю и делаем POST запрос на сервер…
      • 0
        Спасибо за «ведро с дисками». Обдумаю. Видел в интернете умельцев на эту тему.
        • 0
          SUPRA SAWC-130 — есть вот такое ведро, но качество не очень.
          Venta сильно лучше, но стоит в 3 раза дороже
          • 0
            Не, спасибо. Не стоит своих денег. Главное сделать самому для меня:). Главный вопрос — из чего сделать барабан с большой поверхностной площадью. Некоторые из CD/DVD дисков делают. Мне кажется результат не очень. Или может их отшлифовать погрубее, что бы влага больше задерживалась на поверхности при медленной скорости прокрутки барабана.
            • 0
              сравнивая с барабаном венты, CD/DVD диски будут гораздо меньше и пластик там действительно более шероховатый. Тут была статья с такими самоделками, до прыжка курса выходило либо не сильно дешевле, либо сильно хуже.
      • 0
        Чистая вода из осмоса точно помогает от налёта.
      • 0
        Немного возражу про ультразвуковой увлажнитель. Дома стоит две штуки уже 7 лет. Вода холодная из-под крана. Налет появился один раз на старом картридже, как только заменил содержимое — налет перестал появляться. От жизни спасает серебро или уф лампа (один увлажнитель со встроенной). Дисковый конечно лучше, но он дороже.
      • 0
        В ведре с дисками заводится не меньше живности.
        Использование воды после фильтров с обратным осмосом в ультразвуковом увлажнителе убирает всякие налёты, и живности в этой воде питаться нечем.
        • 0
          Ведро с дисками довольно легко регулярно мыть, а в ультразвуковых обычно очень узкое горлышко — а жизнь туда всяко попадёт.
    • 0
      лучше взять оба 22, сверьте показания 11 и 22, можете сильно удивиться. А может и пронесет, качество не стабильное у них
      • 0
        Вечером проверю разницу DHT11 и DHT22.
        • 0
          Проверил. Действительно есть различия в показаниях.
          DHT22 — Hm: 41.70 % T: 27.10 *C
          DHT11 — Hm: 34.00 % T: 28.00 *C
          • 0
            А скачки значений наблюдаются? Влажность у меня скачет от 30 до 40 без внешних причин.
            • 0
              Нет скачков, всё показания стабильны. При дыхании на датчик показания влажности плавно меняется, потом возвращается на исходное.
    • 0
      А можно нубский вопрос? Зачем брать Arduino mega + ESP-8266 + NRF24L01? Вроде всё это можно сделать только одной ESP-8266 (ESP-12E)
      • –1
        Можно, но затрахаетесь. Нестабильно ESP-8266, минное поле для новичков.
        • 0
          А я вот начитался, насмотрелся и заказал NodeMCU на ESP-12E парочку и датчиков. Буду экспериментировать. Ещё лежит STM32F4 Discovery, но на ней какой-то высокий порог входа. Пока не разбирался сильно.
          • 0
            Говорят, что NodeMCU пока сыровата, кушает много памяти и вылетает. Ну и не вижу никакой сложности в том, чтобы использовать C++, а не Lua. Но опять же — вопрос не стоит выеденного холивара.
            • 0
              Ну я просто заказал сразу с обвязкой, а прошить можно кучу всего (уже столько ссылок насобирал и проектов на гитхабе)…
        • 0
          Как-то я пока из 4 минных полей пока ни одной мины не словил.
      • 0
        Мега — Например, если выводов не хватает. Может быть, если автор много всего меряет. Или для стабильности системы — я писал, что с этим пока что у ESP проблемы.

        NRF24L01 это не к датчику, это для коммуникации с увлажнителем. Датчик сливает на сервер данные по вайфаю, а с остальными устройствами может общаться по любому другому каналу. Непринципиально, что использовать — радио, блютус, вайфай… Хоть ИК. Почему бы не NRF24L01. А на «одной» ESP не сделаешь — нужно их как минимум две.
        • 0
          А, теперь понял. NRF24L01 просто для связи с датчиками. А я планировал просто все датчики на ESP цеплять, чтобы они по wi-fi всё на сервер слали, независимо.
        • 0
          Верно. Общение с Мега будет по радиоканалу NRF24L01 + Arduino Pro Mini + DHT11(или по плану любой датчик). Во только я 2 штуки Pro Mini похоже спалил из — за бракованного TTL (неправильный вольтаж на выходе). Еще думаю Pro Mini попробовать взять 3.3 вольтовые. Только не знаю потянет ли NRF24L01 + Arduino Pro Mini 3,3 + DHT11 от батареек.
          • 0
            существуют, кстати, комплекты ATMEGA48 + NRF24L01 — $2.5 за комплект.
  • 0
    Кто нибудь пробовал MH-Z14?
    • 0
      Не пробовал, но по тому что читал и спецификациям — различия минимальные. Да и стоит столько же примерно.
  • +1
    Датчик температуры и влажности иногда возвращает левые огромные значения. Их я просто отсекаю, но вообще неприятно. Возможно, сказывается общая запитка или некачественное соединение.

    Дело не в этом, дело в самом датчике. Он работает по протоколу single wire (который не имеет ничего общего с 1-wire) и уж не знаю, то ли протокол паршивый, то ли его реализации хромают. Причём как на Arduino, так и на Raspberry Pi. Но в результате, иногда устройству не удаётся поймать начало ответа от датчика и вместо данных получается каша, которую программа честно интерпретирует как «левые огромные значения». Чисто теоретически можно попытаться перевести эту кашу в божеский вид двигая байты, но начальная часть данных всё равно теряется и проще выкинуть эти значения и опросить датчик заново.
    Причём особой разницы между DHT11 и DHT22 в этом плане нету — и тот и другой временами присылают кривые ответы. DHT22 чуть реже, как мне показалось.
  • 0
    Сюда бы еще детектор ЛОС прикрутить и будет монитор мечты.
    • 0
      Плюс как раз в том, что сюда можно прикрутить что угодно. Датчик движения, ИК сенсор, фотоэлемент, датчики любых газов… Была бы потребность.
      Меня поразило именно то, насколько это дружелюбно реализовано.
  • 0
    MQ-135 это датчик «всего», для определения конкретно СО2 не годится, а вот для «пора открыть форточку» — самое оно.
    • 0
      Насколько я помню, «всё» — это спирт, дым, этанол и со2. Если у вас в комнате регулярный пьяный угар в дыму, то mq135 возможно поможет. В противном случае остаётся только СО2. А он определяется, как я писал выше, с огромной погрешностью. Если вас не волнует погрешность в 300-400 ppm, то конечно можно использовать.
      • 0
        Всё это — дым, спирты, со2, со, бензол, фенол, толуол (и похоже вообще всё что имеет бензольное кольцо) альдегиды, окислы азота, аммиак, метан, водород.
        И не надо переходить на личности это как минимум не красиво, как максимум в рамках данного ресурса вредно для саморазвития.
        И мне вот интересно, как вы определили погрешность? а то я всё ломаю голову над созданием контрольной смеси газов в домашних условиях, не создав в ней 100% влажность, и не лишившись тестовых газов в процессе обезвоживания.
        • 0
          Где вы увидели переход на личности? Про вас я ничего не говорил, и местоимение можно вычеркнуть из комментария без потери смысла.

          Погрешность я определял только для СО2 — больше ничего меня не интересовало. К сожалению, у меня не было возможности создать идеальные условия — в даташите указано, что стандартными условиями является температура 20+-2 и влажность 65+-5. Если температура была примерно такая, то догнать влажность до стабильных 65 было сложнее. Впрочем, в доступных библиотеках формула расчёта такая:
          float getCorrectionFactor(float t, float h) {
            return CORA * t * t - CORB * t + CORC - (h-33.)*CORD;
          }
          

          Так что по идее поправка на влажность довольно небольшая (cord довольно маленький). Кстати, значения с поправкой в моих условия незначительно отличались от значений без поправки — не более, чем на 50 ppm.
          Далее я сравнивал полученные значения с китайским датчиком. Сам китайский датчик я сравнивал с собранным мной, так что на основании этого делаю выводы.

          Безусловно, есть вероятность того, что и мой и китайский датчик врут. Так же у меня мог быть неисправный датчик mq-135 (я его и прожигал и прогревал, но у китайцев просто есть некий процент брака). Так же я уже писал о том, что автор библиотеки с корреляцией сам писал, что она может обманывать (по его ощущениям).

          В общем, никоим образом не исключаю вероятность того, что можно точно определять содержание со2 при помощи mq-135, но по-моему она довольно мала.

          Если у вас получится посчитать точные параметры, то буду только рад — это вдвое снизит общую стоимость детектора. А совсем круто, если получится ещё определять, норма какого именно газа превышена — вроде как можно, основываясь на допустимых значениях. Если уже получалось — публикуйте, интересно!
          • 0
            Просто потыкал тему палочкой заранее, сейчас жду когда датчики приедут, по идее всё сводится к матрице и её решениею, но тут вылазит такая неприятность, что МQ135 ловит чертовски много газов да ещё и с примерно одинаковой чувствительностью(а пдк, то для разных газов разная).

            А вообще имея в доме газовую плиту можно запросто столкнуться с превышением по метану, (пропану/бутану) СО, СО2, водороду (поставили аккумулятор на зарядку и забыли), задымлением (истории про жареную картошку вместо варёной наверное каждый слышал), остальные варианты это уже к отчаянным химикам.
            Пришёл к выводу что необходимый минимум это использовать пару MQ-9 и MQ-135 + датчик влажность/температура( если надо точность приподнять) первый чувствителен к CO и метану второй ещё к куче всего, первый настраиваем на максимальную чувствительность (ни метана ни угарного газа в квартире быть не должно), второй калибруем на СО2, для которого шибкая точность не нужна.
            И судя по тому что в разных датащитах указывается разная кривая для влажности и температуры каждый датчик надо калибровать персонально, вот я и ломаю голову над тем как создать контрольную смесь.
            • +1
              Да, логично, спасибо за пояснение про газы.
              Разные кривые именно для mq135? Тогда да, тяжко.
              • 0
                да именно мq-135, те датащиты что не явная копипаста содержат разные графики

                короче ни в какие ворота.
        • 0
          Ещё интересно, если опишете, какие ещё неприятные газы можно найти в квартире. Мне навскидку пришёл в голову только метан. Про дым и этанол я писал только к тому, что не вижу пользы в его измерении в домашних условиях. Конечно, другое дело, если говорить о индустриальном применении — но там уже нужно знать, что именно превышено.
          • 0
            Забыл ещё про озон — может появляться от лазерного принтера, но в маленьких количествах даже полезен тем что обеззараживает воздух.
  • 0
    А где выгодно купить MH-Z19? Что-то на али всего в одном месте есть.
    • +1
      Как-то не так ищете — у меня куча вываливается. Ну и ещё можно mh-z14 использовать, хотя он кажется в среднем на пару баксов дороже.
      • 0
        а где лучше брать?
        • 0
          Где дешевле и репутация у продавца хорошая. Ссылок не дам — здесь это вполне обоснованно не любят.
  • 0
    Часто слышу что датчик CO2 надо калибровать, что это значит и как это сделать?
    • 0
      В идеале надо составить контрольную смесь газов- воздух+ СО2 и протестировать ей датчики, в домашних условиях с этим проблемы (хотя если есть баллон со2, компрессор для воздуха и два расходомера это уже не проблема).
      Если совсем туго можно с помощью лимонной кислоты и соды получить углекислый газ набрать в шприц потом добрать воздуха, подождать пока оно там всё в шприце перемешается, выпустить и ещё добрать воздуха(воздух при этом надо предварительно лишить углекислого газа с помощью раствора щёлочи), потом с шприца дуть в датчик, но при чувствительности датчика к влажности можно дико проколоться.
      У нас на работе есть газоанализаторы, их калибруют по чистому воздуху и специальной уже готовой смесью газов из баллона, — по двум точкам, но там от газоанализатора требуется показывать ноль в чистом воздухе и пищать при превышении пдк.
      Второй вариант иметь уже откалиброванный датчик и по нему калибровать второй.
  • 0
    У Wemos D1 есть новая ревизия R2, может она не зависает, закажу себе такую.
    • 0
      Все сводится к SDK от китайцев. Все глюки в ней, а не с железом.
  • 0
    Недавно получил посылку с MH-Z19. Пытаюсь считывать данные через UART, первые пакеты выдает правильно, даже контрольная сумма в порядке. А через некоторое время начинает выдавать полный бред после заголовка и кода команды, даже "разогреться" не успевает. При это PPM без проблем. Кто-нибудь с таким сталкивался?
    • 0
      Вероятно, вы имели в виду — "pwm без проблем"?
      Не, у меня всё в порядке, проверяю каждый раз нулевой байт и команду (с контрольной суммой как-то не сложилось), ну и собственно данные хорошие.
      Нулевой байт и код команды у вас правильные, да? Проблема только с данными?
      С напряжением всё в порядке? Стабильное 5v без конкурентов? Может быть, неправильный тип переменной / переполнение стека в какой-то момент?
      • 0
        Да, PWM. Вечером ещё раз всё перепроверю, в т.ч. с вольтметром и отпишусь.
        • 0
          Выложите так же фрагмент кода, может быть смогу помочь, если в нём ошибка.
      • 0
        Проверил.
        Питание — 4.8v на MH-Z19, плата Particle Photon.
        Контрольная сумма перестает совпадать почти сразу, но сами значения в порядке. Возможно резкие скачки до 65 тысяч были из-за резкого перепада температуры, когда я тестировал в первый раз.

        код
        `
        byte readCommand[]={0XFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};

        char packet[9];
        char j;
        char checksum;
        
        void setup() {
        Serial.begin(9600);
        Serial1.begin(9600);
        }
        
        void loop() {
            Serial1.write(readCommand, 9);
            Serial1.readBytes(packet, 9);
        
            int high = (int) packet[2];
            int low = (int) packet[3];
            int ppm = 256 * high + low;
        
            for( j = 1; j < 8; j++)
            {
                checksum += packet[j];
            }
            checksum = 0xff - checksum;
            checksum += 1;
        
            if(checksum == packet[8]){
                Serial.println("OK");
            }
        
            Serial.println(ppm);
            delay(5000);
        }

        `

        • +1
          Да, у меня код проверки контрольной суммы был идентичный, что логично так как писали по одному даташиту.
          Только объявите лучше переменную j числовым типом, а то странно цикл с прибавлением char выглядит. И у меня тоже не сошлось с контрольной суммой, так что проверка выглядит так:

          if (response[0] != 0xFF)
            {
              Serial.println("Wrong starting byte from co2 sensor!");
              return -1;
            }
          
            if (response[1] != 0x86)
            {
              Serial.println("Wrong command from co2 sensor!");
              return -1;
            }

          При первом опросе датчика у меня вываливалось какое-странное число в районе 65000, но все последующие выдавали корректные значения. Так что думаю, что вы тоже можете обойтись без проверки контрольной суммы. И лучше давайте датчику сначала прогреться секунд 10 (в даташите написано про 3 минуты, но везде используют 10 секунд, и мне тоже хватало).
          • 0
            Похоже только так и получится. Ну и думаю, буду отсекать всё, что выше 5000 и ниже 370.
            • 0
              Лучше ниже 300. Около 350-380 всё же бывает в особо удачных районах вроде Ясенево при открытой форточке.
  • 0
    Спасибо за статью! Можно ссылку на библиотеку для работы Arduino с Telegram?
    • 0
      Пока что сам не пробовал, но вот что-то похожее.
      • 0
        К сожалению, ссылки на примеры дают 404 ошибку ((

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.