Выдыхай, бобёр: как я перестал тупить и собрал монитор CO2, который не врет

в 10:30, , рубрики: co2, DIY, diy или сделай сам, diy-проекты, esp32, esphome, home assistant, MH-Z19, здоровье, качество воздуха

Маркетологи говорят нам: купи увлажнитель, купи очиститель, купи ионизатор. Но никто не говорит про главное — углекислый газ.

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

Готовые мониторы стоят от 5 до 15 тысяч рублей. Внутри — датчик за тысячу и три светодиода.

Я решил, что переплачивать за пластиковый корпус не буду. Берем паяльник (или просто провода), ESP32 и делаем инструмент, который покажет правду.

Почему дешевые датчики - мусор

Сначала ликбез. Если вы купили на Алиэкспрессе датчик 5 в 1 за 10 баксов, поздравляю — вас надули. Скорее всего, там стоит электрохимический сенсор, который реагирует на пары спирта, духи и даже лак для волос, но не на CO2.

Дыхнули перегаром — уровень вырос. Брызнули дезодорантом — вырос. Это эмуляция, а не измерение.

Нам нужен NDIR (недисперсионный инфракрасный) сенсор. Он светит лампочкой сквозь газ и смотрит, сколько света поглотилось. Физику не обманешь.

Железо: джентльменский набор

  1. MH‑Z19B (или C). Золотой стандарт бюджетных NDIR сенсоров. Стоит около 1500 рублей. Если китайцы прислали вам подделку (а они любят), он не будет калиброваться. Берите в проверенных местах.

  2. ESP32 (любая плата разработчика). Почему не Arduino? Потому что нам нужен Wi‑Fi, чтобы слать данные в Home Assistant.

  3. SSD1306. Маленький OLED экранчик, чтобы видеть цифры без телефона.

Итого бюджет — около 2000–2500 рублей. В 3–4 раза дешевле аналогов.

Софт: ESPHome - магия для ленивых

Писать на C++ под Arduino IDE — это боль. Забытые точки с запятой, библиотеки, которые конфликтуют.

Я использую ESPHome. Это прошивка‑конструктор. Вы пишите YAML‑файл, где говорите системе, что у вас есть датчик на таких‑то пинах и экран на таких‑то.

ESPHome сам компилирует прошивку, сам заливает ее по воздуху (OTA) и сам интегрируется в Home Assistant.

Вот конфиг, который делает всё:

YAML

esphome:
  name: co2-bedroom
  platform: ESP32
  board: nodemcu-32s

wifi:
  ssid: "MyWiFi"
  password: "SecretPassword"

# Включаем логирование по кабелю (для отладки)
logger:

# Включаем API для Home Assistant
api:

i2c:
  sda: 21
  scl: 22

uart:
  rx_pin: 16
  tx_pin: 17
  baud_rate: 9600

sensor:
  - platform: mhz19
    co2:
      name: "Bedroom CO2 Value"
    temperature:
      name: "Bedroom Temperature"
    update_interval: 60s
    automatic_baseline_calibration: false # Важно! Отключаем автокалибровку

font:
  - file: "arial.ttf"
    id: my_font
    size: 20

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    lambda: |-
      it.printf(0, 0, id(my_font), "CO2: %.0f ppm", id(bedroom_co2_value).state);

Нюанс, о котором молчат: Калибровка

Датчик MH‑Z19 имеет встроенную функцию ABC (Automatic Baseline Calibration). Раз в сутки он берет минимальное значение, которое намерил, и считает его за 400 ppm (чистый уличный воздух).

Если вы живете в герметичной квартире и не открываете окна сутками — датчик сойдет с ума и начнет показывать заниженные значения.

В конфиге выше я отключил это (automatic_baseline_calibration: false).

Раз в месяц я просто выношу датчик на балкон на 20 минут и посылаю ему команду калибровки вручную. Так надежнее.

Результаты: ужас на графике

Когда я собрал это устройство и оставил на ночь в спальне, я офигел.

График в Grafana показал, что при закрытом окне к 3 часам ночи уровень CO2 достигает 2500 ppm.

Норма — до 800.

1000–1500 — вялость.

Выше 2000 — голова ватная, сон не освежает.

Я годами просыпался разбитым, думал на стресс, кофе, магнитные бури. А оказалось, я просто спал в газовой камере.

Теперь у меня настроена автоматизация: если CO2 выше 900 — Алиса (или уведомление в телегу) орет, что пора проветрить. А в идеале — нужен бризер, но это уже другая история и другой бюджет.

Сборка заняла вечер. Пайка там элементарная — 4 провода для датчика, 4 для экрана. Можно вообще на макетной плате собрать без пайки.

Корпус я не делал — примотал синей изолентой к ножке монитора. Киберпанк, который мы заслужили.

Не экономьте на воздухе. Это лучшее вложение 2000 рублей в вашу продуктивность.

Автор: python_developer_33

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js