Приветствую всех читателей Habr. Время от времени я выкладываю в открытый доступ некоторые свои проекты по электронике. В эти майские праздники я подготовил для всех любителей что-то собрать своими руками достаточно интересный проект бытового zigbee-датчика мониторинга углекислого газа с LCD-дисплеем. Это неплохо проработанный проект, ничем не уступающий фабричным аналогам, да и по многим параметрам и функциональности гораздо превосходящий их.



Уже, похоже, по традиции в начале статьи хочу объявить о майском розыгрыше 5 собранных таких датчиков, который пройдет в моем телеграм-канале o DIY устройствах. С условиями участия в розыгрыше можно ознакомиться здесь. Дата проведения розыгрыша — 31 мая. В этом розыгрыше призы достаточно стоящие, а шансы поймать удачу за хвост совсем не маленькие.

Коротко опишу возможности устройства.

Датчик передает в сеть данные об уровне CO2, температуре и влажности воздуха. На дисплей помимо вывода уровня CO2 также выводится график уровня углекислого газа за последние 24 часа.

Датчик является роутером сети Zigbee. Датчик работает по сети Zigbee. Настройка времени происходит автоматически. На дисплей выводится текущие дата и время.

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

Датчик оснащен функционалом газостата. Вы можете задать уровни CO2 (верхний и нижний), привязать (биндинг) датчик к исполнительному Zigbee-устройству, реле или розетке, и датчик при переходе через пороги будет отправлять команды на включение или отключение на привязанное исполнительное устройство. Такая привязка будет работать, даже если контроллер умного дома или координатор Zigbee-сети будут недоступны.

В датчике реализован календарь событий, в определенные дни логотип Zigbee заменяется на логотип с событием, например, Новый год, количество добавленных событий не раскрывается, предлагается найти самостоятельно эти пасхалки :).


Файлы для заказа плат, 3D-модели корпуса, прошивка для устройства находятся на моем GitHub.

Этот проект родился в 2022 году, хотя тогда речь не шла о конкретно датчике мониторинга CO2, мне просто очень хотелось сделать какой-то проект с использованием дисплеев, которые применялись в легендарных телефонах Nokia. Купил на «Алиэкспрессе» модули с этими дисплеями, сел реализовывать драйвер, так и начался проект.


Идея добавить RGB-подсветку возникла сразу, я даже не рассматривал вариант с обычной одноцветной LED-подсветкой, даже еще не приняв в тот момент решение, о чем вообще будет этот проект. Конструктив дисплея, где подсветка реализуется независимо, недвусмысленно намекал сделать её чуть нестандартно.

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


Датчик работает на soc сс2530, в проекте использован радиомодуль от китайской компании EBYTE, E18-MS1PA2-PCB.


Помимо сенсора CO2 MH-Z19, в проект добавлен сенсор температуры и влажности воздуха HTU21D.

Датчик состоит из двух плат, базовая плата, где расположен радиомодуль, питание, кнопки управления, и плата дисплея с дополнительными сенсорами. По типу это модульная система, и плата дисплея, и сенсор углекислого газа подключаются к базовой плате при помощи штырьевых разъемов.
Обе платы достаточно просто спаять вручную паяльником. Немного трудно будет припаять 6-пиновые двурядные штырьевые разъемы с шагом 1,27.


Из особенностей обращу ваше внимание на положение штырьевых разъемов, которые необходимо припаять на сенсор MH-Z19, на фото ниже показано, с какой стороны сенсора их нужно припаивать.


Компонентов, которые нужно напаять на платы, немного, на базовой плате список из 13 компонентов, а на плате с дисплеем их 11. Электронная схема проекта — посмотреть.




В корпус сам датчик можно вставить уже собранным или по частям, сначала вставив плату с дисплеем. К корпусу плата модуля с дисплеем фиксируется двумя винтами, базовая плата с подключенным датчиком СО2 крепится уже на модуле с дисплеем.


Модели корпуса можно распечатать на любом типе бытовых 3D-принтеров, я их печатал и на FDM-принтерах, и на SLA-принтерах. Также печать моделей корпуса можно заказать в Китае, например, на сайте JLCPCB, рекомендую MJF или SLS-печать.

На FDM-принтере корпус печатается без поддержек, печать занимает не более одного часа.
Рекомендую использовать при печати на FDM-принтерах PET_PEO покрытия для печатного стола, это как будто специально придумано для печати корпусов.


Для прошивки устройства необходимо подключить базовую плату к SmartRF04EB или CC-Debuger и прошить через программу SmartRF Flash Programmer v1.


Опишу функциональность устройства.

Основные данные:

CO2
Уровень углекислого газа

Temperature
Измеренное значение с встроенного сенсора температуры

Humidity
Измеренное значение с встроенного сенсора влажности воздуха

Linkquality
Качество связи (мощность сигнала) *1

*1 Качество связи, свойство которое не передается датчиком, а расчитывается координатором сети на основе оценки полученных данных.

Конфигурационные данные:

Backlight
Включение rgb подсветки дисплея.

Night backlight
Полное отключение подсветки в ночном режиме, по умолчанию деактивировано

Night backlight on
Время активации ночного режима

Night backlight off
Время отключения ночного режима

Contrast
Регулировка контрастности lcd дисплея

Temperature offset
Отрегулировать температуру внутреннего сенсора температуры, шаг 0.1 градус

Humidity offset
Отрегулировать влажность воздуха внутреннего сенсора влажности, шаг 1 процент

Forced_recalibration
Форсированная ручная калибровка. Калибровка осуществляется на свежем воздухе, необходимо оставить датчик на чистом воздухе на 60 минут, по истечении этого времени отправить команду. Время калибровки примерно 5 секунд, после завершения калибровки точке соответствующей чистому воздуху будет задано значение в 400ppm. Датчик отправит команду «выключено» по завершению калибровки

Automatic self calibration
Автоматическая самокалибровка реализованная производителем в серии датчиков MH-Z19. На дисплее выводится индикация режима работы сенсора. *1

Co2 error read
Количество неудачных попыток чтения сенсора MH-Z19

Enable_gas
Включение функционала газостата. Управление реле к которому привязан датчик. Для работы данного функционала необходимо сделать привязку к исполнительному устройству(реле, розетки)

Invert_logic_gas
Инвертирует логику работы управления исполнительными устройствами. Пример. Если опция отключена, при превышение верхнего заданного порога углекислого газа датчик отправит команду «Включить» на привязанное реле. Если опция включена, при превышение верхнего заданного порога углекислого газа датчик отправит команду «Выключить» на привязанное реле.

High_gas
Верхний порог углекислого газа

Low_gas
Нижний порог углекислого газа


*1 индикация режима работы автоматической калибровки


Работа в сети Zigbee.

Для работы устройства в сети zigbee через zigbee2mqtt необходимо установить внешний конвертер. Конвертер вы можете скачать на моем гитхаб. Чуть позже конвертер будет добавлен в основную базу.


Ввод в сеть (JOIN)
Чтобы подключить датчик к сети, координатор должен быть включен для приема новых устройств. После этого нужно удерживать нажатой кнопку на датчике около 5 секунд, на дисплее появится сообщение о начале входа в сеть.

Удаление из сети (LEAVE)
Чтобы отключить датчик от сети zigbee, удерживайте нажатой кнопку на датчике около 10 секунд, и на дисплее появится сообщение о выходе из сети zigbee.

Конфигурация отчетов Zigbee2mqtt (Report configuration)
Для конфигурации отчетов необходимо перейти на вкладку «Отчеты», и внести изменение в поля «Мин. интервал отчетов», «Макс. интервал отчетов», «Мин. интервал отчетов при изменении».

Мин. интервал отчетов — время, через которое будет отправлен новый отчет, при условии что новые значение изменилось в любую сторону, на величину указанную в поле «Мин. интервал отчетов при изменении», в сравнении с пердыдушими значениями. Указывется время в секундах.

Макс. интервал отчетов — время, через которое будет отправлен новый отчет, при условии что значения не менялись на величину больщую той которая уазана в поле «Мин. интервал отчетов при изменении». Указывется время в секундах.

Мин. интервал отчетов при изменении — Величина изменения данных. Для каждого типа данных указывается в своем формате, например для температуры 1 отзанчает 0.01°C, так как данные передаются типом интегер16, например температура 22.54°C, будет передана датчиком так 2254.


Привязка датчика EFEKTA Pixel Open Air к исполнительному устройству, реле, розетке (Binding)
Осуществляется на стороне датчика EFEKTA Pixel Open Air. Для привязки (биндинг) датчика EFEKTA Pixel Open Air к исполнительному устройству, для прямой передачи данных необходимо в веб интерфейсе zigbee2mqtt перейти на страницу датчика EFEKTA Pixel Open Air и далее на вкладку «Связь».

В первом поле слева выбрать «1», в следующем поле, в выпадающем списке выбрать исполнительное устройство к которому необходимо сделать привязку, в следующем поле ввести номер кластера на реле. Правее выбрать кластер OnOff. Еще правее нужно нажать на кнопку «Связать».




Идентификация (Identify)
Идентификация устройсва осуществляется отправкой команды identify time. Сразу после отправки команды датчик выведет на дисплей приветствие, по которому можно будет легко идентифицировать устройство.




Технические характеристики:

  • Модель: Pixel Open Air
  • Протокол: ZigBee 3.0
  • Радиомодуль: EBYTE E18-MS1PA1-IPEX (20 dbm)
  • Основной сенсор: MH-Z19 (CO2)
  • Дополнительный сенсор: HTU21D (Температура и влажность воздуха)
  • Дисплей: цветной LCD, разрешение 84х48
  • Размеры корпуса: 4 × 5.5 × 1.8 см
  • Диапазон измерения углекислого газа: 400-10000, точность в диапазоне 400-2000 ±(50 ppm + 5% от показания)
  • Cенсор температуры: -40°C ~ + 125 °C
  • Точность: 0.2°C
  • Cенсор влажности воздуха, диапазон: -0% — 100%
  • Точность: 2%
  • Питание: USB Type C (поддерживается работа с БП с протоколами быстой зарядки)


ГитХаб проекта — github.com/smartboxchannel/EFEKTA_Pixel_Open_Air

Вот такой проект датчика мониторинга углекислого газа получился в итоге. Если вы дочитали статью об этом проекте zigbee датчика до конца, то рекомендую добавиться в самое большое русскоязычное сообщество в Телеграм по тематике Zigbee — Вокруг да около Zigbee.
Всем добра, спасибо за внимание!..

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


  1. R2D2_V2
    04.05.2024 15:20
    +4

    Спасибо что делишься проектами!


  1. GennPen
    04.05.2024 15:20
    +8

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

    9.2 When placed in small space, the space should be well ventilated, especially for diffusion window.


    1. Iv38
      04.05.2024 15:20
      +7

      Да и датчик температуры и влажности тоже установлен не по фен-шую. Если я правильно понял, он располагается спереди прямо под экраном. Датчик крайне чувствительный. Аппноты рекомендуют выносить такие датчики с основной платы или хотя бы отделять тонким перешейком, делая вырез. Ещё лучше располагать его в собственном отсеке корпуса. Даже мизерного тепловыделения хватает, чтобы исказить его показания, а здесь целый экран со светодиодами. В корпусе ещё датчик CO2 с лампой, контроллер и линейный стабилизатор - всё это грелки.


      1. DarkTiger
        04.05.2024 15:20
        +1

        В данном случае грелки способствуют протоку воздуха через девайс (конвективный теплообмен), что положительно сказывается на главном параметре - оперативности измерений текущего уровня CO2 в комнате. А вот зачем там вообще датчик температуры, который стоит на али 1-2$ с ЖКИ и которых можно по стенам хоть десяток развесить - вопрос.
        Но автор художник, он так видит. В конце концов, никто не мешает этот датчик температуры убрать.


        1. Kill_Voice
          04.05.2024 15:20
          +1

          Это вообще прям загадка зачем он там) При условии что MH-Z19 кроме CO2 так же измеряет и температуру. Какая-то в общем странная котлета


          1. GennPen
            04.05.2024 15:20
            +1

            MH-Z19 сам нагревается при работе, если он и выдает температуру в данных, то внутреннюю для контроля, а не температуру окружающего воздуха.


      1. Berkseo Автор
        04.05.2024 15:20


  1. RomanKu
    04.05.2024 15:20

    Очень интересный проект, а подскажите, пожалуйста, как реализована отправка времени на устройство. Это штатная функция ZigBee или в конвертере реализован периодический пинг устройства?


    1. Berkseo Автор
      04.05.2024 15:20
      +1

      Штатный функционал, датчик спрашивает локал тайм, получает ответ.


  1. Mogwaika
    04.05.2024 15:20

    А где сам код проекта, я что-то не нашёл?..


    1. Narakot
      04.05.2024 15:20
      +2

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

      Совсем обленились ))))


      1. Berkseo Автор
        04.05.2024 15:20
        +1

        Тут не тот случай, на птво такой датчик не сделать, только что то простое, вкл/выкл, передать температуру и т.д.


        1. Narakot
          04.05.2024 15:20

          Значит защита интеллектуальной собственности (читай, личных трудов), ничего не имею против ;)


  1. riky
    04.05.2024 15:20
    +2

    На esphome ведь есть поддержка этого датчика? У зигби преимущество в низком потреблении, но тут все равно не батарейное питание


    1. GennPen
      04.05.2024 15:20

      Автономное питание с таким жрущим CO2-датчиком нет смысла организовывать, только в качестве резервного питания.


      1. riky
        04.05.2024 15:20
        +1

        обычно wifi и так стараются покрыть всю площадь квартиры (репитеры и тд), так что и esp почти всегда есть чем зацепиться за сеть.


  1. voldemar_d
    04.05.2024 15:20

    Простите, если вопрос дурацкий. Если представить, что я собрал такое устройство, как проверить, правильно ли он определяет CO2?


    1. Berkseo Автор
      04.05.2024 15:20

      Здравствуйте, вынесите на свежий воздух и сделайте калибровку.


      1. voldemar_d
        04.05.2024 15:20
        +1

        Я немного не про то. Ну сделал я калибровку, допустим. Как создать условия повышенной концентрации CO2, и проверить, что датчик правильно эту концентрацию детектирует?

        Или он умеет только показывать "мало/много"?


        1. DarkTiger
          04.05.2024 15:20

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


          1. voldemar_d
            04.05.2024 15:20

            нажал на кнопку подачи газа на ней

            Зажигалка подает углекислый газ?

            Мда, так и хочется таким образом поверенному устройству свою жизнь доверить.


            1. DarkTiger
              04.05.2024 15:20

              Я не писал про углекислый газ. Метан, конечно.

              Мда, так и хочется таким образом поверенному устройству свою жизнь доверить.

              Никто не мешает вызвать нормальную поверку. Но для подписи протокола испытаний этого достаточно. А без протокола пакет документов будет неполным и разрешение на пуск газа не дадут.
              Более того, с меня за эту операцию вначале 10000р потребовали. Когда я потратил минуту, нагуглил за 3000 и показал проверяющим экран на телефоне, мне сказали "демпингуют, сволочи, и ничего с ними сделать нельзя, ладно, давайте за 3000".
              Это Подмосковье, и это Мособлгаз. Понимающему, как говорится, достаточно.


              1. voldemar_d
                04.05.2024 15:20

                В статье речь про датчик углекислого газа, а не метана.


          1. Mogwaika
            04.05.2024 15:20

            Ложноположительные срабатывания допустимы?
            Порог нормальных срабатываний +/- километр?


        1. Iv38
          04.05.2024 15:20

          Если очень хочется, то можно упороться. Например взять навеску сухого льда, поместить в ёмкость с уличным воздухом, концентрация CO2 в котором достаточно стабильна, рассчитать полученную после сублимации навески концентрацию углекислого газа и измерить её датчиком. Правда в кубометре воздуха углекислого газа около полуграмма - с такими порядками величин придётся работать, а это уже непросто в домашних условиях. Но практически это не очень и нужно. Точность у них достаточная для оценки концентрации, а большего обычно и не требуется.


          1. voldemar_d
            04.05.2024 15:20

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


  1. zhakuy
    04.05.2024 15:20
    +2

    Два вопроса:

    1. Добавлен ли датчик в умные устройства яндекс для быстрого определения и исключения танцев с бубном?

    2. Может он и показывает какие-то данные, но насколько они правдивые и можно ли им доверять? Были какие-то испытания и сравнения с эталоном? Это зависит не только от параметров самого датчика, но и от целостности сигнала внутри модуля и с постобработкой данных с датчика.


    1. Berkseo Автор
      04.05.2024 15:20

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

      Данные достаточно достоверные, технология используемая в датчиках mh-z19 проверена временем, датчики мониторинга со2 основанные на NDIR наиболее распространены. Целостность сигнала проверяется контрольными суммами, постобработка данных отсутствует, это не аналоговый датчик, он не требует накопления, усреднения, фильтрации и применения алгоритмов сглаживания на стороне мк . Данные читаются с сенсора, выводятся на дисплей и отправляются в сеть.


  1. Owalsky
    04.05.2024 15:20

    А почему шнур питания сбоку, это же оченьнеудобно....


  1. Anyuta1166
    04.05.2024 15:20

    Тоже использую датчик на основе MH-Z19. Вот проблема. Первые несколько месяцев показания были весьма правдоподобны - откроешь окно - 400 ppm, закроешь окно - постепенно повышается, если долго сидеть с закрытым окном повышается до 1000 и больше. Однако потом начались странности - датчик стал практически постоянно показывать 400. При этом если подышать на него - реагирует резким повышением. Попытка откалибровать путем вынесения датчика за окно на некоторое время ни к чему не привела. Это как-то лечится, или только покупкой новых датчиков раз в год?