Датчики качества воздуха
Представьте, что робот работает в умном доме, школе или на заводе. Он должен понимать не только где он находится, но и чем дышит: свежий ли воздух, нет ли утечки газа, не начался ли пожар. Для этого нужны датчики качества воздуха.
Что измеряют и зачем это роботу?
Основные параметры:
| Параметр | Что это | Норма | Опасно | Для чего роботу |
|---|---|---|---|---|
| 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, компьютер
Шаги:
- Подключите датчик, загрузите программу считывания
- Измерьте CO₂ в пустой комнате (должно быть 400-500 ppm)
- Закройте дверь и окно, посидите 10 минут
- Измерьте снова (будет 800-1500 ppm)
- Подышите прямо на датчик (будет 40000+ ppm!)
- Проветрите комнату, убедитесь что вернулось к 400 ppm
Что узнаете: Как быстро накапливается CO₂, как важно проветривание
Что дальше?
Освоили датчики воздуха? Теперь можно:
- Системы умного дома — как автоматизировать проветривание
- Алгоритмы машинного обучения — как предсказывать качество воздуха
- Телеметрия и облака — как отправлять данные на сервер
Совет: Начните с простого MQ-135 для понимания принципов. Потом переходите к CCS811 для точных измерений. NDIR датчики (MH-Z19B) покупайте только для серьезных проектов — они дорогие, но дают лабораторную точность.
