Сигнализация газа и дыма MQ-2 на ESP32
В этом проекте модуль датчика газа MQ-2 обнаруживает горючие газы (сжиженный газ, метан, пропан) и дым, а при обнаружении пассивный зуммер играет тревогу, похожую на сирену. Цифровой пороговый выход датчика (DO) подключён к GPIO 4 у ESP32; когда газ или дым превышают порог, DO переходит в LOW, и срабатывает тревога. Чувствительность настраивается потенциометром модуля. Пассивный зуммер управляется через tone() и даёт сирену на двух частотах.

Видео
Схема

Исходный код
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Сигнализация газа и дыма MQ-2 на ESP32
4// ─────────────────────────────────────────
5// Читает цифровой пороговый выход (DO) модуля MQ-2. Когда газ или дым
6// превышают порог, включается предупреждающий светодиод, а пассивный
7// зуммер играет сирену, переключаясь между 800 и 1200 Hz каждые 0,2 с.
8// Порог настраивается подстроечным резистором на модуле (Arduino Core
9// 3.0+).
10//
11// Пины:
12// GPIO 4 -> MQ-2 DO (цифровой пороговый выход)
13// GPIO 18 -> Ножка + зуммера
14// GPIO 5 -> Красный светодиод (с резистором 220 ohm)
15// MQ-2 VCC -> MQ-2 VCC -> 5V (VIN), GND -> GND
16
17// Определения пинов
18const int MQ2_DO_PIN = 4; // MQ-2 D0 (цифровой пороговый выход)
19const int BUZZER_PIN = 18; // Пассивный зуммер
20const int LED_PIN = 5; // Предупреждающий светодиод + 220R
21
22// Время прогрева (мс): нагревателю MQ-2 нужно несколько минут на прогрев. В Wokwi хватает 2000.
23const unsigned long WARMUP_MS = 60000;
24bool warmedUp = false; // Прогрев закончен?
25
26void setup() {
27 pinMode(MQ2_DO_PIN, INPUT);
28 pinMode(BUZZER_PIN, OUTPUT);
29 pinMode(LED_PIN, OUTPUT);
30 digitalWrite(BUZZER_PIN, LOW);
31 digitalWrite(LED_PIN, LOW);
32}
33
34void loop() {
35 // Прогрев: показание DO игнорируется, светодиод медленно мигает без блокировки
36 if (!warmedUp) {
37 if (millis() < WARMUP_MS) {
38 digitalWrite(LED_PIN, (millis() / 500) % 2); // 0,5 с вкл, 0,5 с выкл
39 return;
40 }
41 warmedUp = true;
42 }
43
44 // MQ-2 D0 обычно HIGH и уходит в LOW выше порога
45 int gasState = digitalRead(MQ2_DO_PIN);
46
47 if (gasState == LOW) {
48 // Тревога: светодиод включается, зуммер играет двухтональную сирену
49 digitalWrite(LED_PIN, HIGH);
50 tone(BUZZER_PIN, 800); // Низкий тон
51 delay(200);
52 tone(BUZZER_PIN, 1200); // Высокий тон
53 delay(200);
54 } else {
55 // Покой: светодиод и зуммер выкл
56 digitalWrite(LED_PIN, LOW);
57 noTone(BUZZER_PIN);
58 delay(50);
59 }
60}
61
Частые вопросы
Какие газы обнаруживает MQ-2?
MQ-2 чувствителен к сжиженному газу, пропану, метану, водороду, парам спирта и дыму. Различать газы он не умеет; он замечает только общее повышение концентрации.
Можно ли подключить аналоговый выход MQ-2 прямо к ESP32?
MQ-2 питается от 5 V, и его аналоговый выход может доходить до 5 V. Вход АЦП ESP32 принимает максимум 3,3 V, поэтому нужен делитель напряжения (например, 10 kΩ + 20 kΩ).
При первом включении датчик показывает высокое значение. Почему?
Нагревателю датчиков MQ нужно несколько минут, чтобы стабилизироваться; в это время показания завышены. Отключение тревоги на несколько минут после запуска предотвращает ложные срабатывания.
Как создаётся эффект сирены?
Пассивный зуммер через `tone()` быстро переключается между двумя частотами (например, 800 Hz и 1200 Hz). Это колебание имитирует классический звук тревоги.
