Arduino筆記(44):NodeMCU連接MQ-135 空氣品質檢測感測器

我手邊有幾個氣體感測器,買了好一段時間了,一直沒有實作接上線路,利用最近實作ESP8266的機會,又將傳感器 MQ-135、 MQ-2及MS-3拿出來,接上 NodeMCU,看看傳感器偵測的狀況。這篇文章要實作的是 MQ-135 空氣品質感測器,如何偵測空氣中的 PPM(parts per million),百萬分點濃度,定義為百萬分之一。

其他氣體類的傳感器,種類很多,包括:
  • MQ-2:煙霧氣體(液化氣 / 丙烷 / 氫氣)感測器模組
  • MQ-3:酒精感測器模組
  • MQ-4:天然氣、甲烷感測器模組
  • MQ-5:液化氣、天然氣、瓦斯氣體感測器
  • MQ-6:丙烷、液化氣氣體感測器模組模組
  • MQ-7:一氧化碳感測模組
  • MQ-8:氫氣氣體感測器模組空氣檢測模組
  • MQ-9:一氧化碳 / 甲烷 / 液化氣可燃氣體感測器模組
  • MQ-131:HO3 臭氧氣體感測模組臭氧傳感器模組
  • MQ-135:空汙檢測(氨 / 苯 / 酒精)有害氣體感測器模組
  • MQ-136:硫化氫液化氣煙霧感測器模組
  • MQ-137:氣體 Ammonia 阿摩尼亞 NH3 氨氣檢測模組
  • MQ-138:甲醛偵測感測器模組甲醛酮醇類氣體傳感器模組
  • MQ-139:氟利昂(氟氯烷)檢測感測器氣體檢測模組
  • MQ-214:甲烷感測器 可燃氣感測器模組
MQ135氣體感測器所使用的氣敏材料是在清潔空氣中電導率較低的二氧化錫(SnO2)。當感測器所處環境中存在污染氣體時,感測器的電導率隨空氣中污染氣體濃度的增加而增大。使用簡單的電路即可將電導率的變化轉換為與該氣體濃度相對應的輸出信號。

MQ135感測器對氨氣、硫化物、苯系蒸汽的靈敏度高,對煙霧和其他有害氣體的監測也很理想。是一款適合多種應用的低成本感測器。MQ-135可用於家庭環境的有害氣體探測裝置,適宜於氨氣、芳族化合物、硫化物、苯系蒸汽、煙霧等氣體有害氣體的探測,氣體敏感元件測試濃度範圍:10 到 1000ppm。

MQ-135空氣品質感測器,使用前請預熱20秒左右,測量的資料才穩定。如果選擇AOUT,模擬量輸出,那樣就不用管電位器了,直接將AOUT腳接 NodeMCU的 A0,就可以了。

在正常環境中沒有氣體被檢測的情況下,設定感測器輸出電壓值為參考電壓。這時,AOUT端的電壓在1V左右,當感測器檢測到被測氣體時,電壓每升高0.1V,實際被測氣體的濃度增加20ppm (簡單的說:1ppm=1mg/kg=1mg/L=1×10(-6) 常用來表示氣體濃度)。

根據這個參數就可以在 NodeMCU 裏面將測得的類比量電壓值轉換為濃度值。注意:如果是用來做精密儀器,請購買市場上標準的校準儀器,不然存在誤差,因為,輸出濃度和電壓關係的比值並非線性,而是趨於線性。

[材料]

  • NodeMCU x 1
  • MQ-158 x 1
  • 麵包板(含電源模組) x 1
  • 連接線  x 3

[線路連接]

NodeMCU
MQ-135
麵包板電源
---
VCC
5V
---
GND
GND
A0
---
A0


[安裝 MQ135 Library]

先到 Github 下載 MurrayBoz/NodeMCU-MQ135,按右邊綠色選項「Clone or download」,再選「Download ZIP」。

• 將下載的壓縮檔解壓縮,放在 Arduino 主程式下的 libraries目錄內,以我的電腦來說,Arduino安裝在 C:\Program Files (x86)\Arduino,點進目錄有一個 libraries的子目錄,下載後解壓縮的目錄,整個放進  libraries 目錄,重新啟動 Arduino即可。

[程式]

#include <MQ135.h>
#define ANALOGPIN A0

int PPMStatus = 0;
int PPMStatusOld = 0;

float  airTemperature, airHumidity, ppm, ppmbalanced, rzero;
int initStep=1;                 // 1 = Connection in progress / 2 = Connection Done 

MQ135 gasSensor = MQ135(ANALOGPIN);

void setup() {
  Serial.begin(9600);
}

void loop() {

  // 當時室內大約的溫度跟濕度,讓 getCorrectPPM進行校正
  airTemperature = 28;
  airHumidity = 50;

  rzero = gasSensor.getRZero(); //取得rzero 校準值
  Serial.print("RZero=");
  Serial.println(rzero);    // 持續顯示 rzero 值
   
  ppm = gasSensor.getPPM(); // 取得 ppm 值
  Serial.print("PPM=");
  Serial.println(ppm); 
  
  ppmbalanced = gasSensor.getCorrectedPPM(airTemperature, airHumidity);  // 取得修正的 ppm 值
  Serial.print("PPM Corrected=");
  Serial.println(ppmbalanced); 
  Serial.println();

  delay(5000);
  }

[實作結果]

最下方的兩個感測值,是使用打火機讓瓦斯漏出在 MQ-135周圍時,測得的數據

[參考資料]


Post a Comment

較新的 較舊