Автономный модуль мониторинга концентрации горючих газов и задымления на базе ESP32, датчика MQ-2 и LCD дисплея.
Система предназначена для обнаружения утечек бытового газа (пропан/бутан), дыма и других горючих веществ. При превышении порогового значения активируется звуковая и световая сигнализация, а на LCD дисплее отображается текущее состояние и уровень газа.
Обнаруживаемые вещества:
- Пропан / Бутан (газ из баллона или от плиты)
- Дым (горение / тление)
- Водород
- Пары спирта
| Компонент | Модель | Примечание |
|---|---|---|
| MCU | ESP32 DevKit V1 (38 pin) | Основной контроллер |
| Sensor | MQ-2 | Электрохимический датчик газа/дыма |
| Display | LCD 16x1 (или 16x2) | Индикация текущих значений |
| Buzzer | Активный зуммер (5V) | Звуковая сигнализация |
| LED | Красный + Зеленый | Визуальная индикация |
| Power | micro-USB (5V) | Питание |
| Компонент | Пин ESP32 | Примечание |
|---|---|---|
| MQ-2 (Analog Out) | D34 | Аналоговый вход |
| LCD RS | D19 | Регистр выбора |
| LCD E | D18 | Строб |
| LCD D4 | D5 | Data bit 4 |
| LCD D5 | D23 | Data bit 5 |
| LCD D6 | D14 | Data bit 6 |
| LCD D7 | D2 | Data bit 7 |
| Red LED | D13 | Через резистор 220 Ом |
| Green LED | D27 | Через резистор 220 Ом |
| Buzzer | D12 | Активный зуммер (PWM) |
Особенности подключения:
- Датчик MQ-2 запитан от пина VIN (5V)
- Для корректного считывания АЦП настроено затухание (attenuation) 11dB
- Светодиоды подключены через ограничительные резисторы 220 Ом
- Зуммер использует PWM (ledc) для генерации звука
1. Экспоненциальная фильтрация (IIR фильтр)
filteredValue = filteredValue + FILTER_K * (rawValue - filteredValue);
Коэффициент FILTER_K = 0.2 обеспечивает плавное изменение значений без резких скачков.
2. Гистерезис
const int ALARM_ON = 3500; // Включение тревоги
const int ALARM_OFF = 2700; // Выключение тревоги
Разница в 800 единиц предотвращает дребезг при колебаниях уровня газа.
3. Неблокирующая логика
Таймеры на millis() вместо delay()
Разные интервалы для опроса датчика (50ms), обновления дисплея (250ms) и мигания LED (300ms)
4. PWM управление зуммером
ledcAttach(BUZZER_PIN, 300, 8); // Частота 300Hz, разрешение 8 бит
┌─────────────────┐
│ MQ-2 Sensor │
│ (аналоговый) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ ESP32 ADC │
│ GPIO 34 │
│ 11dB atten │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Фильтрация │
│ (экспоненц.) │
└────────┬────────┘
│
▼
┌─────────────────────────────────┐
│ Сравнение с порогом │
│ Тревога: значение > 3500 │
│ Норма: значение < 2700 │
└────────┬────────────────────────┘
│
├──────────┬──────────┬──────────┐
▼ ▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│Красный │ │Зеленый │ │ Buzzer │ │ LCD │
│LED (D13)│ │LED (D27)│ │ (D12) │ │(16x1) │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
Установка и запуск
1. Установка зависимостей
В Arduino IDE установите библиотеку для LCD:
LiquidCrystal (входит в стандартный набор)
2. Настройка пинов
3. Калибровка порогов
Подберите значения ALARM_ON и ALARM_OFF под ваше окружение:
В нормальных условиях смотрите значения в Serial Monitor
Установите ALARM_ON на 20-30% выше фонового значения
ALARM_OFF на 300-500 единиц ниже ALARM_ON
4. Загрузка прошивки
Выберите плату ESP32 Dev Module, порт и нажмите "Загрузить"
Отладка:
В Serial Monitor (115200 бод) выводятся:
Raw:1234 Filtered:1256.78
Raw:1245 Filtered:1254.32
...