Если вы живёте в городской квартире — особенно в новостройке у МКАДа с плотно закрывающимися окнами и слабой вентиляцией — уровень углекислого газа (CO₂) может быстро расти. Головная боль, сонливость, снижение концентрации — частые спутники «затхлого» воздуха. Датчик MH-Z19B позволяет точно измерить концентрацию CO₂ и автоматизировать проветривание или включение бризера.
Что такое MH-Z19B?
MH-Z19B — это компактный NDIR-датчик (Non-Dispersive Infrared) для измерения концентрации углекислого газа в диапазоне 0–5000 ppm. В отличие от «оценочных» датчиков вроде SGP30 (который даёт eCO₂), MH-Z19B измеряет CO₂ напрямую и точно.
Это один из самых популярных и доступных датчиков для DIY-проектов мониторинга воздуха.
Что измеряет и зачем это нужно?
- CO₂ — в ppm (частях на миллион):
- 400–600 ppm — свежий уличный воздух
- 800–1000 ppm — норма для жилых помещений
- 1000–2000 ppm — дискомфорт, сонливость, снижение продуктивности
- Более 2000 ppm — требуется срочное проветривание
В условиях Москвы у МКАДа:
- Плотные окна → воздух не обновляется
- Много людей в квартире → быстрый рост CO₂
- Работающие кондиционеры → не приток свежего воздуха, а рециркуляция
MH-Z19B поможет понять: «Пора открывать окно?» — объективно, по цифрам.
Технические характеристики
- Диапазон: 0–5000 ppm
- Точность: ±(50 ppm + 3% от измеренного значения)
- Время отклика: ≤ 120 секунд
- Интерфейсы: UART (TTL) и PWM (можно использовать оба)
- Скорость UART: 9600 бод (по умолчанию)
- Питание: 4.5–5.5 В (обязательно 5 В!)
- Потребление: до 150 мА при измерении
Важно: MH-Z19B — это НЕ датчик угарного газа!
Он измеряет только углекислый газ (CO₂), а не угарный (CO). Для контроля CO нужны другие сенсоры (электрохимические). MH-Z19B не спасёт от отравления газом — только от «затхлости».
Подключение к ESP32
Используем UART-интерфейс (самый надёжный способ).
- VIN / VCC → 5 В (обязательно!)
- GND → GND ESP32
- TxD → через делитель напряжения → GPIO16 (RX2)
- RxD → GPIO17 (TX2) — нужно для калибровки и сброса
Почему нужен делитель напряжения?
MH-Z19B работает от 5 В и выдаёт на TxD сигнал 5 В TTL. ESP32 — 3.3-вольтовый и не выдерживает 5 В на входе. Без защиты можно повредить чип.
Как сделать делитель:
- От TxD датчика → резистор 10 кОм → GPIO16
- От GPIO16 → резистор 20 кОм → GND
Результат: 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) — по умолчанию включена. Предполагает, что раз в 24 часа в помещении будет 400 ppm (уличный воздух). В условиях постоянного пребывания в квартире у МКАДа — может исказить показания.
- Ручная калибровка — выключите ABC и калибруйте в заведомо чистом воздухе (например, на балконе в мороз).
Чтобы отключить ABC, отправьте команду:
0xFF, 0x01, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86
Советы по эксплуатации
- Прогрев: первые 3 минуты после включения — нестабильные показания. Полная стабилизация — за 20 минут.
- Не ставьте рядом с дыханием — даже ваше дыхание при настройке исказит данные.
- Питание: используйте отдельный 5 В блок (не от USB-порта ПК), так как пиковый ток — до 150 мА.
- Для умного дома: при CO₂ > 1000 ppm — включайте вытяжку, бризер или открывайте окно (если есть сервопривод).
🔧 Ручная калибровка датчика 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 останется цел!
Комментарии