#122Mittel

ESP32 MQ-2 Gas-/Rauchmelder-Alarm

In diesem Projekt wird die Erkennung brennbarer Gase (LPG, Methan, Propan) und Rauch mit einem MQ-2-Gassensormodul durchgeführt; bei Erkennung ertönt über einen passiven Summer ein sirenenähnlicher Alarmton. Der digitale Schwellenausgang (DO) des Sensors wird an GPIO 4 des ESP32 angeschlossen; überschreiten Gas oder Rauch den Schwellenwert, geht DO auf LOW und der Alarm wird ausgelöst. Die Empfindlichkeit wird über das Potentiometer eingestellt. Der passive Summer wird mit `tone()` angesteuert.

4.7(27)
41 abgeschlossen
ESP32 MQ-2 Gas-/Rauchmelder-Alarm
Ein Gasleck in der Küche oder Rauch in einer Ecke kann sich unbemerkt ausbreiten, also schnuppert dieser kleine Alarm für dich mit. Sobald der Gassensor MQ-2 brennbares Gas oder Rauch in der Luft bemerkt, leuchtet die rote LED und der Summer heult als Sirene zwischen einem tiefen und einem hohen Ton hin und her. Ist die Luft wieder sauber, verstummen Licht und Ton von selbst. Beim Einschalten blinkt die LED eine Minute lang langsam, während sich der Sensor aufwärmt; so lange wartet der Alarm.

Video

Schaltplan

ESP32 MQ-2 Gas-/Rauchmelder-Alarm - Circuit

Quellcode

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   ESP32 MQ-2 Gas-/Rauchmelder-Alarm
4// ─────────────────────────────────────────
5// Liest den digitalen Schwellenwertausgang (DO) des MQ-2-Moduls.
6// Überschreiten Gas oder Rauch den Schwellenwert, geht die Warn-LED an und
7// der passive Buzzer spielt alle 0.2 s eine Sirene, die zwischen 800 und
8// 1200 Hz wechselt. Stelle den Schwellenwert mit dem Trimmpoti am Modul
9// ein (Arduino Core 3.0+).
10//
11// Pins:
12//   GPIO 4  -> MQ-2 DO (digitaler Schwellenwertausgang)
13//   GPIO 18 -> Buzzer-Beinchen +
14//   GPIO 5  -> Rote LED (mit 220-Ohm-Widerstand)
15//   MQ-2 VCC -> MQ-2 VCC -> 5V (VIN), GND -> GND
16
17// Pin-Definitionen
18const int MQ2_DO_PIN  = 4;    // MQ-2 D0 (digitaler Schwellenwertausgang)
19const int BUZZER_PIN  = 18;   // Passiver Buzzer
20const int LED_PIN     = 5;    // Warn-LED + 220R
21
22// Aufwärmzeit (ms): die Heizung des MQ-2 braucht Minuten. In Wokwi reichen 2000.
23const unsigned long WARMUP_MS = 60000;
24bool warmedUp = false;        // Ist das Aufwärmen vorbei
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  // Aufwärmen: DO wird ignoriert, die LED blinkt langsam, ohne zu blockieren
36  if (!warmedUp) {
37    if (millis() < WARMUP_MS) {
38      digitalWrite(LED_PIN, (millis() / 500) % 2);   // 0.5 s an, 0.5 s aus
39      return;
40    }
41    warmedUp = true;
42  }
43
44  // MQ-2 D0 ist normalerweise HIGH und geht über dem Schwellenwert auf LOW
45  int gasState = digitalRead(MQ2_DO_PIN);
46
47  if (gasState == LOW) {
48    // Alarm: Die LED geht an, der Buzzer spielt eine Zweiton-Sirene
49    digitalWrite(LED_PIN, HIGH);
50    tone(BUZZER_PIN, 800);    // Tiefer Ton
51    delay(200);
52    tone(BUZZER_PIN, 1200);   // Hoher Ton
53    delay(200);
54  } else {
55    // Leerlauf: LED und Buzzer aus
56    digitalWrite(LED_PIN, LOW);
57    noTone(BUZZER_PIN);
58    delay(50);
59  }
60}
61

FAQ

Welche Gase erkennt der MQ-2?▾

Das MQ-2 reagiert auf LPG, Propan, Methan, Wasserstoff, Alkoholdampf und Rauch. Es kann nicht unterscheiden, um welches Gas es sich handelt; es erfasst lediglich den Anstieg der Gesamtdichte.

Kann der Analogausgang des MQ-2 direkt an den ESP32 angeschlossen werden?▾

Der MQ-2 wird mit 5 V versorgt und sein Analogausgang kann bis zu 5 V erreichen. Da der ADC-Eingang des ESP32 maximal 3,3 V akzeptiert, muss ein Spannungsteiler (z. B. 10 kΩ + 20 kΩ) verwendet werden.

Der Sensor zeigt beim ersten Einschalten einen hohen Wert an – warum?▾

Es dauert einige Minuten, bis sich die Heizung der MQ-Sensoren eingependelt hat; während dieser Zeit werden hohe Werte angezeigt. Wenn Sie den Alarm nach dem Einschalten für einige Minuten deaktivieren, vermeiden Sie Fehlalarme.

Wie wird ein Sireneneffekt erzeugt?▾

Der passive Summer wird mit der Funktion `tone()` so angesteuert, dass er schnell zwischen zwei verschiedenen Frequenzen hin- und herwechselt (z. B. 800 Hz und 1200 Hz). Dieser Wechsel ahmt den klassischen Alarmton nach.