Датчик углекислого газа (CO2) MH-Z19B

MH-Z19B

Использование прочих датчиков и энкодеров и пользовательских блоков к ним
Ответить
Dragony
Сержант
Сообщения: 133
Зарегистрирован: 02.01.2020{, 11:55}
Репутация: 2
Имя: Александр

Датчик углекислого газа (CO2) MH-Z19B

#1

Сообщение Dragony » 18.02.2024{, 16:11}

Всем здравствуйте!
Ничего не нашел на форуме вот по этому датчику:
Датчик углекислого газа (CO2), MH-Z19B
Screenshot 2024-02-18 at 18-09-05 Датчик углекислого газа (CO2) MH-Z19B.png
Общие сведения

Датчик углекислого газа MH-Z19B — датчик, который детектирует уровень СО2 по принципу недисперсионного инфракрасного излучения (NDIR). Данный датчик имеет внутреннюю температурную компенсацию, может подключаться по 3-м интерфейсам (аналоговый, ШИМ, UART), имеет малые размеры и большой срок службы.

Приблизительные нормы содержания уровня CO2 в помещениях:
Уровень CO2, ppm
Качество воздуха
300-400 Эталонное качество воздуха
400-600 Нормальное качество воздуха
600-800 Среднее качество воздуха
800-1000 Предельно допустимое качество воздуха
Свыше 1000 Низкое качество воздуха
Свыше 2000 Критически низкое качество воздуха

Характеристики

Рабочее напряжение: от 4.5В до 5В
Потребление тока: <60мА (150мА в пиковой нагрузке)
Диапазон измерений: 0~5000ppm
Интерфейс: UART (3.3В) / ШИМ (3.3В, толерантен к 5В)
Время прогрева датчика: 3мин
Рабочая температура: от 0 до 50℃
Влажность: от 0 до 95%
Вес: 5г

Подключение

Датчик подключается по шине UART.

Vcc — 5В
GND — Земля
RX — подключается к любому порту, указанному в скетче (TX)
TX — подключается к любому порту, указанному в скетче (RX)

На плате Arduino UNO напряжение на выходах TX и RX равно 5В. Напряжение на входах TX и RX датчика не должно превышать 3,3В. В связи с этим подключение необходимо производить через делитель напряжения.

Для делителя напряжения Вам понадобятся резисторы номиналом 470 Ом и 1 кОм. Соберите Вашу схему так, как показано на схеме:
Изображение
Питание

Входное напряжение питания от 4.5В до 5В постоянного тока, подаётся на выводы VCC и GND модуля.
Подробнее о датчике
Управляющие команды

Датчик имеет несколько режимов работы, которые зависят от управляющего байта:

0х86 — Прочитать данные с датчика — считывает значения с датчика, где в HIGH (3) и LOW (4) байтах указаны значения CO2;

Пример: (криво вставилось :) )

Отправка
Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
0xFF 0x01 0x86 0x00 0x00 0x00
0x00
0x00
0x79

Приём
Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
0xFF 0x86 HIGH LOW -- --
--
--
0х79

0х87 — Калибровка нуля — используйте этот режим для калибровки в бытовых условиях (400ppm)

Пример:

Отправка
Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
0xFF 0x01 0x87 0x00 0x00 0x00
0x00
0x00
CRC

0х88 — Калибровка в заданном диапазоне измерений — используйте этот режим для калибровки диапазона, указав значение диапазона в HIGH (3) и LOW (4) байтах;

Пример:

Отправка
Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
0xFF 0x01 0x88 HIGH LOW 0x00
0x00
0x00
CRC

где HIGH и LOW для 5000ppm считаются по формуле: HIGH = 5000 / 256; LOW = 5000 % 256;

0х79 — Вкл/Выкл Автоматическую калибровку датчика — при отсутствии необходимости, режим автокалибровки можно отключить, указав в (3) байте 0хА0/0х00 (Вкл/Выкл);

Пример:

Отправка
Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
0xFF 0x01 0x88 HIGH LOW 0x00
0x00
0x00
CRC

0x99 — Установить диапазон измерений (2000ppm; 5000ppm) — выбор диапазона измерений. Указывается в (6) и (7) байтах в 16-ной кодировке. (2000 = 07D0; 5000 = 1388)

Пример:

Диапазон задаётся в (6) и (7) байтах.

Для диапазона 2000ppm (2000 в 10-ной кодировке = 07D0 в 16-ной кодировке):

Отправка
Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
0xFF 0x01 0x99 0х00 0х00 0х00 0х07
0хD0 CRC

Для диапазона 5000ppm (5000 в 10-ной кодировке = 1388 в 16-ной кодировке):

Отправка
Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
0xFF 0x01 0x99 0х00 0x00 0x00 0x13
0x88 CRC
CRC

Во всех командах в последнем (8) байте указана контрольная сумма - CRC. Для её подсчёта используется указанная производителем функция.

Больше информации смотрите здесь: https://iarduino.ru/shop/Sensory-Datchi ... -z19b.html
(цена прямо-таки нечеловеческая, на Али раза в два дешевле)

В связи с чем вопрос: какой из блоков в программе лучше подойдет для вывода данных с этого датчика?

Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 335
Имя: Владимир

Датчик углекислого газа (CO2) MH-Z19B

#2

Сообщение rw6cm » 18.02.2024{, 18:08}

Dragony писал(а):
18.02.2024{, 16:11}
Ничего не нашел на форуме вот по этому датчику:
Найдено 34 результата: MH-Z19b
Win10-64, FLProg (portable)

fefar51702
Рядовой
Сообщения: 51
Зарегистрирован: 26.06.2022{, 07:35}
Репутация: 2
Имя: Валера

Датчик углекислого газа (CO2) MH-Z19B

#3

Сообщение fefar51702 » 18.02.2024{, 20:28}

самый адекватный это читать шим сигнал
берите быстрый щётчик измеряйте импульсы смотрите даташит периода и делите
но лучше с буквой С покупать они вроде как получше

Dragony
Сержант
Сообщения: 133
Зарегистрирован: 02.01.2020{, 11:55}
Репутация: 2
Имя: Александр

Датчик углекислого газа (CO2) MH-Z19B

#4

Сообщение Dragony » 22.02.2024{, 19:44}

Спасибо, попробую, когда получу заказ с Али.

Dragony
Сержант
Сообщения: 133
Зарегистрирован: 02.01.2020{, 11:55}
Репутация: 2
Имя: Александр

Датчик углекислого газа (CO2) MH-Z19B

#5

Сообщение Dragony » 23.02.2024{, 20:33}

Стал разбираться с блоками. Никак не пойму, где именно задаются номера выводов RX-TX? В самих блоках, или где-то еще?
"Номера контактов контроллера можно задать в SoftwareSerial mySerial." - это значит, что ввести свои данные здесь:
"SoftwareSerial mySerial(RX, TX); // RX - к tx сенсора, TX - к rx сенсора." в скобках?
Или как?
Такими подробностями раньше не занимался, так что прошу снисхождения. :)

Dragony
Сержант
Сообщения: 133
Зарегистрирован: 02.01.2020{, 11:55}
Репутация: 2
Имя: Александр

Датчик углекислого газа (CO2) MH-Z19B

#6

Сообщение Dragony » 24.02.2024{, 17:22}

//SoftwareSerial espSerial= SoftwareSerial(10,11); // arduino RX pin=10 arduino TX pin=11

Наверное, разобрался... :) Надо поставить номера своего варианта...
Посмотрим, как это все заработает.

Dragony
Сержант
Сообщения: 133
Зарегистрирован: 02.01.2020{, 11:55}
Репутация: 2
Имя: Александр

Датчик углекислого газа (CO2) MH-Z19B

#7

Сообщение Dragony » 30.03.2024{, 19:00}

Датчик подключил, все заработало. Осталось только "утоптать" блоки в корпус.
В проекте не использовал никаких "графиков", пока только время-дата-температура/давление/влажность/СО2.
Думаю, как организовать коррекцию времени/даты "кнопками", пока готовых решений не нашел. Только при подключении блока часов к ноутбуку, а это не очень хорошо... Остается только надеяться, что элемента 2032 хватит надолго. :smile38:

Ответить

Вернуться в «Прочие датчики и энкодеры»