ESP32, IOT物聯網

【ESP32教學】第三十七篇:MQ-2 煙霧與易燃氣體感測器:ADC 類比讀取、靈敏度校正、蜂鳴器防護警報與雙範例實作

DIY 居家安全警報系統:ESP32 與 MQ-2 煙霧氣體檢測專題應用情境圖

一、 實驗說明:為什麼選擇 ESP32 結合 MQ-2 氣體感測器?

在打造 IoT 物聯網智慧家庭防護專題時,結合 ESP32 開發板 與 MQ-2 氣體感測模組 是最熱門且實用的組合!

核心技術與感測原理

  1. 二氧化錫 () 半導體氣敏材料: 在潔淨空氣中, 電導率較低;當環境中出現煙霧、瓦斯(LPG)、甲烷、丙烷、丁烷、氫氣或酒精等易燃氣體時,感測器電導率上升。

  2. 雙訊號輸出 (AO / DO):

    • AO (Analog Output): 輸出類比電壓。由於 ESP32 內建 12 位元 ADC(範圍 0 ~ 4095),可提供更細緻的氣體濃度變化解析。

    • DO (Digital Output): 透過板載 LM393 比較器手動設定觸發門檻,超過設定濃度時輸出數位低電平。

  3. 加熱元件預熱需求: 模組內部設有加熱絲,通電後需經預熱使氣體分子順利吸附與反應。

二、 🔍 MQ-2 模組說明:腳位與靈敏度調節

MQ-2 模組整合了 LM393 比較器晶片與可變電阻。

📋 模組腳位定義表 (Pin Definition)

腳位名稱 (Pin)類型功能說明 (Description)ESP32 開發板建議連接腳位
VCC電源電源正極,建議外接 5V 供加熱絲使用5V (或 VIN)
GND電源電源接地GND
DO (Digital Out)開關訊號數位輸出(超過門檻輸出 LOW)GPIO 4 (或任意數位輸入腳)
AO (Analog Out)類比訊號類比電壓輸出(濃度越高,數值越大)GPIO 34 (ADC1 專屬輸入腳)

⚙️ 靈敏度微調步驟:

  1. 將模組通電預熱約 1~3 分鐘。

  2. 觀看板載的訊號指示燈 (Signal LED)。

  3. 旋轉藍色可變電阻,調整至 LED 剛好熄滅;當有打火機氣體或煙霧靠近時,LED 亮起即完成門檻設定。

三、 🛒 準備好你的硬體工具了嗎?

在開始進行電路接線與程式編寫前,建議備齊 ESP32 開發板與 MQ-2 氣體感測模組,確保居家安全物聯網專題流暢:

👉 推薦選購: 歡迎直接購買米羅為您搭配好的 ESP32 物聯網應用學習套件,新手零基礎也能輕鬆上手!

四、 實驗所需材料與電路接線圖 (Hardware Setup)

本專題結合 ESP32 開發板、MQ-2 模組 與 蜂鳴器 (Buzzer),打造智慧氣體防護系統。

⚠️ 注意事項:

  • MQ-2 加熱絲功率較大,建議將 MQ-2 的 VCC 連接至 ESP32 的 5V (VIN) 供電,以確保加熱穩定。

  • ESP32 的 ADC 腳位(如 GPIO 34、35、36、39)僅支援 0~3.3V 電壓輸入。好在 MQ-2 的 AO 輸出電平最高約為 3.3V ~ 4V 左右,為安全起見,建議透過 AO 串接一個 10k 分壓電阻或直接接至 ADC1 腳位讀取。

🛒 準備材料

  • ESP32 開發板 x 1

  • MQ-2 煙霧氣體感測器模組 x 1

  • 有源蜂鳴器 (Buzzer) x 1

  • LED 發光二極體 + 220Ω 電阻 x 1

  • USB 傳輸線 x 1

  • 杜邦線 若干

⚡ 腳位對接說明 (Pin Mapping)

MQ-2 / 蜂鳴器腳位功能說明ESP32 對應引腳
MQ-2 VCC加熱與模組電源 (5V)5V (或 VIN)
MQ-2 GND電源接地GND
MQ-2 AO氣體濃度類比訊號GPIO 34 (ADC1_CH6)
MQ-2 DO門檻觸發數位訊號GPIO 4
Buzzer (+)蜂鳴器正極GPIO 23
LED (+)警報指示燈GPIO 2 (板載LED或外接)

五、 程式碼實作範例

🔹 程式範例一:使用 DO 數位門檻警報 (Digital Threshold Alarm)

本範例透過 ESP32 讀取 MQ-2 的 DO 數位腳位。當偵測到氣體超標時,立即觸發 GPIO 2 發光並驅動蜂鳴器警報。

const int MQ2_DO_PIN = 4;   // MQ-2 DO 連接至 ESP32 GPIO 4
const int BUZZER_PIN = 23;  // 蜂鳴器連接至 ESP32 GPIO 23
const int LED_PIN = 2;      // 警報 LED 連接至 ESP32 GPIO 2

void setup() {
  pinMode(MQ2_DO_PIN, INPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
  
  Serial.begin(115200);
  Serial.println("ESP32 MQ-2 數位門檻防護警報系統初始化...");
}

void loop() {
  int sensorState = digitalRead(MQ2_DO_PIN);

  if (sensorState == LOW) { // MQ-2 觸發時 DO 輸出 LOW
    Serial.println("【警告】ESP32 偵測到煙霧/易燃氣體濃度過高!");
    digitalWrite(LED_PIN, HIGH);
    digitalWrite(BUZZER_PIN, HIGH); // 觸發蜂鳴器
  } else {
    digitalWrite(LED_PIN, LOW);
    digitalWrite(BUZZER_PIN, LOW);  // 恢復正常
  }
  
  delay(200);
}

🔹 程式範例二:使用 AO 類比讀取與動態門檻警報 (ESP32 12-bit ADC & Level Monitoring)

本範例利用 ESP32 的 12 位元 ADC(範圍 0 ~ 4095)讀取 MQ-2 的 AO 類比數值,在序列埠監視器輸出即時濃度,並在數值超過設定門檻時啟動聲光警報。


const int MQ2_AO_PIN = 34;   // MQ-2 AO 連接至 ESP32 GPIO 34 (ADC1)
const int BUZZER_PIN = 23;   // 蜂鳴器連接至 ESP32 GPIO 23
const int LED_PIN = 2;       // 警報 LED 連接至 ESP32 GPIO 2

// ESP32 ADC 解析度為 12-bit (0 ~ 4095),設定氣體觸發門檻
const int GAS_THRESHOLD = 1500; 

void setup() {
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
  
  // ESP32 ADC 設定(可選:設定衰減以擴大輸入電壓範圍)
  analogSetAttenuation(ADC_11db); 

  Serial.begin(115200);
  Serial.println("ESP32 MQ-2 類比氣體濃度監測系統啟動...");
}

void loop() {
  int analogVal = analogRead(MQ2_AO_PIN);

  Serial.print("ESP32 讀取氣體濃度類比值 (AO): ");
  Serial.println(analogVal);

  if (analogVal > GAS_THRESHOLD) {
    Serial.println("⚠️ 警告:氣體濃度超越安全臨界值!");
    
    // 間歇性警報聲光效果
    digitalWrite(LED_PIN, HIGH);
    digitalWrite(BUZZER_PIN, HIGH);
    delay(100);
    digitalWrite(LED_PIN, LOW);
    digitalWrite(BUZZER_PIN, LOW);
    delay(100);
  } else {
    digitalWrite(LED_PIN, LOW);
    digitalWrite(BUZZER_PIN, LOW);
    delay(500);
  }
}

六、 常見問題與除錯 (FAQ)

Q1:MQ-2 剛接上 ESP32 時發熱是正常的嗎?

  • 解答: 是正常的。MQ-2 內部有加熱絲需持續發熱才能使半導體氣敏材料發揮效用。若發燙至燙傷或冒煙,請立即檢查 5V 與 GND 是否接反。

Q2:在乾淨空氣中,ESP32 讀到的類比數值 (AO) 偏高或浮動?

  • 解答: MQ-2 首次啟用或久未使用時,表面會吸附殘餘雜質。請讓 ESP32 保持通電、持續預熱 12~24 小時,讓加熱絲完全清除雜質,數值就會下降並穩定。

Q3:ESP32 的 ADC 讀取數值不準確或碰到 4095 頂天?

  • 解答: 請確認 AO 腳位是接在 ESP32 的 ADC1 專屬腳位(例如 GPIO 34、35、36、39),並在程式碼中加上 analogSetAttenuation(ADC_11db); 以支援 0 ~ 3.3V 的輸入電壓範圍。

🔗 延伸閱讀與推薦課程

👉 上一篇回顧:第三十六篇:專題ESP32氣象站+電子時鐘 OpenWeather 天氣預報搭配 ILI9341顯示螢幕

📘 總索引:ESP32 新手零基礎入門到 AI 人工智慧與 IoT 物聯網專題實作索引