Категории

Датчик CO2 MH-Z19B: как измерить углекислый газ в квартире у МКАДа

2025-09-30 09:28:51 | Статья из категории: IOT умный дом

Датчик CO2 MH-Z19B и подключение к есп32

Если вы живёте в городской квартире — особенно в новостройке у МКАДа с плотно закрывающимися окнами и слабой вентиляцией — уровень углекислого газа (CO₂) может быстро расти. Головная боль, сонливость, снижение концентрации — частые спутники «затхлого» воздуха. Датчик MH-Z19B позволяет точно измерить концентрацию CO₂ и автоматизировать проветривание или включение бризера.

Что такое MH-Z19B?

MH-Z19B — это компактный NDIR-датчик (Non-Dispersive Infrared) для измерения концентрации углекислого газа в диапазоне 0–5000 ppm. В отличие от «оценочных» датчиков вроде SGP30 (который даёт eCO₂), MH-Z19B измеряет CO₂ напрямую и точно.

Это один из самых популярных и доступных датчиков для DIY-проектов мониторинга воздуха.

Что измеряет и зачем это нужно?

В условиях Москвы у МКАДа:

MH-Z19B поможет понять: «Пора открывать окно?» — объективно, по цифрам.

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

Важно: MH-Z19B — это НЕ датчик угарного газа!

Он измеряет только углекислый газ (CO₂), а не угарный (CO). Для контроля CO нужны другие сенсоры (электрохимические). MH-Z19B не спасёт от отравления газом — только от «затхлости».

Подключение к ESP32

Используем UART-интерфейс (самый надёжный способ).

Почему нужен делитель напряжения?

MH-Z19B работает от 5 В и выдаёт на TxD сигнал 5 В TTL. ESP32 — 3.3-вольтовый и не выдерживает 5 В на входе. Без защиты можно повредить чип.

Как сделать делитель:

Результат: 5 В → ~3.3 В (безопасно).

Альтернатива: используйте модуль уровня, например HW-221 (TXS0108E) — он отлично подойдёт.

Формат данных (UART)

Пакет: 9 байт

[0] 0xFF
[1] 0x86
[2] высокий байт CO₂
[3] низкий байт CO₂
[4] ... (зарезервировано)
[8] контрольная сумма
  

Пример кода для ESP32 (Arduino IDE)

Используем HardwareSerial для надёжного приёма.

#include <HardwareSerial.h>

HardwareSerial CO2_Serial(2); // RX=16, TX=17

void setup() {
  Serial.begin(115200);
  CO2_Serial.begin(9600, SERIAL_8N1, 16, 17);
  Serial.println("MH-Z19B запущен");
}

void loop() {
  // Запрос измерения
  byte cmd[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
  CO2_Serial.write(cmd, 9);
  delay(100);

  if (CO2_Serial.available() >= 9) {
    byte response[9];
    CO2_Serial.readBytes(response, 9);

    if (response[0] == 0xFF && response[1] == 0x86) {
      // Проверка контрольной суммы
      byte sum = 0;
      for (int i = 1; i < 8; i++) sum += response[i];
      sum = 255 - sum + 1;

      if (sum == response[8]) {
        int co2_ppm = (response[2] << 8) | response[3];
        Serial.print("CO2: ");
        Serial.print(co2_ppm);
        Serial.println(" ppm");
      }
    }
  }
  delay(5000); // Опрос раз в 5 сек
}
  

Калибровка

MH-Z19B поддерживает два типа калибровки:

Чтобы отключить ABC, отправьте команду:

0xFF, 0x01, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86

Советы по эксплуатации

🔧 Ручная калибровка датчика MH-Z19B

Датчик CO₂ MH-Z19B по умолчанию использует автоматическую калибровку (ABC), которая может давать смещение, если устройство никогда не «видело» свежий воздух. Для повышения точности рекомендуется выполнить ручную калибровку на уровне 400 ppm — это концентрация CO₂ в чистом наружном воздухе.

⚠️ Важно! Калибровку нужно проводить только на улице или в хорошо проветриваемом помещении, где вы уверены, что уровень CO₂ близок к 400 ppm. Неправильная калибровка приведёт к постоянной ошибке измерений!

Добавьте в свой скетч следующую функцию и вызовите её один раз (например, в setup()), находясь на свежем воздухе:

// --- РУЧНАЯ КАЛИБРОВКА MH-Z19B НА 400 PPM ---
// Выполняйте ТОЛЬКО на свежем воздухе!
void calibrateMHZ19B() {
  byte calibrateCmd[9] = {0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78};
  CO2_Serial.write(calibrateCmd, 9);
  Serial.println("Команда калибровки отправлена. Уровень CO₂ зафиксирован как 400 ppm.");
}

// В setup() раскомментируйте на время калибровки:
// calibrateMHZ19B();
  

💡 Совет: дайте датчику прогреться 20–30 минут на улице перед калибровкой — это улучшит точность.

Вывод

MH-Z19B — один из лучших вариантов для точного измерения CO₂ в бытовых условиях. Он особенно полезен в городских квартирах с плохой вентиляцией, где «воздух становится тяжёлым» уже через час после закрытия окон. Подключается к ESP32 за 10 минут, работает стабильно годами и даёт объективные данные для автоматизации микроклимата.

Главное — не забудьте про делитель напряжения или level converter, и ваш ESP32 останется цел!

Комментарии

Джон Конор 30.09.2025 17:00
HW-221 (TXS0108E) — он отлично подойдёт. нейронка не учла что китайское фуфло без подтяжки резистором не работает 4.7 кОм от LV к 3.3 В и 4.7 кОм от HV к 5 В. Ну и может вообще верхногами припаян чип быть, 1 из 5 рабочий и все в таком духе ) я чет не стал парится использую level converter MH

Оставить комментарий

← Назад к списку статей

Важно: Блог-эксперимент

Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


кто я | книга | контакты без контактов

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA