Маркетологи говорят нам: купи увлажнитель, купи очиститель, купи ионизатор. Но никто не говорит про главное — углекислый газ.
Ты можешь сидеть в кристально чистой комнате с идеальной влажностью, но если CO2 там зашкаливает за 1500 ppm — твой превращается в хлебушек. Ты устаешь, делаешь баги и хочешь спать.
Готовые мониторы стоят от 5 до 15 тысяч рублей. Внутри — датчик за тысячу и три светодиода.
Я решил, что переплачивать за пластиковый корпус не буду. Берем паяльник (или просто провода), ESP32 и делаем инструмент, который покажет правду.
Почему дешевые датчики - мусор
Сначала ликбез. Если вы купили на Алиэкспрессе датчик 5 в 1 за 10 баксов, поздравляю — вас надули. Скорее всего, там стоит электрохимический сенсор, который реагирует на пары спирта, духи и даже лак для волос, но не на CO2.
Дыхнули перегаром — уровень вырос. Брызнули дезодорантом — вырос. Это эмуляция, а не измерение.
Нам нужен NDIR (недисперсионный инфракрасный) сенсор. Он светит лампочкой сквозь газ и смотрит, сколько света поглотилось. Физику не обманешь.
Железо: джентльменский набор
-
MH‑Z19B (или C). Золотой стандарт бюджетных NDIR сенсоров. Стоит около 1500 рублей. Если китайцы прислали вам подделку (а они любят), он не будет калиброваться. Берите в проверенных местах.
-
ESP32 (любая плата разработчика). Почему не Arduino? Потому что нам нужен Wi‑Fi, чтобы слать данные в Home Assistant.
-
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
