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.

Video
Schaltplan

Quellcode
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}
61FAQ
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.
