我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


本篇是前篇(第六篇 ESP32類比讀取(analogRead):小夜燈)的另一種應用,主要談的是mq系列的氣體感測器,相同的是使用類比讀取,只是這顆感測器其實用途不大,做簡易實驗可,但是要做精確的研究,建議換商用的感測器,mq這系列的,坑太大了

mq系列有一個龐大的家族,在台灣市面上常見的大概是mq2, mq9, mq135這幾個,根據原廠提供的規格表(下圖),每一顆都有其主要感測的氣體,如果你有特定需要感測的目標,則依照下表去購買。

image
image

一般為了授課方便,我會拿容易取得的消毒用酒精進行測試,畢竟上課時間你不可能搬一個瓦斯筒來測試,所以我會選擇mq2, mq135, mq3這幾個,而mq2是最常見的。讀者若需要mq系列更詳細的細節,可參考原廠網站: https://playground.arduino.cc/Main/MQGasSensors/

一、實驗目的

本次實驗要學習利用氣體感測器感測是否有有害氣體洩漏,本處以容易取得的酒精取代瓦斯,並以燈號顯示環境的嚴重程度,當然後續講到網路及藍芽時,就可以透過網路發布LINE訊息給管理員進行緊急處置,請讀者持續關注。
1.感測有害氣體洩漏嚴重:紅燈
2.感測有害氣體洩漏徵兆:黃燈
3.感測環境氣體狀況正常:綠燈

二、材料準備

1.ESP32主板+麵包板
2.紅、黃、綠LED燈各1
3.杜邦線若干
4.酒精棉片若干:用來模擬瓦斯外洩
5.mq2氣體感應器:mq2外型如下圖,外型有點像麥克風,四跟腳位與上一篇的光敏電阻完全一樣,AO=類比輸出、DO=數位輸出,而在外罩內部是二氧化錫線,其工作原理是當空氣中有可燃氣體時,則會改變線的導電率,藉由變化來提供濃度「數值」的參考。

image
▲mq2的外觀

image
▲mq感測器內部的二氧化錫線

這裡必須要說明一下mq系列的使用方式,根據原廠的說明,由於出廠時會有些雜質附著在二氧化錫線上,因此開機後2hr內的數值會偏高,也會聞到一股淡淡的燒焦味(有人會以為晶片燒掉而暫停實驗),然後慢慢走向穩定,而個人建議至少等24hr會比較穩定。另外有人會問如果從mq拿到的數值代表什麼含意,是ppm還是ml?個人的意見是這個數值只是提供您「相對」比較用的,並不能準確轉換成ppm或者其他「絕對」數值。為什麼?

根據原廠提供的規格表會發現,能影響mq2數值的種類相當多,而我們空氣中或多或少都會殘留這些有機氣體,影響到感測的數值,但它只會反應一個數值,所以到底是給予哪一種氣體的數值已經無法知道?雖然網路可以搜尋到一些轉換ppm的公式(例如: http://sandboxelectronics.com/?p=165 ),但我實際套用後發現誤差相當大,個人建議是放棄轉ppm的方式,改以相對方式比較。

image
▲mq感測器對於不同氣體的敏感度分析

這裡對於要使用mq系列夥伴的建議是,先在環境中靜至一段時間,長期觀察數值的穩定狀態,根據筆者經驗,每顆mq都有自己的個性,有些50-100,有些200-400之間跳動,因此強加上一個固定門檻值是不行的,只能改成相對的方式,就是將長期的觀察值設定為正常狀態例如正常=100,接下來利用酒精靠近測試,例如跳至=700,了解mq的敏感度後,就可決定一個門檻數值,例如超過300代表濃度黃燈警戒,超過600則是亮出紅燈警告。由於每一個人的環境與感測器的狀況不同,這個數值由每個人測試後自行決定。

以上這種方式也可以用程式自動作長期取樣,等後續較深入的課程再做說明。

三、ESP32線路佈置

線路佈置方式與上一篇完全相同。只須將光敏電阻移除,換成mq2即可,相同的我們一樣使用AO作為類比輸出,接在ESP32麵包板左側序號5,實際GPIO13。

image

image

四、程式撰寫

相同的我們先測試mq2是否正常,我們將analogRead瓦斯數值放置在變數GasValue中,並顯示在視窗中查看。


void setup() {
  Serial.begin(115200);
  pinMode(13, INPUT);//選告GPIO 13作為輸入(Mq2氣體感測)
}

void loop() {
  int GasValue;//宣告變數GasValue
  GasValue = analogRead(13); //讀取的GPIO 13讀取的數值放在GasValue
  Serial.println(GasValue); //GasValue顯示在序列視窗
  delay(100);
}


過程中,若我們用酒精棉片靠近時,會發現數值忽然飆昇。
image

經過不斷檢驗與比較後,我們測試的門檻值分別為

1.綠燈正常:0~200
2.黃燈提示:200~400
3.紅燈警報:400以上

接下來我們可以寫程式來完成上述的設定。


void setup() {
  Serial.begin(115200);
  pinMode(15, OUTPUT);//選告GPIO15作為輸出(綠色LED)
  pinMode(2, OUTPUT);//選告GPIO 2作為輸出(黃色LED)
  pinMode(4, OUTPUT);//選告GPIO 4作為輸出(紅色LED)
  pinMode(13, INPUT);//選告GPIO 13作為輸入(Mq2氣體感測)
}

void loop() {
  int GasValue;//宣告變數GasValue
  GasValue = analogRead(13); //讀取的GPIO 13讀取的數值放在GasValue
  Serial.println(GasValue); //GasValue顯示在序列視窗
  if (GasValue < 200) {
    //小於200,代表一切正常,亮綠燈
    digitalWrite(15, HIGH);
    digitalWrite(2, LOW);
    digitalWrite(4, LOW);
  }

  if (GasValue >= 200 && GasValue < 400) {
    //200-400之間,黃燈顯示外洩警戒
    digitalWrite(15, LOW);
    digitalWrite(2, HIGH);
    digitalWrite(4, LOW);
  }
  if (GasValue >= 400) {
    //超過600,發出外洩警報
    digitalWrite(15, LOW);
    digitalWrite(2, LOW);
    digitalWrite(4, HIGH);
  }
  delay(100);
}


另外一個好玩的則是可以當作口臭感測器或屁感測器,畢竟人體是一個大型有機物,呼出的空氣內有大量的有機氣體,因此也可以嘗試對感測器呼一口氣,會有意想不到的效果喔。

arrow
arrow
    創作者介紹
    創作者 夜市 小霸王 的頭像
    夜市 小霸王

    夜市小霸王

    夜市 小霸王 發表在 痞客邦 留言(0) 人氣()