#122Средний

Сигнализация газа и дыма MQ-2 на ESP32

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

4.7(28)
43 собрано
Сигнализация газа и дыма MQ-2 на ESP32
Утечка газа на кухне или дым в углу могут разрастись прежде, чем кто-то заметит, поэтому эта маленькая сигнализация «принюхивается» за тебя. Когда датчик газа MQ-2 улавливает в воздухе горючий газ или дым, загорается красный светодиод, а зуммер играет сирену, которая качается между низким и высоким тоном. Когда воздух очищается, свет и звук сами прекращаются. При включении светодиод минуту медленно мигает, пока датчик прогревается, и до этого тревога не срабатывает.

Видео

Схема

Сигнализация газа и дыма MQ-2 на ESP32 - Circuit

Исходный код

C++ (Arduino IDE)
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). Это колебание имитирует классический звук тревоги.