0
КОРЗИНА
0 ТОВАРА
 Датчик углекислого газа (CO2), MH-Z19B для Arduino ардуино
 Датчик углекислого газа (CO2), MH-Z19B для Arduino ардуино

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

Уровень СО2 по принципу недисперсионного инфракрасного излучения (NDIR) Подробнее...
Модификация
В наличии: 4 шт. Артикул: # 1003
3046 ₽
Возможен безналичный расчёт для юридических лиц при оформлении заказа
Сообщить о поставке на e-mail:
{{ status }}
  • В наличии и готов к отправке!
  • Доставка товаров по России, Белоруссии, Казахстану
  • Возможен безналичный расчёт для юридических лиц при оформлении заказа
Количество:
Перейти в корзину и оформить заказ.
Telegram
WhatsApp
Обсудить вопросы приобретения, не технические!
*Доступно общение только текстовыми сообщениями, звонки и аудио сообщения не обслуживаются
Офлайн
Описание товара
Подробное описание товара

Общие сведения

Датчик углекислого газа 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
0xFF0x010x860x000x000x00
0x00
0x00
0x79

Приём

Байт 0Байт 1Байт 2Байт 3Байт 4Байт 5Байт 6Байт 7Байт 8
0xFF0x86HIGHLOW----
--
--
0х79
  • 0х87 — Калибровка нуля — используйте этот режим для калибровки в бытовых условиях (400ppm)

Пример:

Отправка

Байт 0Байт 1Байт 2Байт 3Байт 4Байт 5Байт 6Байт 7Байт 8
0xFF0x010x870x000x000x00
0x00
0x00
CRC
  • 0х88 — Калибровка в заданном диапазоне измерений — используйте этот режим для калибровки диапазона, указав значение диапазона в HIGH (3) и LOW (4) байтах;

Пример:

Отправка

Байт 0Байт 1Байт 2Байт 3Байт 4Байт 5Байт 6Байт 7Байт 8
0xFF0x010x88HIGHLOW0x00
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
0xFF0x010x88HIGHLOW0x00
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
0xFF0x010x990х000х000х000х07
0хD0CRC

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

Отправка

Байт 0Байт 1Байт 2Байт 3Байт 4Байт 5Байт 6Байт 7Байт 8
0xFF0x010x990х000x000x000x13
0x88CRC

CRC

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

char getCheckSum(char *packet) {
char i, checksum;
for( i = 1; i < 8; i++){
 checksum += packet[i];
}
checksum = 0xff – checksum;
checksum += 1;
return checksum;
}

Более подробную информацию вы найдёте в DataSheet'ах (на английском v1.0 от 21/01/16 и на китайском v1.3 от 08/12/2017).

Примеры

Вывод значений датчика в Монитор последовательного порта и на LED-индикатор 

#include <SoftwareSerial.h>                                                // подключаем библиотеку SoftwareSerial
#include <iarduino_4LED.h>                                                 // подключаем библиотеку iarduino_4LED
SoftwareSerial co2Serial(3, 2);                                           // объявляем объект для работы с функциями библиотеки SoftwareSerial, с указанием выводов ( RX, TX )
iarduino_4LED dispLED(4, 5);                                              // объявляем объект для работы с функциями библиотеки iarduino_4LED, с указанием выводов дисплея ( CLK , DIO )

byte getCheckSum(char *packet) {                                          // функция проверки контрольной суммы
  byte i;                                                                 // создаём переменную для счёта
  unsigned char checksum = 0;                                             // создаём переменную для значения контрольной суммы
  for (i = 1; i < 8; i++) {                                               // считаем контрольную сумму по принятому в массив response значению
    checksum += packet[i];                                                // суммируем все байты массива
  }
  checksum = 0xff - checksum;                                             // вычитаем сумму байтов из 255 (0xff)
  checksum += 1;                                                          // прибаляем к сумме 1
  return checksum;                                                        // возвращаем значение контрольной суммы принятого значения с датчика
}

void setup() {
  Serial.begin(9600);                                                     // инициируем подключение монитора последовательного порта на скорости 9600 бит/сек
  co2Serial.begin(9600);                                                  // инициируем подключение по последовательному порту на скорости 9600 бит/сек
  dispLED.begin();                                                        // инициируем LED дисплей
}

void loop() {
  byte cmd[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};   // массив под запрос значений датчика
  byte response[9];                                                       // массив под полученный ответ от датчика
  Serial.println("Sending CO2 request...");                               // выводим текст в монитор порта "Запрос значений..."
  co2Serial.write(cmd, 9);                                                // отправляем команду датчику сформировать 9-байтовое значение
  memset(response, 0, 9);                                                 // обнуляем массив
  int i = 0;                                                              // создаём переменную для счёта секунд
  while (co2Serial.available() == 0) {                                    // пока данные не приняты
    //    Serial.print("Waiting for response ");                          // выводим в монитор порта текст "Ожидание получения ответа"
    //    Serial.print(i);                                                // выводим количество секунд
    //    Serial.println(" s");                                           // выводим текст "секунд"
    delay(1000);                                                          // ждём 1 секунду
    i++;                                                                  // увеличиваем значение на 1
  }
  if (co2Serial.available() > 0) {                                        // если данные приняты, то
    co2Serial.readBytes(response, 9);                                     // считваем их в массив
  }
  for (int i = 0; i < 9; i++) {                                           // считываем 9 байт, принятых от датчика
    Serial.print(String(response[i], HEX));                               // выводим их в монитор порта
    Serial.print("   ");                                                  // через пробел
  }
  Serial.println("");                                                     // переходим на новую строку
  byte check = getCheckSum(response);                                     // выполняем проверку контрольной суммы
  if (response[8] != check) {                                             // если значение отправленное и полученное контрольной суммы не совпадает, то
    Serial.println("Checksum not OK!");                                   // выводим сообщение в монитор порта об этом
    Serial.print("Received: ");                                           // выводим текст в монитор порта "Принято:"
    Serial.println(response[8]);                                          // выводим байт контрольной суммы, который был принят
    Serial.print("Should be: ");                                          // выводим текст "Должно быть" (было отправлено)
    Serial.println(check);                                                // выводим байт контрольной суммы, который был отправлен
  }
  int ppm_uart = 256 * (int)response[2] + response[3];                    // вычисляем значение CO2
  Serial.print("CO2 Level = ");                                           // выводим текст в монитор последовательного порта "Уровень СО2:"
  Serial.println(ppm_uart);                                               // выводим значение СО2 в монитор порта
  dispLED.print(ppm_uart);                                                // выводим значение СО2 на дисплей
  byte crc[9] = {};                                                       // обнуляем байт контрольной суммы
  delay(5000);                                                            // ждём 5 секунд
}

Комплектация

  • 1х Датчик углекислого газа MH-Z19B;

Ссылки

Товары
Первой необходимости и другие вещи, которые могут пригодиться!
В наличии осталось 1 шт.
Датчик качества воздуха CCS811, VOC, eCO2: Определяющий значение eCO2 и значение летучих органических веществ в воздухе (TVOC), Подробнее
1916
В наличии
Аналоговый термометр (Trema-модуль): Позволит измерять температуру окружающей среды. Подробнее
292
В наличии осталось 4 шт.
Датчик углекислого газа (CO2), MH-Z19B: Уровень СО2 по принципу недисперсионного инфракрасного излучения (NDIR) Подробнее
3046
В наличии
IMU-сенсор на 9 степеней свободы (Trema-модуль): Определять своё положение в пространстве, а так же угловое ускорения, угловую скорость и индукцию магнитного поля Подробнее
1190
В наличии
308
Скоро в продаже
Датчик минерализации (TDS/EC-метр) с дисплеем, RS485 / Modbus: Датчик имеет гальваническую развязку и дисплей Подробнее
3390
В наличии
Датчик касания Roborace: Сенсор для определения препятствия путём физического контакта машинки Roborace с преградой Подробнее
390
В наличии
83
В наличии
Ультразвуковой дальномер HC-SR04: Сенсор определения расстояния до 4 м по отраженному звуковому сигналу Подробнее
160
В наличии осталось 5 шт.
Датчик температуры DS18B20+: Требует только один порт для связи. Подробнее
140
В наличии
16
В наличии осталось 7 шт.
2490
Скоро в продаже
Датчик пыли GP2Y1010AU0F—SHARP: Предназначен для обнаружения мельчайших частиц пыли в воздухе Подробнее
608
Скоро в продаже
Датчик освещенности и приближения APDS-9930: Определит близость объектов (препятствий) и уровень освещённости в Lux Подробнее
389
Или перейти в корзину и оформить заказ.
Гарантии и возврат Используя сайт Вы соглашаетесь с условями
Есть вопрос?