部品 · 読了まで6分

MQ-2ガスセンサー:Arduinoでガス・煙警報器を作る

MQ-2ガスセンサーのしくみは?LPG、メタン、煙の検知、モジュールのピン、予熱、アナログとデジタルの読み取り、R0のキャリブレーション、MQセンサーのシリーズ、ESP32とPicoでのガス警報器を解説します。

MQ-2は、空気中の可燃性ガスや煙を検知する、安価でとても普及しているガスセンサーです。LPG(プロパンガス)、プロパン、ブタン、メタン(都市ガス)、水素、アルコールの蒸気、煙に反応します。Arduinoのプロジェクトでは、台所のガス警報器、煙探知機、空気の質の表示器を作るのに使われています。この記事では、センサーの中身、正しい配線、予熱が欠かせない理由、読み取った値の解釈の仕方をステップごとに見ていきます。

MQ-2ガスセンサーモジュール
MQ-2ガスセンサーモジュール:加熱される検出素子が金属のメッシュの下にあります。モジュールのピンはVCC、GND、DO、AOの4本です。

MQ-2のしくみ

金属のメッシュの下には、二酸化スズ(SnO₂)でコーティングされた小さなセラミックの素子と、それを数百度に温めるヒーター線があります。きれいな空気の中では、素子の抵抗は高くなっています。可燃性ガスや煙が届くと、表面での化学反応で抵抗が下がります。ガスが濃いほど抵抗は低くなります。モジュールはこの抵抗の変化を分圧回路で電圧に変えます。ガスが増えるほど、AOピンの電圧は上がります。

項目値
電源電圧5 V
ヒーター電流約150 mA(最大800 mW)
検知するガスLPG、プロパン、ブタン、メタン、水素、アルコール、煙
検知範囲300〜10,000 ppm
予熱電源を入れるたびに数分、初めて使うときは24〜48時間
出力AO(アナログ)、DO(デジタル、LM393コンパレーター)

モジュールのピンと配線

単体のMQ-2センサーには6本の足がありますが、プロジェクトではたいてい既製のモジュールを使います。モジュールには負荷抵抗、LM393コンパレーターチップ、しきい値を設定する小さなポテンショメーター、電源LED、警報LEDが載っています。AOピンはガスの濃度に比例した電圧を出し、DOピンはポテンショメーターで設定したしきい値をガスのレベルが超えると状態が変わります。

モジュールのピン機能Arduino Uno
VCC電源(ヒーターを含む)5V
GNDグランドGND
AOアナログ出力、ガスで上昇A0
DOデジタル出力、しきい値を超えるとLOWD2
MQセンサーモジュールの表と裏
MQシリーズのモジュールの裏(左):LM393コンパレーター、青いしきい値用ポテンショメーター、POWERとDOUTのLED。右のMQ-135も同じモジュール設計です。
DOのしきい値を設定するには、きれいな空気の中でセンサーを数分間予熱し、DOUTのLEDがちょうど消える位置までポテンショメーターを回し、さらに少しだけ回します。こうすれば、小さな揺らぎでは警報が鳴らず、本当にガスが増えたときはすぐにLEDが点きます。

なぜ予熱が重要なのか

検出素子は、動作温度に達して初めて正しく反応します。電源を入れてから最初の数分は、AOの値が高いところから始まり、ゆっくり下がって落ち着きます。この間の読み取り値は当てになりません。そのため、コードでは最初の1〜3分は警報のチェックを飛ばすのがよいやり方です。新しいセンサーを初めて使うなら、値を安定させるために24〜48時間連続で動かす(エージング)ことがすすめられています。ヒーターが動いている間は金属のメッシュがかなり熱くなります。これは正常ですが、センサーのそばに燃えやすいものを置かないでください。

Arduinoでガス・煙警報器を作る

次のコードはアナログ値を読んでシリアルモニタに表示し、DOピンも確認します。アナログ値がしきい値を超えるか、DOピンがLOWになると、ブザーが鳴ります。

C++ (Arduino IDE)
1const int AO_PIN = A0;
2const int DO_PIN = 2;
3const int BUZZER = 8;
4const int LIMIT = 400;          // analog eşik (0–1023) / analog threshold
5
6void setup() {
7  Serial.begin(9600);
8  pinMode(DO_PIN, INPUT);
9  pinMode(BUZZER, OUTPUT);
10  delay(60000);                 // 1 dk ön ısıtma / 1 min warm-up
11}
12
13void loop() {
14  int value = analogRead(AO_PIN);
15  bool gas = digitalRead(DO_PIN) == LOW;   // çoğu modülde LOW = gaz / LOW = gas on most modules
16
17  Serial.println(value);
18
19  if (value > LIMIT || gas) {
20    tone(BUZZER, 2000, 300);    // alarm sesi / alarm tone
21  }
22  delay(500);
23}

ここでの400という値は決まったルールではありません。きれいな空気での値は、センサー、室温、湿度によって100〜300の間で変わります。まずセンサーを数分動かし、シリアルモニタできれいな空気での値を確認してから、それより十分高いところにしきい値を設定してください。テストするには、ライターのガスを火をつけずにセンサーの近くに一瞬近づけるだけで十分です。数秒で値が上がります。

アナログ値からppmへ:R0のキャリブレーション

モジュール上で、センサーは負荷抵抗(RL、ほとんどのモジュールでは1 kΩ)と分圧回路を構成しています。AOの電圧を使えば、センサーの抵抗(Rs)を計算できます。データシートのグラフは、ガスの濃度をRsそのものではなくRs/R0の比に対して示しています。R0は1000 ppmの水素中でのセンサーの抵抗で、きれいな空気ではRs/R0は約9.8です。つまり、きれいな空気中でセンサーを測り、9.8で割ればR0が求まります。

C++ (Arduino IDE)
1const float RL = 1.0;           // yük direnci (kΩ) / load resistor (kΩ)
2const float CLEAN_AIR = 9.8;    // temiz havada Rs/R0 / Rs/R0 in clean air
3float R0;
4
5float readRs() {
6  float v = analogRead(A0) * 5.0 / 1023.0;
7  if (v < 0.01) v = 0.01;       // sıfıra bölmeyi önle / avoid dividing by zero
8  return RL * (5.0 - v) / v;    // bölücüden Rs / Rs from the divider
9}
10
11void setup() {
12  Serial.begin(9600);
13  delay(60000);                 // ön ısıtma / warm-up
14  float sum = 0;
15  for (int i = 0; i < 50; i++) {
16    sum += readRs();
17    delay(100);
18  }
19  R0 = (sum / 50) / CLEAN_AIR;  // temiz havada kalibrasyon / clean-air calibration
20}
21
22void loop() {
23  float ratio = readRs() / R0;  // gaz arttıkça küçülür / falls as gas rises
24  Serial.println(ratio);
25  delay(1000);
26}

比が9.8前後なら空気はきれいで、1を下回るとガスの濃度が高いことを意味します。この比をppmに換算するにはデータシートの対数の曲線を使います。MQUnifiedsensorのようなライブラリには、この曲線がすぐ使える形で入っています。それでも、結果は目安と考えてください。温度、湿度、センサーの経年劣化が読み取り値に影響し、MQ-2は多くのガスに同時に反応するため、どのガスを測っているのかを確実には見分けられません。DHT11を加えて温度と湿度を監視するのがおすすめです。

MQ-2は学習用・趣味用のセンサーで、認証を受けたガス検知器ではありません。家庭のガス漏れや一酸化炭素中毒に対する唯一の備えとして使わないでください。そのためには、規格(たとえばEN 50194やEN 50291)を満たす市販の検知器を使ってください。自作の警報器は、それらに加える補助的なシステムと考えましょう。

MQセンサーのシリーズ:どれを選ぶ?

センサーもっとも感度が高いもの主な用途
MQ-2LPG、プロパン、メタン、水素、煙汎用のガス・煙警報器
MQ-3アルコールアルコールチェッカー
MQ-4メタン(都市ガス)都市ガスのガス漏れ警報器
MQ-5LPG、都市ガス台所のガス警報器
MQ-7一酸化炭素(CO)COの監視(ヒーターのサイクル制御が必要)
MQ-9COと可燃性ガスコンロやボイラーの周り
MQ-135アンモニア、ベンゼン、煙、NOx室内の空気の質

ESP32とRaspberry Pi PicoでMQ-2を使う

MQ-2のヒーターには5 Vが必要なので、モジュールのVCCピンをESP32のVIN(5V)ピンにつなぎます。ただし、モジュールを5 Vで給電すると、AOの出力は5 Vまで上がることがありますが、ESP32とPicoのアナログ入力が受け付けるのは最大3.3 Vです。AOとアナログピンの間に10 kΩと20 kΩの抵抗でできた分圧回路を入れ、信号を安全なレベルまで下げてください。ESP32なら、ガスを検知したときにスマートフォンへ通知を送ったり、リレーで換気扇を回したりするのも簡単です。Raspberry Pi Picoでは、同じ警報器をMicroPythonで次のように書けます。

MicroPython
1from machine import ADC, Pin
2import time
3
4gas = ADC(26)                  # GP26 (ADC0), AO bölücü üzerinden / AO through a divider
5buzzer = Pin(15, Pin.OUT)
6LIMIT = 30000                  # 0–65535 arası eşik / threshold
7
8time.sleep(60)                 # ön ısıtma / warm-up
9while True:
10    value = gas.read_u16()
11    print(value)
12    buzzer.value(1 if value > LIMIT else 0)
13    time.sleep(0.5)

MQ-2のプロジェクトアイデア

  • 台所のガス警報器:プロパンガスや都市ガスが漏れたら、ブザーを鳴らして赤いLEDを点ける警報器です。
  • 煙探知機:作業場ではんだの煙や焦げたにおいを検知すると知らせるシステムです。
  • 自動換気:ガスのレベルが上がると、リレーを通して換気扇を回す回路です。
  • 炎とガスの警報器:MQ-2を炎センサーと組み合わせ、2つの危険を同時に見張ります。
  • 通知付きのESP32検知器:ガスを検知したら、スマートフォンにTelegramのメッセージを送ります。
  • 空気の質の表示器:測った比をOLEDディスプレイにグラフで表示します。

よくある間違いと対処法

  • 電源を入れた直後に警報が鳴る:センサーがまだ温まっていません。最初の1〜3分は警報のチェックを飛ばしてください。
  • 値がまったく変わらない:AOではなくDOピンがアナログ入力につながっているか、モジュールに5 Vが来ていません。
  • DOUTのLEDが点きっぱなし:ポテンショメーターのしきい値が低すぎます。きれいな空気の中でLEDが消えるまで回してください。
  • 1日のうちに値がずれる:温度と湿度が変わっています。ときどききれいな空気の中でしきい値を設定し直してください。
  • ESP32でアナログ値がいつも最大:5 VのAO信号を直結しています。分圧回路を使ってください。
  • 電池がすぐになくなる:ヒーターは常に約150 mAを消費します。MQ-2は電池で長時間動かすのには向いていません。

MQ-2をブザーやLEDと組み合わせるのは、センサーから本物の警報システムへ進むいちばん簡単な方法です。BlueGraysアプリには、ガスセンサーの基本、炎・ガスセンサーの警報器、ESP32のMQ-2ガス・煙検知警報器が、回路図とコード付きでそろっています。

よくある質問

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

MQ-2は、LPG、プロパン、ブタン、メタン(都市ガス)、水素、アルコールの蒸気、煙に感度があります。一酸化炭素への反応は弱いです。多くのガスに同時に反応するため、単体ではどのガスがあるのかを見分けられません。

MQ-2の予熱にはどれくらいかかりますか?

電源を入れるたびに、読み取り値が落ち着くまで数分(実際には1〜3分)待ってください。新しいセンサーを初めて使うなら、もっとも安定した結果を得るために24〜48時間連続で動かすことがすすめられています。

都市ガスのガス漏れにはMQ-2とMQ-4のどちらを使うべきですか?

MQ-2もメタンを検知しますが、多くのガスに反応します。MQ-4は都市ガス(メタン)への選択性が高いため、より適しています。どちらにしても、認証を受けたガス検知器の代わりに趣味用のセンサーを使わないでください。

MQ-2で一酸化炭素を測れますか?

MQ-2の一酸化炭素への反応は弱いです。COにはMQ-7を使い、ヒーターを高い電圧と低い電圧の間でサイクルさせます。ただし、安全のためには必ずEN 50291規格を満たすCO検知器を使ってください。

センサーが熱くなるのは正常ですか?

正常です。内部のヒーターが検出素子を常に高温に保っているため、金属のメッシュは触るとかなり熱く感じます。センサーは燃えやすいものから離し、動作中は触らないでください。

MQ-2を電池で動かせますか?

動かせますが、長くは持ちません。ヒーターが常に約150 mAを消費するからです。2000 mAhのモバイルバッテリーで約13時間です。自分のプロジェクトの稼働時間は電池寿命ツールで計算できます。常時の監視が必要な場所では、コンセントにつなぐACアダプターを使ってください。

全プロジェクトを見る
ガスセンサーの使い方
#51初級
プレミアム

ガスセンサーの使い方

キッチンのガス漏れに人より先に気づく小さな見張り役です。ガスセンサーは空気中のガスを常に監視します。異常がないときは緑色のLEDが点灯し、ガス濃度が一定の値を超えると赤色のLEDが点灯してブザーが鳴ります。家庭用ガス警報器の仕組みを実際に確かめられます。

4.6(37)
50
炎・ガスセンサーで警報
#52上級
プレミアム

炎・ガスセンサーで警報

ガスが漏れたり炎が出たりすると、すぐに知らせる小さな見張り役です。ガスセンサーは空気中のガスを、炎センサーは火の光を監視します。異常がないときは緑色のLEDが点灯し、どちらかが危険を検出すると、赤色のLEDの点滅とブザーの断続音で警報を出します。危険がなくなるまで警報は続きます。

4.8(52)
67
ESP32 MQ-2ガス・煙検知アラーム
#122中級

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

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

4.7(28)
43