Приветствую всех читателей 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. Сразу после отправки команды датчик выведет на дисплей приветствие, по которому можно будет легко идентифицировать устройство.
Технические характеристики:
ГитХаб проекта — github.com/smartboxchannel/EFEKTA_Pixel_Open_Air
Вот такой проект датчика мониторинга углекислого газа получился в итоге. Если вы дочитали статью об этом проекте zigbee датчика до конца, то рекомендую добавиться в самое большое русскоязычное сообщество в Телеграм по тематике Zigbee — Вокруг да около Zigbee.
Всем добра, спасибо за внимание!..
Уже, похоже, по традиции в начале статьи хочу объявить о майском розыгрыше 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.
Всем добра, спасибо за внимание!..