Skip to content

Latest commit

 

History

History
152 lines (103 loc) · 6.01 KB

File metadata and controls

152 lines (103 loc) · 6.01 KB

ESP32 Gas Leak Guardian with LCD Display

Автономный модуль мониторинга концентрации горючих газов и задымления на базе ESP32, датчика MQ-2 и LCD дисплея.


Описание

Система предназначена для обнаружения утечек бытового газа (пропан/бутан), дыма и других горючих веществ. При превышении порогового значения активируется звуковая и световая сигнализация, а на LCD дисплее отображается текущее состояние и уровень газа.

Обнаруживаемые вещества:

  • Пропан / Бутан (газ из баллона или от плиты)
  • Дым (горение / тление)
  • Водород
  • Пары спирта

Состав системы (BOM)

Компонент Модель Примечание
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
...