Перейти к содержанию

Как отключить автокалибровку MH-Z19C?

Обновлено Редакция GAW

MH-Z19C по умолчанию сам корректирует ноль: через каждые 24 часа после включения он принимает самую низкую концентрацию за этот период за свежий воздух с 400 ppm. В квартире, которую хотя бы раз в сутки проветривают, это работает. В теплице, на ферме или в непроветриваемой комнате минимальный уровень выше 400 ppm, и модуль постепенно занижает показания — Winsen прямо советует выключать функцию в таких местах.

Команда

Все команды MH-Z19C — 9 байт на скорости 9600 бит/с, 8N1. Контрольная сумма по документу — дополнение суммы байтов с 1-го по 7-й, плюс один:

сумма=(0x01+0x79+B3‾)+1=0x100−(0x7A+B3) mod 0x100.\text{сумма} = (\overline{0x01 + 0x79 + B_3}) + 1 = 0x100 - (0x7A + B_3) \bmod 0x100.
ДействиеБайты команды (наш расчёт суммы)
Выключить автокалибровкуFF 01 79 00 00 00 00 00 86
Включить автокалибровкуFF 01 79 A0 00 00 00 00 E6
Прочитать концентрацию (для сравнения, из документа)FF 01 86 00 00 00 00 00 79

Для выключения: 0x01 + 0x79 + 0x00 = 0x7A, 0x100 − 0x7A = 0x86. Для включения: 0x01 + 0x79 + 0xA0 = 0x11A, младший байт 0x1A, 0x100 − 0x1A = 0xE6.

// MH-Z19C on Serial2 (ESP32) or SoftwareSerial (Uno), 9600 8N1
const uint8_t ABC_OFF[9] = {0xFF, 0x01, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86};

void mhz19AbcOff(Stream &port) {
  port.write(ABC_OFF, sizeof(ABC_OFF));   // the module sends no reply
}

После отключения

Без автокалибровки ноль приходится поправлять вручную: вынести модуль на свежий воздух, выдержать больше 30 минут и замкнуть вывод HD на землю не меньше чем на 7 секунд. Winsen рекомендует делать это не реже раза в полгода. Уровни UART модуля — 3,3 В, совместимые с 5 В, поэтому его подключают и к ESP32, и к Arduino; подробности об интерфейсе — в статье «UART».

Тот же принцип самокалибровки есть и у Sensirion SCD4x — чем они отличаются, разобрано в ответе «SCD40 или SCD41». Другие виды контрольных сумм и CRC разобраны в калькуляторе CRC, а остальные параметры MH-Z19C собраны в статье «Датчики газа».

Похожие вопросы

Сохраняется ли настройка после выключения питания?

Документ Winsen этого не уточняет. Надёжнее отправлять команду при каждом запуске программы: она короткая, а модуль на неё всё равно не отвечает.

Как понять, что автокалибровка мешает?

Типичный признак — минимальные показания за сутки упорно держатся около 400 ppm в помещении, где на самом деле не проветривают, а дневные значения постепенно сползают вниз. Модуль считает самый низкий уровень за 24 часа свежим воздухом и подтягивает к нему ноль.

Как откалибровать ноль вручную?

Вынести модуль на свежий воздух или в хорошо проветренное помещение с концентрацией около 400 ppm, выдержать больше 30 минут под питанием и замкнуть вывод HD на общий провод не меньше чем на 7 секунд. В разделе о калибровке Winsen называет выдержку больше 20 минут, в примечаниях — больше 30; берите большую.

Источники

  1. Zhengzhou Winsen Electronics. Infrared CO2 Sensor Module (Model: MH-Z19C) User's Manual, Version 1.2, issue date 2021.05.14 — UART 9600, 8 бит данных, 1 стоп-бит, без чётности; команды 0x86 (чтение) и 0x79 (вкл/выкл самокалибровки); Zero Point Calibration: ноль — 400 ppm, ручной способ — вывод HD к 0 В не меньше 7 с после выдержки больше 20 минут при 400 ppm; команда 0x79: FF 01 79 A0/00 00 00 00 00, сумма; байт 3 = A0 — включено, 00 — выключено, с завода включено, ответа нет; сумма = (не (байт1 + … + байт7)) + 1, пример для 0x86 — 0x79; самокалибровка каждые 24 ч от включения, для офиса и дома, не для теплиц, ферм, холодильников; Notes: выдержка в стабильной среде 400 ppm больше 30 минут, калибровать не реже раза в 6 месяцев, питание 4,5–5,5 В и не меньше 150 мА
  2. Sensirion. SCD4x — Breaking the size barrier in optical CO2 sensing: Datasheet, Version 1.7, April 2025 — разд. 3.8: тот же принцип автоматической калибровки у другого производителя — алгоритм предполагает, что датчик хотя бы раз дольше 3 минут видит свежий воздух с 400 ppm за неделю работы

Нашли ошибку?