瓦斯已經帶給我們在生活中非常大的便利,但每隔一段時間,總會看到關於瓦斯氣爆、瓦斯漏氣危害的新聞報導。許多家庭因為日常中的一個不注意,就造成了難以挽回的遺憾。
如果我們能利用物聯網技術,製作一個自動監測環境中瓦斯濃度的警報系統,當偵測到濃度超過安全標準時,能即時:
- 📱 發送 Line 通知到手機(個人或群組)
- 🔔 發出本地警報聲提醒在場人員
- 🪟 甚至自動啟動其他裝置(如打開換氣扇、窗戶)
這樣的系統就能大幅降低瓦斯危害的風險!本文將一步步帶您實現這個目標。
系統所需軟硬體元件
| 類別 | 元件名稱 | 說明 |
|---|---|---|
| 微控制器 | WeMos D1 mini (ESP8266) | 具備 Wi-Fi 功能的 Arduino 相容開發板 |
| 氣體感測器 | MQ-4 甲烷/天然氣感測器 | 偵測 CH4 甲烷,靈敏度範圍 200~10000 ppm |
| 通知服務 | Line Notify | 免費的 Line 官方通知 API,可發送至個人或群組 |
| (選用)通知平台 | IFTTT Webhooks | 可作為 Line Notify 的替代觸發方式 |
| (選用)監控介面 | RemoteMe.org | 提供 Web 儀表板與 APP 介面查看即時數值 |
| (選用)手機APP | Android 自製 APP | 透過 TCP Socket 直接讀取 ESP8266 數值 |
關於 MQ-4 瓦斯感測器
MQ-4 氣體感測器是甲烷(CH4)、天然氣感測器模組。其內部含有一個帶電化學氣體感測器的小型加熱器,透過感測元件電阻值的變化來判斷氣體濃度。
MQ-4 重要規格說明:
- 偵測氣體:甲烷(CH4)、天然氣(LPG)
- 靈敏度範圍:200 至 10,000 ppm(官方規格表)
- 工作電壓:穩定的 5V 直流電
- 工作電流:最少 150mA,建議 250mA 以上
- ⚠️ 預熱時間:每次通電後至少需要 1 分鐘加熱穩定,才能取得準確數據
關於電流注意事項:由於 MQ-4 需要 150~250mA 的電流,而 WeMos D1 mini 的 3.3V 引腳只能提供 50mA,必須由外部電源(5V)直接供電給感測器,不能直接接在開發板引腳上。
電路接線圖
基本接線(使用 USB 5V 供電)

外接電源接線(建議:更穩定的 5V 獨立電源)

整體系統架構圖

第一步:設定 Line Notify
WeMos D1 mini 透過 Line Notify 這個中介工具,可以在 MQ-4 偵測到瓦斯濃度超標時,即時發送通知到 Line 個人訊息或群組。
Line Notify 官方網站:https://notify-bot.line.me/zh_TW/

設定步驟:
- 進入 Line Notify 官網,點選右上角 「登入」,使用您的 Line 帳號登入。
- 登入後,點選右上角自己的帳號名稱,選擇 「個人頁面」。
- 向下捲動找到 「發行存取權杖(開發人員用)」,點選 「發行權杖」。

- 填寫權杖名稱(如:
瓦斯偵測通知),方便之後辨識。 - 選擇接收通知的聊天室(可選擇個人訊息,或已建立的群組「瓦斯偵測通知」)。

- 按下 「發行」,系統會產生一組 Token 存取金鑰。

⚠️ 重要提醒:這組 Token 號碼只出現這一次!請務必立刻複製並妥善保存,之後無法再次查詢。
- 設定完成後,Line 會通知您有新的 Line Notify 服務建立,並提醒您邀請「Line Notify」加入指定群組。

第二步:程式碼設計(WeMos D1 mini / ESP8266)
基本版:取得感測器原始數值並發送 Line 通知
此版本程式碼使用 TridentTD_LineNotify 程式庫來發送 Line 通知。請先到該連結下載 .zip 壓縮檔,解壓縮後將資料夾放入 Arduino IDE 的 libraries 目錄下。
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <TridentTD_LineNotify.h>
// ★ 修改成您自己的 Line Notify Token
#define LINE_TOKEN "your_line_notify_token_here"
// ★ 修改成您的 Wi-Fi 設定
const char* ssid = "your_wifi_ssid";
const char* password = "your_wifi_password";
const int MQ4_PIN = A0; // MQ-4 類比訊號接 A0 引腳
// 通知時間設定
const int COUNT_NORMAL = 1800; // 正常狀態:每 30 分鐘通知一次
const int COUNT_WARNING = 10; // 超標狀態:每 10 秒通知一次
const int GAS_THRESHOLD = 500; // 瓦斯濃度警戒值(原始 ADC 數值)
int count_number = 0;
int count_seconds = COUNT_NORMAL;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("連線中");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n連線成功!IP: " + WiFi.localIP().toString());
}
void loop() {
int sensorValue = analogRead(MQ4_PIN);
Serial.print("MQ-4 感測值: ");
Serial.println(sensorValue);
// 根據濃度設定通知間隔
count_seconds = (sensorValue > GAS_THRESHOLD) ? COUNT_WARNING : COUNT_NORMAL;
if (count_number >= count_seconds) {
String message = "瓦斯濃度:" + String(sensorValue) + " (ADC值)\n";
if (sensorValue > GAS_THRESHOLD) {
message += "⚠️ 瓦斯濃度超標!請立即檢查瓦斯開關!";
} else {
message += "✅ 目前濃度正常";
}
LINE.setToken(LINE_TOKEN);
LINE.notify("\n" + message);
count_number = 0;
}
count_number++;
delay(1000); // 每秒執行一次
}
程式邏輯說明:
- 正常狀態(濃度低於閾值):每 30 分鐘發送一次例行通知
- 超標狀態(濃度高於閾值):每 10 秒持續發送警報通知,直到濃度恢復正常
第三步:高精度濃度計算(高級版)
為什麼需要高級版?
基本版取得的是 ESP8266 類比引腳的 ADC 原始數值(0~1023),這個數值並不等同於真實的 ppm 濃度。為了取得準確的 ppm 數值,我們需要根據 MQ-4 的規格表進行數學計算。
MQ-4 感測器原理

MQ-4 感測器內建電阻(RS),其阻值會隨著氣體濃度改變:
- 濃度越高 → RS 阻值越低
- 濃度越低 → RS 阻值越高
感測器還需要串聯一個負載電阻 RL(通常為 10kΩ~47kΩ),用於調整靈敏度。阻值越大,感測器越靈敏。
電路如下:



計算公式推導(歐姆定律應用)
根據歐姆定律(V = I × R),以及 RS 和 RL 串聯的電路,我們可以推導出感測器電阻 RS 的公式:
RS = [(Vc × RL) / VRL] - RL
其中:
Vc= 電源電壓(5V)RL= 負載電阻值VRL= RL 兩端測量到的電壓
從 MQ-4 規格表的特性曲線圖(log-log 刻度)中,我們可以讀出 CH4 濃度與 RS/R0 比值的關係:

參考曲線圖中的兩個點 (200, 2.6) 和 (5000, 0.9),計算對數線性方程式:
斜率 m = log(0.9/2.6) / log(5000/200) = -0.329
截距 b = log(0.9) - (-0.329) × log(5000) = 1.17
ppm 濃度公式:
x (ppm) = 10 ^ { [log(RS/R0) - b] / m }
步驟一:先測量 R0 值(空氣中的基準電阻)
將以下程式燒錄到 WeMos D1 mini,放置在通風良好的正常空氣中跑幾分鐘,待數值穩定後記下 R0 值:

步驟二:帶入 R0 值計算真實 ppm

高級版整合(自動計算 R0 + Line 通知)
上面兩步驟合而為一,開機自動計算 R0,並即時換算出真實的 CH4 ppm 濃度:



收到的 Line 通知範例(高級版):


第四步(選用):透過 IFTTT 通知 Line
除了直接使用 Line Notify API 外,也可以透過 IFTTT(If This Then That) 這個自動化平台來觸發 Line 通知。IFTTT 串接了 Gmail、Twitter、Facebook、Line 等大量知名平台的服務,是物聯網整合的利器。
IFTTT 官方網站:https://ifttt.com/
IFTTT 設定步驟:
- 進入 IFTTT 網站,點選「Sign up」註冊並登入(支援 Google/Facebook 第三方登入)。
- 點選「Create」建立新的自動化服務。

- 點選「+ This」設定觸發條件。

- 搜尋「webhooks」並選擇 Webhooks 服務。

- 選擇「Receive a web request」。

- 填入事件名稱「gas_notify」,按下建立。

- 點選「+ That」設定執行動作,搜尋並選擇「Line」服務。

- 選擇「Send message」,設定接收通知的對象(個人或群組),訊息內容中可使用
Value1、Value2、Value3三個欄位帶入動態數值。

- 確認設定無誤後按下完成。

- 完成後,在 IFTTT 首頁找到剛建立的事件,點選 Webhooks 圖示 → 右上角「Documentation」,取得您的 Webhooks 專屬 Key。


- 若測試失敗,請先確認 Line Notify 連動服務已啟用。回到剛建立的服務,點選 Line 圖示確認連動狀態:


按下「同意並連動」後,Line 會收到連動成功的提示訊息:

IFTTT 介面也會顯示 Line 連動服務為 Active 狀態:

使用 IFTTT 的程式碼修改(ESP8266 部分):



透過 IFTTT 收到的 Line 通知:


第五步(選用):使用 RemoteMe 建立 Web 儀表板
若想在瀏覽器或手機上即時查看瓦斯濃度的數值儀表板,可以使用 RemoteMe.org 這個免費服務,不需要自己架設伺服器。
RemoteMe 官方網站:RemoteMe.org
設定步驟:
- 前往 RemoteMe.org 註冊並登入帳號。

- 進入「Variables」選項,點選右上角「+Add」新增變數:
- Name:
Gas_detection - Mode:
Local - Type:
Integer

- 前往「Devices」,新增「New Network Device (Esp)」:
- Type:Arduino
- Name:
ESP_Gas_detection


- 在設備旁點選三條線圖示,選擇「Code Generator Wizard」,依精靈步驟設定:

- 步驟一:勾選
Gas_detection變數

- 步驟二:填入 Wi-Fi SSID 和密碼

- 步驟三:啟動「直接連線」

- 步驟四:啟動 Debug Serial,鮑率設 115200

- 下載並修改生成的程式碼,加入類比訊號讀取並傳送至
setGas_detection()函數:

- 新增一個 Web 設備(Web_Gas_ppm),建立儀表板介面:


- 點選設備旁的箭頭 → 選擇「index」→「Edit with wizard」:


- 插入「Insert Component」→ 選擇「gauge」儀表元件:


- 設定儀表參數:
- Name:
Gas_detection - Title:
Gas ppm - Min:
0,Max:1200,Step:100


- 完成後可以選擇開新視窗查看,或生成 URL/QR Code 分享使用:



最終成果 — 即時在網頁和手機上查看瓦斯濃度值:


第六步(選用):自己開發 Android APP 讀取 ESP8266 數值
若您有 Android 開發經驗,也可以自行開發 APP,透過 TCP Socket 直接與 ESP8266 通訊,即時接收瓦斯感測數值。
基本架構:
- ESP8266 和 Android 手機必須在同一個區域網路(同一個 Wi-Fi)
- ESP8266 在接收到數值後,主動透過 TCP 傳送給 APP
- APP 使用一個 TCP Server(Port 8266)持續監聽接收資料,另一個 Thread 負責更新 UI 顯示
ESP8266 程式碼:

Android APP 程式碼(MainActivity + MobileServer + Layout XML):



APP 執行結果:

結語
這篇文章介紹了多種實現 MQ-4 瓦斯濃度偵測系統的方法,涵蓋從基本的 ADC 數值讀取,到利用對數公式計算真實 ppm 濃度、透過 Line Notify 即時通知、IFTTT 整合、RemoteMe Web 儀表板,以及自製 Android APP。
物聯網的強大之處在於它的靈活性與實用性 — 我們可以用相對低廉的成本,在家中建構一套守護家人安全的智慧系統。隨著 5G 通訊技術逐漸普及,物聯網應用將更加無縫地融入我們的日常生活,許多生活上的需求也將整合在手機或穿戴式裝置上,讓我們的生活更加安全、便捷。
您可以進一步參考:



