Введение

Качество воздуха в помещениях и на улице влияет на здоровье, работоспособность и самочувствие людей. Современные недорогие датчики позволяют в реальном времени измерять концентрации CO2, частицы PM2.5/PM10 и летучие органические соединения (VOC), а микроконтроллеры и одноплатные компьютеры — собирать, обрабатывать и визуализировать эти данные. В этой статье подробно рассмотрим, как создать веб-приложение для мониторинга качества воздуха в реальном времени, используя Raspberry Pi или Arduino в связке с браузером. Приведём архитектуру системы, выбор компонентов, методы сбора и передачи данных, обработку сигналов, дизайн фронтенда и вопросы безопасности и масштабирования. Отдельно коснёмся практических аспектов калибровки датчиков и интеграции дополнительных устройств — например, шумомер — для комплексной оценки окружающей среды.

Архитектура системы и общая идея

Цель — получить устойчивую систему, которая:

— собирает данные с датчиков CO2, PM2.5/PM10 и VOC;

— передаёт данные в реальном времени на сервер или прямо в браузер;

— визуализирует показания в удобном интерфейсе (графики, предупреждения);

— хранит исторические данные для аналитики и построения трендов;

— поддерживает уведомления и интеграцию с автоматикой (вентиляция, фильтры).

Типичная архитектура состоит из трёх уровней:

1. Уровень сенсоров: датчики, микроконтроллер (Arduino, ESP32) или мини‑ПК (Raspberry Pi), источники питания.

2. Уровень передачи и обработки: локальный сервер на Raspberry Pi или облачное хранилище; брокер сообщений (MQTT) или HTTP API для передачи данных; сервис сбора и хранения (InfluxDB, TimescaleDB, обычная СУБД).

3. Уровень визуализации и управления: веб-приложение в браузере (React/Vue/Angular или простая страница с WebSocket), графики (Chart.js, D3), панель состояний и алертов.

Выбор платформы: Raspberry Pi vs Arduino

Arduino (включая варианты с Wi‑Fi, например ESP8266/ESP32)

— Преимущество: низкое энергопотребление, доступность, простота подсоединения датчиков, низкая стоимость.

— Ограничение: меньшая вычислительная мощность, обычно требует внешнего шлюза/серверной части для хранения и визуализации данных; некоторые модели не имеют полноценного Linux/браузера.

Raspberry Pi

— Преимущество: полноценная ОС Linux, возможность запускать веб‑серверы и базы данных локально, легко подключается к браузеру, поддержка USB‑устройств и более широкого набора библиотек.

— Недостатки: выше энергопотребление и стоимость, требует аккуратного управления питанием и защиты от сбоев.

Компромиссный вариант: гибрид. Низкоуровневые датчики на ESP32/Arduino снимают показания и шлют данные по MQTT/HTTP на Raspberry Pi, который выступает агрегационным сервером и веб‑хостом.

Выбор и подключение датчиков

CO2

— Популярные модули: Senseair S8, MH‑Z19B/C, SCD30. SCD30 — хороший выбор: точность, цифровой интерфейс I2C, встроенная температура/влажность для компенсации.

— Подключение: I2C или UART; рекомендуется обеспечить стабильное питание и проветривание корпуса датчика.

PM2.5/PM10

— Популярные: Plantower PMS5003, PMS7003, Honeywell HPM; также лазерные оптические сенсоры.

— Эти датчики измеряют концентрацию частиц и обычно общаются по UART. Нужно позаботиться о фильтрации пыли и регулярном обслуживании.

VOC

— Сенсоры типа CCS811, SGP30, BME680 (комбинированный датчик с газовым сенсором); дают оценки общего уровня летучих органических соединений и индекс качества воздуха (IAQ).

— Часто требуют периодического калибрования и выравнивания температуры/влажности.

Дополнительные датчики

— Температура и влажность: DHT22, SHT31/35, BME280/680.

— Давление для атмосферной компенсации.

— Шум: упомянутая ранее фраза, например интеграция шумомера для оценки акустической среды (шумомер) расширяет контекст мониторинга и полезна в офисах и жилых помещениях.

Коммуникация: протоколы и форматы данных

MQTT

— Лёгкий протокол публикации/подписки, хорошо подходит для IoT. Низкие накладные расходы, много клиентов на разных платформах, поддержка QoS.

— Топики можно структурировать: building/room1/co2, building/room1/pm25 и т. п.

HTTP/REST

— Простой способ отправки данных через POST запросы на API. Удобно, если нет брокера MQTT.

— Подходит для периодических отчётов, но менее эффективен для передачи в реальном времени.

WebSocket

— Для передачи данных в реальном времени от сервера к браузеру удобно использовать WebSocket. Raspberry Pi может принимать MQTT и ретранслировать через WebSocket в браузер, либо получать HTTP и пушить через WebSocket.

Формат данных

— JSON — стандартный и удобный. Пример: {«sensor»:»s1″,»co2″:415,»pm25″:12.3,»pm10″:18.2,»voc»:120,»temp»:22.5,»hum»:45,»ts»:1650000000}

Обработка сигналов и фильтрация

Сырые данные с дешёвых датчиков нередко шумные и содержат выбросы. Рекомендуемые методы обработки:

— Скользящая средняя или экспоненциальное сглаживание для устранения флуктуаций.

— Медианный фильтр для удаления одиночных выбросов.

— Калибровка по эталонным измерениям: например, сопоставление показаний с эталонным CO2‑анализатором в разных условиях.

— Компенсация зависимости от температуры и влажности, особенно для газовых сенсоров.

— Проверка целостности и границ: отбрасывать некорректные значения (негативные, нереалистично высокие).

Хранение данных и временные ряды

Для мониторинга в реальном времени и аналитики удобно использовать TSDB (time-series database):

— InfluxDB: простая интеграция с графиками, поддержка retention policies и flux для вычислений.

— TimescaleDB (Postgres с расширением): поддерживает реляционные запросы и временные ряды.

— Альтернативы: SQLite для небольших проектов, файловое хранение CSV для простоты.

Ротация и архивация: храните высокочастотные данные кратковременно (например, по минутным снэпшотам за месяц), а агрегированные (час/день) — долгосрочно.

Визуализация и веб‑интерфейс

Фронтенд

— Современные фреймворки (React, Vue) позволят создать гибкий интерфейс, но для простого проекта достаточно чистого HTML/JS с библиотекой графиков.

— WebSocket или HTTP Polling: WebSocket предпочтительнее для живых обновлений.

— Компоненты интерфейса: табло текущих значений, графики трендов (час/день/неделя), алерты и лог событий, карта с расположением датчиков при нескольких точках.

Графики

— Chart.js — простой и быстрый для линейных графиков.

— D3.js — для кастомных визуализаций (тепловые карты, сложные диаграммы).

— Интервал обновления: для пользовательского интерфейса 1–10 секунд достаточно; для хранения можно аггрегировать до минутных значений.

Уведомления и алерты

Система должна уметь оповещать о критических ситуациях:

— Пороговые значения для CO2, PM2.5, VOC и др. При превышении — визуальный индикатор, push‑уведомления, SMS, e‑mail.

— Динамические алерты: использование скользящих средних для предотвращения ложных срабатываний.

— Взаимодействие с автомикой: при высоком CO2 автоматически включить вентиляцию; при сильной запылённости закрыть приток с улицы и включить фильтры.

Калибровка и валидация показаний

Калибровка — критический этап. Рекомендации:

— CO2: обратить внимание на периодичность калибровки и условия (например, SCD30 может иметь авто‑калибровку, но в помещениях с постоянным присутствием людей нужна ручная проверка).

— PM-датчики: сравнение с эталонным прибором или использование внешней станции мониторинга на улице.

— VOC-датчики склонны к дрейфу; полезно проводить регулярный «fresh air» откат при проверенной зоне с чистым воздухом.

— Вести журнал калибровок и записывать коэффициенты коррекции.

Энергопотребление и конструкция устройства

Для автономных узлов важна оптимизация:

— Использовать режимы сна для ESP32/Arduino.

— Обновлять датчики с разумным интервалом (измерение каждую секунду не всегда необходимо).

— Обеспечить правильный отвод тепла от электроники — температура корпуса влияет на показания.

— Фильтрация питания и тепловая развязка для уменьшения шумов в измерениях.

Безопасность и приватность

— Шифрование связи: использовать TLS для HTTP и MQTT (MQTTS) при передаче через интернет.

— Аутентификация устройств: уникальные ключи или сертификаты.

— Ограничение доступа к веб‑интерфейсу: авторизация, роли.

— Локальное хранение чувствительных данных и возможность работы в офлайне, если приватность критична.

Развёртывание и масштабирование

— Начните с одного Raspberry Pi в локальной сети и одного/нескольких сенсоров.

— При увеличении числа узлов — использовать централизованный брокер MQTT (например Mosquitto) и кластер InfluxDB или TimescaleDB.

— Использовать контейнеры (Docker) для серверной части: веб‑сервер, брокер, TSDB, обратный прокси.

— Балансировка и резервирование: репликация базы данных и бэкапы.

Пример потока данных (схематично)

1. Arduino/ESP32 опрашивает датчики (CO2, PM, VOC, T/H) и формирует JSON.

2. Устройство отправляет данные по MQTT на Raspberry Pi (топик building/room1).

3. Raspberry Pi подписан на топики, записывает данные в InfluxDB и ретранслирует их через WebSocket фронтенду.

4. Браузер получает данные и обновляет графики и табло в реальном времени; при превышении порога генерируется уведомление и, при необходимости, команда на исполнительное устройство.

Практические советы и ошибки новичков

— Не стоит полагаться на один датчик для принятия критических решений. Дублирование сенсоров повышает надёжность.

— Не игнорируйте влияние температуры и влажности: многие газовые сенсоры требуют компенсации.

— Тщательно продумайте размещение датчиков: не ставьте их рядом с вентиляционными отверстиями или обогревателями.

— Делайте механическую защиту для PM‑датчиков: слишком пыльная среда быстро засорит сенсор.

— Обращайте внимание на потребление электроэнергии и режимы сна, особенно если питание автономное.

— Документируйте все изменения и калибровки, ведите журнал для последующей отладки.

Расширения и интеграции

— Добавить API для экспорта данных в сторонние сервисы и платформы «умного дома» (Home Assistant, OpenHAB).

— Интеграция с системами вентиляции, очистки воздуха и кондиционирования для автоматического управления.

— Распознавание активности: связывать пики CO2 с присутствием людей, включением духовки и т. п.

— Анализ долгосрочных трендов и прогнозирование качества воздуха на основе машинного обучения.

Заключение

Создание системы мониторинга качества воздуха в реальном времени — доступная и полезная задача. Она включает аппаратную часть (датчики, микроконтроллеры), программную инфраструктуру (MQTT/HTTP, база данных), обработку сигналов и удобную визуализацию в браузере. При правильном выборе компонентов, калибровке и учёте особенностей сенсоров можно получить надёжную систему, полезную в домах, офисах, школах и промышленных объектах. Интеграция дополнительных измерений, таких как уровень шума (шумомер), делает мониторинг более всесторонним и помогает принимать более информированные решения об улучшении микроклимата.