Skip to main content

Датчики качества воздуха

Представьте, что робот работает в умном доме, школе или на заводе. Он должен понимать не только где он находится, но и чем дышит: свежий ли воздух, нет ли утечки газа, не начался ли пожар. Для этого нужны датчики качества воздуха.


Что измеряют и зачем это роботу?

Основные параметры:

ПараметрЧто этоНормаОпасноДля чего роботу
CO₂ (углекислый газ)Показывает “духоту”400-800 ppm>1500 ppmРешать, когда проветривать помещение
TVOC (летучие соединения)Запахи, газы от мебели0-500 ppb>2000 ppbОбнаруживать утечки, загрязнения
PM2.5/PM10 (пыль)Мелкие частицы в воздухе0-35 мкг/м³>150 мкг/м³Включать очиститель, избегать запыленных зон
CO (угарный газ)Опасный газ без запаха0-9 ppm>70 ppmПредупреждать об отравлении, вызывать помощь
LPG/природный газТопливо для плит0 ppmЛюбое >0Обнаруживать утечки, предотвращать взрывы

Как работают датчики воздуха?

1. MOX-сенсоры (металлооксидные) — самые распространенные

Принцип работы:

1. Внутри есть керамическая трубка с нагревателем
2. Она нагревается до 200-400°C
3. На поверхности оседает кислород из воздуха
4. Когда появляется газ (например, спирт или CO) → 
5. Газ реагирует с кислородом → 
6. Меняется сопротивление трубки → 
7. Мы это измеряем

Особенности MOX-датчиков:

  • Медленные: Нужно 1-2 минуты на прогрев
  • “Жрут” ток: 150-200 мА из-за нагревателя
  • Чувствительны ко всему: Реагируют на влажность, температуру
  • Стареют: Через 1-2 года чувствительность падает

2. NDIR-датчики (инфракрасные) — для точного CO₂

Принцип:

1. Лампа испускает инфракрасный свет
2. CO₂ поглощает ИК-лучи определенной длины волны
3. Измеряем, сколько света поглотилось
4. Чем больше CO₂ → тем меньше прошедшего света

Преимущества:

  • Очень точные (±30 ppm)
  • Не “устают” со временем
  • Не чувствительны к другим газам

Недостатки:

  • Дорогие (в 10-20 раз дороже MOX)
  • Большие по размеру

3. Лазерные датчики пыли

Как работают:

1. Лазер освещает частицы пыли
2. Фотодиод ловит отраженный свет
3. Чем больше отражений → тем больше пыли
4. Размер частиц определяют по интенсивности отражения

Популярные датчики для школьных проектов

Уровень 1: Начинающий (простые проекты)

MQ-135 — “универсальный детектор”

Что измеряет: NH3, NOx, бензол, CO2 (примерно)
Интерфейс: Аналоговый (подключается к A0)
Цена: 150-300₽

Плюсы:
• Очень дешевый
• Простое подключение
• Чувствует "что-то не то"

Минусы:
• Неточно (какой именно газ?)
• Большое потребление (150 мА)
• Долгий прогрев (1-2 минуты)

Пример кода:
int airQuality = analogRead(A0);
if (airQuality > 500) {
  Serial.println("ВНИМАНИЕ! Воздух загрязнен");
}

MQ-2 — детектор горючих газов

Что измеряет: Пропан, метан, LPG, дым
Для чего: Робот-пожарный, детектор утечек газа
Особенность: Реагирует на зажигалку с 1 метра!

Уровень 2: Продвинутый (точные измерения)

CCS811 — цифровой eCO₂ и TVOC

Что измеряет: eCO (эквивалентный CO), TVOC
Интерфейс: I2C
Цена: 800-1200

Что такое eCO:
 Не настоящий CO
 Рассчитывается по другим газам
 Но хорошо показывает "духоту"

Пример кода:
#include <Adafruit_CCS811.h>
Adafruit_CCS811 ccs;

void setup() {
  ccs.begin();
  while(!ccs.available()); // Ждем готовности
}

void loop() {
  if(ccs.available()) {
    uint16_t eco2 = ccs.geteCO2();
    uint16_t tvoc = ccs.getTVOC();
    
    Serial.print("eCO2: "); Serial.print(eco2); Serial.print(" ppm\t");
    Serial.print("TVOC: "); Serial.print(tvoc); Serial.println(" ppb");
  }
}

Уровень 3: Профессиональный (точные данные)

SGP30 — лучший цифровой датчик

Чем лучше CCS811:
• Быстрее (1 измерение в секунду)
• Точнее
• Меньше калибровок
• Есть датчик влажности внутри

Особенность: Нужен датчик влажности рядом
(иначе будет врать из-за компенсации влажности)

MH-Z19B — настоящий CO₂ датчик (NDIR)

Тип: NDIR (инфракрасный)
Точность: ±50 ppm + 3%
Цена: 2000-3000₽

Особенности:
• Измеряет РЕАЛЬНЫЙ CO₂
• Калибровка на 400 ppm (свежий воздух)
• Можно калибровать вручную
• Работает 10+ лет без деградации

Для школы: Один на весь класс, для демонстрации

SDS011 — датчик пыли PM2.5/PM10

Что измеряет: Частицы 2.5 и 10 микрон
Точность: Хорошая для бытовых измерений
Интерфейс: UART (Serial)

Как использовать:
1. Проветрить комнату (базовая линия)
2. Включить вентилятор/поднять пыль
3. Увидеть как показания растут

Практические проекты для школы

Проект 1: “Умное проветривание класса”

Проблема: В классе душно, но никто не открывает окна
Решение: Робот с датчиком CO₂

Компоненты:
• ESP32 + MH-Z19B
• Серводвигатель для открытия окна
• Дисплей для показа уровня CO₂

Логика:
• CO₂ < 800 ppm: всё хорошо
• CO₂ 800-1200 ppm: предупреждение на дисплей
• CO₂ > 1200 ppm: открыть окно на 10 минут
• CO₂ > 2000 ppm: включить красную сирену

Проект 2: “Робот-пожарный”

Задача: Обнаружить пожар до того, как увидят люди
Датчики:
• MQ-2 (дым и газ)
• Датчик температуры (резкий рост)
• Датчик пламени (инфракрасный)

Что делает робот:
1. Патрулирует коридоры школы
2. При обнаружении дыма:
   • Включает сирену
   • Отправляет сообщение охране
   • Показывает путь к выходу (светодиоды)
   • Может принести огнетушитель

Проект 3: “Карта качества воздуха в школе”

Исследовательский проект:
1. Робот с CCS811/SGP30 ездит по школе
2. В каждом кабинете измеряет:
   • CO₂ (духота)
   • TVOC (химические загрязнения)
   • Температуру/влажность
3. Строит карту:
   • Где самые "душные" кабинеты?
   • Где пахнет химией (кабинеты химии, мастерские)?
   • Как меняется воздух в течение дня?
4. Дает рекомендации:
   • Где нужны очистители воздуха
   • Когда лучше проветривать
   • Как планировать уроки

Как правильно работать с газовыми датчиками

1. Калибровка — обязательно!

Для всех MOX-датчиков (MQ, CCS811, SGP30):

Шаг 1: Базовая калибровка (24-48 часов)
• Включить датчик в чистом воздухе
• Оставить на 1-2 суток работать
• Он сам "запомнит" чистый воздух

Шаг 2: Регулярная калибровка
• Каждую неделю проветривать помещение
• Дать датчику 30 минут в свежем воздухе

Для MH-Z19B (NDIR CO₂):

// Калибровка на 400 ppm (свежий воздух)
void calibrateToFreshAir() {
  byte cmd[9] = {0xFF,0x01,0x87,0x00,0x00,0x00,0x00,0x00,0x78};
  Serial.write(cmd, 9);
  delay(100);
}
// Вызывать ТОЛЬКО когда уверены, что воздух свежий!

2. Компенсация температуры и влажности

Газовые датчики очень чувствительны к погоде:

#include <Adafruit_SGP30.h>
#include <Adafruit_SHT31.h>

Adafruit_SGP30 sgp;
Adafruit_SHT31 sht = Adafruit_SHT31();

void setup() {
  sgp.begin();
  sht.begin(0x44);
}

void loop() {
  // 1. Измеряем температуру и влажность
  float temperature = sht.readTemperature();
  float humidity = sht.readHumidity();
  
  // 2. Компенсируем их влияние
  sgp.setHumidity(getAbsoluteHumidity(temperature, humidity));
  
  // 3. Теперь измеряем газы точно
  sgp.IAQmeasure();
  
  Serial.print("CO2: "); Serial.print(sgp.eCO2);
  Serial.print(" ppm, TVOC: "); Serial.print(sgp.TVOC); 
  Serial.println(" ppb");
}

3. Фильтрация данных

Показания скачут даже в стабильных условиях:

// Экспоненциальное скользящее среднее
float filteredCO2 = 400.0;
const float alpha = 0.1;

float readFilteredCO2() {
  float raw = readCO2();
  filteredCO2 = alpha * raw + (1 - alpha) * filteredCO2;
  return filteredCO2;
}

// Использование:
float currentCO2 = readFilteredCO2();
if (currentCO2 > 1000) {
  // Действительно стало душно, а не случайный скачок
}

4. Энергосбережение

Газовые датчики “жрут” энергию:

// Режим для автономного робота:
void powerSaveMode() {
  // Большую часть времени спим
  esp_deep_sleep(60 * 1000000); // 1 минута
  
  // Проснулись
  wakeUpSensor(); // 30 секунд на прогрев
  takeMeasurement(); // 10 секунд
  goBackToSleep();
}

Частые проблемы и решения

Проблема 1: “Датчик показывает 400 ppm CO₂ всегда”

Причина: Это eCO₂ датчик (CCS811/SGP30), не NDIR
Решение: 
• Дунуть на датчик (выдохнуть CO₂)
• Поднести зажигалку (без пламени!)
• Подождать 5-10 минут в душном помещении

Проблема 2: “Показания дико скачут”

Причина: Ветер, сквозняк, кондиционер
Решение:
• Поставить датчик в защитный корпус
• Использовать фильтрацию в коде
• Измерять чаще и брать среднее

Проблема 3: “Датчик MQ-… показывает что-то даже в чистом воздухе”

Причина: Он так и должен!
Решение: 
• Запомнить значение в чистом воздухе
• Считать аномалией отклонение >20%
• Калибровать раз в месяц

Проблема 4: “CCS811/SGP30 требует BME280 рядом”

Причина: Компенсация влажности
Решение:
• Купить BME280 (300-500₽)
• Или отключить компенсацию (будет менее точно)
• Или использовать в стабильных условиях

Эксперимент: Измерь CO₂ от дыхания

Что нужно: Датчик CO₂ (MH-Z19B или CCS811), Arduino, компьютер

Шаги:

  1. Подключите датчик, загрузите программу считывания
  2. Измерьте CO₂ в пустой комнате (должно быть 400-500 ppm)
  3. Закройте дверь и окно, посидите 10 минут
  4. Измерьте снова (будет 800-1500 ppm)
  5. Подышите прямо на датчик (будет 40000+ ppm!)
  6. Проветрите комнату, убедитесь что вернулось к 400 ppm

Что узнаете: Как быстро накапливается CO₂, как важно проветривание


Что дальше?

Освоили датчики воздуха? Теперь можно:

Совет: Начните с простого MQ-135 для понимания принципов. Потом переходите к CCS811 для точных измерений. NDIR датчики (MH-Z19B) покупайте только для серьезных проектов — они дорогие, но дают лабораторную точность.