#122中級

ESP32 MQ-2ガス・煙検知アラーム

このプロジェクトでは、MQ-2ガスセンサーモジュールで可燃性ガス(LPG、メタン、プロパン)と煙を検知し、パッシブブザーでサイレンのような警報音を鳴らします。センサーのしきい値判定用デジタル出力(DO)をESP32のGPIO 4ピンに接続します。ガスや煙がしきい値を超えるとDOがLOWになり、アラームが作動します。感度はモジュール上のポテンショメーターで調整します。パッシブブザーを`tone()`で駆動し、2つの周波数を交互に切り替えてサイレン音を作ります。

4.7(28)
41 完了
ESP32 MQ-2ガス・煙検知アラーム
キッチンのガス漏れや部屋の隅で発生した煙は、気づかないうちに広がることがあります。この小さなアラームでそれらを検知します。MQ-2ガスセンサーが空気中の可燃性ガスや煙を検知すると、赤いLEDが点灯し、ブザーが低音と高音を交互に鳴らして知らせます。空気がきれいになると、光と音は自動で止まります。電源を入れた後は、センサーのウォームアップ中の1分間、LEDがゆっくり点滅し、アラームは待機します。

動画

回路図

ESP32 MQ-2ガス・煙検知アラーム - Circuit

ソースコード

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   ESP32 MQ-2 Gas/Smoke Detector Alarm
4// ─────────────────────────────────────────
5// Reads the digital threshold output (DO) of the MQ-2 module. When gas or
6// smoke passes the threshold, the warning LED turns on and the passive
7// buzzer plays a siren switching between 800 and 1200 Hz every 0.2 s. Set
8// the threshold with the trimpot on the module (Arduino Core 3.0+).
9//
10// Pins:
11//   GPIO 4  -> MQ-2 DO (digital threshold output)
12//   GPIO 18 -> Buzzer + leg
13//   GPIO 5  -> Red LED (with a 220 ohm resistor)
14//   MQ-2 VCC -> MQ-2 VCC -> 5V (VIN), GND -> GND
15
16// Pin definitions
17const int MQ2_DO_PIN  = 4;    // MQ-2 D0 (digital threshold out)
18const int BUZZER_PIN  = 18;   // Passive buzzer
19const int LED_PIN     = 5;    // Warning LED + 220R
20
21// Warm-up time (ms): the MQ-2 heater needs minutes to warm up. In Wokwi 2000 is enough.
22const unsigned long WARMUP_MS = 60000;
23bool warmedUp = false;        // Is the warm-up over
24
25void setup() {
26  pinMode(MQ2_DO_PIN, INPUT);
27  pinMode(BUZZER_PIN, OUTPUT);
28  pinMode(LED_PIN, OUTPUT);
29  digitalWrite(BUZZER_PIN, LOW);
30  digitalWrite(LED_PIN, LOW);
31}
32
33void loop() {
34  // Warm-up: the DO reading is ignored, the LED blinks slowly without blocking
35  if (!warmedUp) {
36    if (millis() < WARMUP_MS) {
37      digitalWrite(LED_PIN, (millis() / 500) % 2);   // 0.5 s on, 0.5 s off
38      return;
39    }
40    warmedUp = true;
41  }
42
43  // MQ-2 D0 is normally HIGH and goes LOW above the threshold
44  int gasState = digitalRead(MQ2_DO_PIN);
45
46  if (gasState == LOW) {
47    // Alarm: the LED turns on, the buzzer plays a two-tone siren
48    digitalWrite(LED_PIN, HIGH);
49    tone(BUZZER_PIN, 800);    // Low tone
50    delay(200);
51    tone(BUZZER_PIN, 1200);   // High tone
52    delay(200);
53  } else {
54    // Idle: LED and buzzer off
55    digitalWrite(LED_PIN, LOW);
56    noTone(BUZZER_PIN);
57    delay(50);
58  }
59}
60

よくある質問

MQ-2はどのようなガスを検知しますか?▾

MQ-2はLPG、プロパン、メタン、水素、アルコール蒸気、煙に反応します。ガスの種類は区別できず、全体の濃度の上昇だけを検知します。

MQ-2のアナログ出力をESP32に直接接続できますか?▾

MQ-2の電源は5 Vで、アナログ出力も最大5 Vになります。ESP32のADC入力は最大3.3 Vなので、分圧回路(例:10 kΩ + 20 kΩ)が必要です。

電源を入れた直後にセンサーの値が高くなるのはなぜですか?▾

MQセンサーのヒーターが安定するまでには数分かかり、その間は測定値が高くなります。起動後の数分間はアラームを無効にしておくと、誤報を防げます。

サイレンのような音はどうやって作りますか?▾

`tone()`でパッシブブザーを駆動し、2つの周波数(例:800 Hzと1200 Hz)を素早く切り替えます。この切り替えで、よくあるアラーム音を再現します。