Всем здравствуйте!
Ничего не нашел на форуме вот по этому датчику:
Датчик углекислого газа (CO2), MH-Z19B
Общие сведения
Датчик углекислого газа 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
(цена прямо-таки нечеловеческая, на Али раза в два дешевле)
В связи с чем вопрос: какой из блоков в программе лучше подойдет для вывода данных с этого датчика?