0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Arduino測量MQ氣體傳感器的PPM

科技觀察員 ? 來源:circuitdigest ? 作者:阿斯文斯·拉吉 ? 2022-11-21 16:44 ? 次閱讀

工業(yè)時(shí)代開始,我們?nèi)祟惥鸵恢痹谘杆侔l(fā)展。隨著每一次進(jìn)步,我們也污染了我們的環(huán)境,并最終使環(huán)境退化?,F(xiàn)在全球變暖是一個(gè)令人擔(dān)憂的威脅,甚至我們呼吸的空氣也變得至關(guān)重要。因此,空氣質(zhì)量監(jiān)測也開始變得越來越重要。因此,在本文中,我們將學(xué)習(xí)如何將任何MQ系列氣體傳感器Arduino一起使用,并以PPM(百萬分之一)顯示輸出。PPM也表示為毫克/升(mg/L)。這些傳感器通??捎?,對于測量如下所示的不同類型的氣體也很可靠

MQ 系列氣體傳感器

二氧化碳 : MG-811

一氧化碳:MQ-9

總揮發(fā)性有機(jī)化合物(TVOC):CCS811

二氧化碳當(dāng)量:CCS811

金屬氧化物: CCS811

氨: MQ-137

空氣質(zhì)量: MQ-135

液化石油氣、酒精、煙霧:MQ2

我們已經(jīng)將MQ2用于煙霧傳感,MQ-135用于空氣質(zhì)量監(jiān)測項(xiàng)目。在這里,我將使用sainsmart的MQ-137傳感器來測量氨(以ppm為單位)。有了傳感器,我瀏覽了所有可用的教程,發(fā)現(xiàn)沒有關(guān)于如何以ppm為單位測量氣體的適當(dāng)文檔。大多數(shù)教程要么只處理模擬值,要么介紹一些常數(shù),這些常數(shù)對于測量所有類型的氣體都不可靠。因此,在網(wǎng)上擺弄了很長時(shí)間后,我終于找到了如何使用這些MQ系列氣體傳感器使用Arduino測量ppm的方法。我從底部解釋的內(nèi)容,沒有任何庫,以便您可以將本文用于任何可用的氣體傳感器。

準(zhǔn)備硬件

MQ 氣體傳感器既可以作為模塊購買,也可以單獨(dú)作為傳感器購買。如果您的目的是僅測量ppm,那么最好單獨(dú)購買傳感器,因?yàn)樵撃K僅適用于使用數(shù)字引腳。因此,如果您已經(jīng)購買了該模塊,那么您必須執(zhí)行一個(gè)小技巧,這將進(jìn)一步討論?,F(xiàn)在,假設(shè)您已經(jīng)購買了傳感器。傳感器的引腳排列和連接如下所示

poYBAGN7OleAREBoAABA1mlTMo8984.jpg

如您所見,您只需將“H”的一端連接到電源,將“H”的另一端連接到地面。然后結(jié)合 A 和兩個(gè) B。將一組連接到電源電壓,另一組連接到模擬引腳。電阻器 RL在使傳感器工作方面起著非常重要的作用。因此,請記下您正在使用的值,建議使用47k的值。

如果您已經(jīng)購買了模塊,那么您應(yīng)該跟蹤PCB走線以找到R的值L在董事會(huì)中。Grauonline已經(jīng)為我們完成了這項(xiàng)工作,下面給出了MQ氣體傳感器板的電路圖。

poYBAGN7OlqAdmw1AACRptb4zuk370.png

如您所見,電阻器RL(R2)連接在Aout引腳和接地之間,因此如果您有一個(gè)模塊,則值為RL可以通過在模塊的 Vout 引腳和 Vcc 引腳上使用電阻模式下的萬用表進(jìn)行測量。在我的sainsmart MQ-137 氣體傳感器中,RL 的值為 1K,位于下圖所示的位置。

poYBAGN7OlyAZBpYAAB9M-Xu-r0897.jpg

但是,該網(wǎng)站聲稱它提供了一個(gè)可變的R電位器L正如您在電路圖中清楚地看到的那樣,這不是真的,電位器用于設(shè)置運(yùn)算放大器的可變電壓,與R無關(guān)L.因此,我們必須手動(dòng)焊接上面顯示的SMD電阻(1K),并且我們必須在接地和Vout引腳上使用自己的電阻器,該電阻器將充當(dāng)RL。RL 的最佳值將是數(shù)據(jù)表建議的 47K,因此我們將使用相同的值。

pYYBAGN7Ol2AHgucAAD18gUr6P4399.jpg

MQ氣體傳感器的PPM測量方法:

現(xiàn)在我們知道了 R 的值L讓我們繼續(xù)了解如何實(shí)際測量這些傳感器的ppm。像所有傳感器一樣,從數(shù)據(jù)表開始。MQ-137數(shù)據(jù)表在此處提供,但請確保您找到適合您的傳感器的正確數(shù)據(jù)表。在數(shù)據(jù)表中,我們只需要一個(gè)圖表,該圖表將針對(Rs / Ro)與PPM進(jìn)行繪制,這是我們計(jì)算所需的圖表。所以把它放在方便的地方。我的傳感器的那個(gè)如下所示。

poYBAGN7Ol-AKwjhAACKbiHgyoM321.png

事實(shí)證明,MQ137傳感器可以測量NH3,C2H6O甚至CO。但是,在這里我只對 NH3 的值感興趣。但是,您可以使用相同的方法來計(jì)算您喜歡的任何傳感器的ppm。這張圖是我們找到 ppm 值的唯一來源,如果我們能以某種方式計(jì)算 Rs/Ro(X 軸)的比率,我們可以使用此圖來查找 ppm(Y 軸)的值。要找到 Rs/Ro 的值,我們需要找到 Rs 的值和 Ro 的值。其中 Rs 是氣體濃度下的傳感器電阻,Ro 是清潔 Sir 中的傳感器電阻。

是的。。。這就是計(jì)劃,讓我們看看如何擺脫困境......

計(jì)算清潔空氣中的Ro值:

請注意,在圖中,Rs/Ro 的值對于空氣是恒定的(粗藍(lán)線),因此我們可以利用這一點(diǎn)來發(fā)揮我們的優(yōu)勢,并說當(dāng)傳感器在新鮮空氣中工作時(shí),Rs/Ro 的值將為 3.6 參考下圖

pYYBAGN7OmKAGDskAACWFju0rMw203.jpg

Rs/Ro = 3.6

從數(shù)據(jù)表中,我們還得到了一個(gè)計(jì)算 Rs 值的公式。公式如下所示。如果你有興趣知道這個(gè)公式是如何得出的,你可以通過jay con系統(tǒng)閱讀,我也想感謝他們幫助我解決這個(gè)問題。

poYBAGN7OmOAIS8fAAAQcy4SpZI929.png

在這個(gè)公式中,Vc的值是我們的電源電壓(+5V),R的值是R的值。L是我們已經(jīng)計(jì)算過的那個(gè)(我的傳感器為 47K)。如果我們編寫一個(gè)小的Arduino程序,我們也可以找到V的值。RL最后計(jì)算 Rs 的值。我在下面給出了一個(gè)Arduino程序,該程序讀取模擬電壓(VRL) 并使用此公式計(jì)算 Rs 的值,最后將其顯示在串行監(jiān)視器中。該程序通過評論部分得到了很好的解釋,所以我在這里跳過了它的解釋,以使本文保持簡短。

/*
* Program to measure the value of R0 for a know RL at fresh air condition
* Program by: B.Aswinth Raj
* Dated: 28-12-2017
*/
//This program works best at a fresh air room with temperaure Temp: 20℃, Humidity: 65%, O2 concentration 21% and when the value of Rl is 47K

#define RL 47 //The value of resistor RL is 47K
void setup() //Runs only once
{
Serial.begin(9600); //Initialise serial COM for displaying the value
}

void loop() {
float analog_value;
float VRL;
float Rs;
float Ro;
for(int test_cycle = 1 ; test_cycle <= 500 ; test_cycle++) //Read the analog output of the sensor for 200 times
{
analog_value = analog_value + analogRead(A0); //add the values for 200
}
analog_value = analog_value/500.0; //Take average
VRL = analog_value*(5.0/1023.0); //Convert analog value to voltage
//RS = ((Vc/VRL)-1)*RL is the formulae we obtained from datasheet
Rs = ((5.0/VRL)-1) * RL;
//RS/RO is 3.6 as we obtained from graph of datasheet
Ro = Rs/3.6;
Serial.print("Ro at fresh air = ");
Serial.println(Ro); //Display calculated Ro
delay(1000); //delay of 1sec
}

注意:Ro的值會(huì)有所不同,允許傳感器預(yù)熱至少10小時(shí),然后使用Ro的值。

pYYBAGN7OmSATMYKAAAjp3pv8Zs755.png

我得出的結(jié)論是,對于我的傳感器,Ro 的值為30KΩ(當(dāng) RL為 47kΩ)。您的可能會(huì)略有不同。

測量 Rs 的值:

現(xiàn)在我們知道了 Ro 的值,我們可以使用上述兩個(gè)公式輕松計(jì)算 Rs 的值。請注意,之前計(jì)算的 Rs 值適用于新鮮空氣條件,當(dāng)空氣中存在氨時(shí),該值將不同。計(jì)算 Rs 的值不是一個(gè)大問題,我們可以在最終程序中直接處理。

與PPM相關(guān)的Rs/Ro比率:

現(xiàn)在我們知道如何測量 Rs 和 Ro 的值,我們將能夠找到它的比率 (Rs/Ro)。然后我們可以使用圖表(如下所示)來關(guān)聯(lián) PPM 的相應(yīng)值。

poYBAGN7OmWAU6DaAAC2fMOwxcU774.jpg

雖然NH3線(青色)似乎是線性的,但實(shí)際上不是線性的。外觀是因?yàn)轺[片劃分不均勻。因此,Rs/Ro 和 PPM 之間的關(guān)系實(shí)際上是對數(shù),可以用下面的等式表示。

log(y) = m*log(x) + b

where, y = ratio (Rs/Ro) x = PPM m = slope of the line b = intersection point

要找到 m 和 b 的值,我們必須考慮氣體管線上的兩個(gè)點(diǎn) (x1,y1) 和 (x2,y2)。在這里,我們正在處理氨,所以我考慮的兩點(diǎn)是(40,1)和(100,0.8),如上圖所示(標(biāo)記為紅色),帶有紅色標(biāo)記。

m = [log(y2) - log(y1)] / [log(x2) - log(x1)] m = log(0.8/1) / log(100/40)

m = -0.243

同樣,對于 (b),讓我們從圖中獲取中點(diǎn)值 (x,y),即 (70,0.75),如上圖所示(標(biāo)記為藍(lán)色)

b = log(y) - m*log(x) b = log(0.75) - (-0.243)*log(70)

b = 0.323

就是這樣,現(xiàn)在我們已經(jīng)計(jì)算了 m 和 b 的值,我們可以使用以下公式將 (Rs/Ro) 的值等同于 PPM

PPM = 10 ^ {[log(ratio) - b] / m}

Program to calculate PPM using MQ sensor:

Thecomplete programto calculate PPM using a MQ sensor is given below. Few important lines are explained below.

在繼續(xù)程序之前,我們需要輸入負(fù)載電阻 (RL)、斜率 (m)、截距 (b) 和新鮮空氣阻力 (Ro) 的值。獲取所有這些值的過程已經(jīng)解釋過了,所以現(xiàn)在讓我們輸入它們

#define RL 47 //The value of resistor RL is 47K #define m -0.263 //Enter calculated Slope #define b 0.42 //Enter calculated intercept #define Ro 30 //Enter found Ro value

然后讀取傳感器兩端的壓降(VRL)并將其轉(zhuǎn)換為電壓(0V至5V),因?yàn)槟M讀數(shù)將僅返回0到1024之間的值。

VRL = analogRead(MQ_sensor)*(5.0/1023.0); //Measure the voltage drop and convert to 0-5V

現(xiàn)在,計(jì)算了VRL的值,您可以使用上面討論的公式來計(jì)算Rs的值以及比率(Rs / Ro)

ratio = Rs/Ro; // find ratio Rs/Ro

最后,我們可以使用對數(shù)公式計(jì)算 PPM,并將其顯示在我們的串行監(jiān)視器上,如下所示

double ppm = pow(10, ((log10(ratio)-b)/m)); //use formula to calculate ppm Serial.print(ppm); //Display ppm

在具有Arduino和MQ-137的硬件上顯示PPM值:

所有的理論已經(jīng)足夠了,讓我們用傳感器和LCD構(gòu)建一個(gè)簡單的電路來顯示PPM中的氣體值。這里我使用的傳感器是MQ137,用于測量氨,我的設(shè)置的電路圖如下所示。

poYBAGN7OmmAXeZrAADt5w1GUjo990.png

如電路圖所示連接傳感器和LCD,并上傳程序結(jié)束時(shí)給出的代碼。您必須如上所述修改 Ro 值。如果您使用除 4.7K 以外的任何其他電阻作為 RL,請同時(shí)更改參數(shù)值。

在獲取任何讀數(shù)之前,請至少讓設(shè)置通電 2 小時(shí)(建議 48 小時(shí)以獲得更準(zhǔn)確的值)。這段時(shí)間稱為加熱時(shí)間,在此期間傳感器預(yù)熱。在此之后,您應(yīng)該能夠看到 PPM 的值和 LCD 屏幕上顯示的電壓,如下所示。

poYBAGN7OmuAaZ7jAADOngPkQqI854.jpg

現(xiàn)在為了確保這些值是否真的與氨的存在有關(guān),讓我們將這個(gè)設(shè)置放在一個(gè)封閉的容器中,并將氨氣送入其中以檢查值是否在增加。我沒有合適的 PPM 儀表進(jìn)行校準(zhǔn),如果有人可以測試此設(shè)置并讓我知道,那就太好了。

/*

* Program to measure gas in ppm using MQ sensor

* Program by: B.Aswinth Raj

* Dated: 28-12-2017

*/

#define RL 47 //The value of resistor RL is 47K

#define m -0.263 //Enter calculated Slope

#define b 0.42 //Enter calculated intercept

#define Ro 20 //Enter found Ro value

#define MQ_sensor A0 //Sensor is connected to A4


#include //Header file for LCD from

const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connected

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


void setup() {

lcd.begin(16, 2); //We are using a 16*2 LCD display

lcd.print("NH3 in PPM"); //Display a intro message

lcd.setCursor(0, 1); // set the cursor to column 0, line 1

lcd.print("-CircuitDigest"); //Display a intro message


delay(2000); //Wait for display to show info

lcd.clear(); //Then clean it

}


void loop() {


float VRL; //Voltage drop across the MQ sensor

float Rs; //Sensor resistance at gas concentration

float ratio; //Define variable for ratio



VRL = analogRead(MQ_sensor)*(5.0/1023.0); //Measure the voltage drop and convert to 0-5V

Rs = ((5.0*RL)/VRL)-RL; //Use formula to get Rs value

ratio = Rs/Ro; // find ratio Rs/Ro



float ppm = pow(10, ((log10(ratio)-b)/m)); //use formula to calculate ppm


lcd.print("NH3 (ppm) = "); //Display a ammonia in ppm

lcd.print(ppm);

lcd.setCursor(0, 1); // set the cursor to column 0, line 1

lcd.print("Voltage = "); //Display a intro message

lcd.print(VRL);


delay(200);

lcd.clear(); //Then clean it

}


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 氣體傳感器
    +關(guān)注

    關(guān)注

    14

    文章

    532

    瀏覽量

    37623
  • PPM
    PPM
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    16911
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6455

    瀏覽量

    186369
收藏 人收藏

    評論

    相關(guān)推薦

    MQ-2普敏氣體煙霧傳感器

    MQ-2普敏氣體煙霧傳感器
    發(fā)表于 08-14 22:50

    arduino學(xué)習(xí)筆記35 - Arduino uno + MQ-2氣體傳感器演示實(shí)驗(yàn)

    一大早就遇到問題了,果斷發(fā)帖求助,果斷自行答案,雖然不是什么權(quán)威的解析,但是還是有點(diǎn)道理的,今天玩了一個(gè)Arduino+MQ-2氣體傳感器的實(shí)驗(yàn),也寫了一下文檔,現(xiàn)在就發(fā)出來給大家,方便大家調(diào)試
    發(fā)表于 10-24 11:02

    MQ-5氣體傳感器

    有沒有MQ-5氣體傳感器的AD庫?自己想畫的但是找不到他的各個(gè)引腳功能,怎么辦
    發(fā)表于 03-14 14:42

    基于電化學(xué)傳感器Arduino兼容電化學(xué)氣體檢測電路CN0357

    對不同的氣體傳感器系統(tǒng)進(jìn)行原型設(shè)計(jì)。對于測量ppm氣體濃度分?jǐn)?shù)很重要的應(yīng)用,使用ADA4528-2和ADR3412使電路性能適合與16位AD
    發(fā)表于 03-12 10:39

    MQ-2氣體傳感器模塊介紹

    傳感器,Pellistor基本上測量所有可燃氣體,但它們對通過燒結(jié)物更快擴(kuò)散的較小分子更敏感。可測量的濃度范圍通常從幾百 ppm 到幾個(gè)體積
    發(fā)表于 06-23 07:29

    如何使用lua腳本為MQ7、MQ135氣體傳感器和顆粒物傳感器編碼?

    如何使用 lua 腳本為 MQ7、MQ135 氣體傳感器和顆粒物傳感器編碼。
    發(fā)表于 04-27 07:23

    如何使用MQ8傳感器?

    我正在使用這個(gè)工作庫從傳感器中提取 PPM 中的 H2 和酒精。 我只需要項(xiàng)目的 PPM,因?yàn)槲蚁雽⑵渥鳛?osc 消息發(fā)送。 但是庫的代碼是編的所以我只能用整個(gè)數(shù)據(jù)表而不是ppm
    發(fā)表于 05-16 08:14

    MQ307A型CO氣體傳感器

    MQ307A型CO氣體傳感器 MQ307A是一種SnO2半導(dǎo)體氣體傳感器,它在探測CO
    發(fā)表于 04-13 16:31 ?34次下載

    MQ-138氣體傳感器

    MQ-138氣體傳感器 應(yīng)用于家庭、環(huán)境的有害氣體探測裝置。
    發(fā)表于 04-14 15:07 ?195次下載

    MQ系列氣體傳感器的詳細(xì)中文資料概述

    本文檔的主要內(nèi)容介紹的是MQ系列氣體傳感器的詳細(xì)中文資料概述包括了:MQ-2到MQ-9
    發(fā)表于 06-08 08:00 ?256次下載
    <b class='flag-5'>MQ</b>系列<b class='flag-5'>氣體</b><b class='flag-5'>傳感器</b>的詳細(xì)中文資料概述

    dfrobot模擬LPG氣體傳感器 (MQ6)介紹

    基于氣敏元件的MQ6氣體傳感器,可以很靈敏的檢測到空氣中的丁烷、丙烷、LNG、LPG等氣體。與Arduino專用
    的頭像 發(fā)表于 11-19 10:16 ?2347次閱讀
    dfrobot模擬LPG<b class='flag-5'>氣體</b><b class='flag-5'>傳感器</b> (<b class='flag-5'>MQ</b>6)介紹

    使用MQ 2氣體傳感器的煙霧探測

    電子發(fā)燒友網(wǎng)站提供《使用MQ 2氣體傳感器的煙霧探測.zip》資料免費(fèi)下載
    發(fā)表于 10-27 09:38 ?6次下載
    使用<b class='flag-5'>MQ</b> 2<b class='flag-5'>氣體</b><b class='flag-5'>傳感器</b>的煙霧探測<b class='flag-5'>器</b>

    使用MQ3酒精傳感器Arduino Breathalyzer項(xiàng)目

    電子發(fā)燒友網(wǎng)站提供《使用MQ3酒精傳感器Arduino Breathalyzer項(xiàng)目.zip》資料免費(fèi)下載
    發(fā)表于 11-02 16:19 ?2次下載
    使用<b class='flag-5'>MQ</b>3酒精<b class='flag-5'>傳感器</b>的<b class='flag-5'>Arduino</b> Breathalyzer項(xiàng)目

    MQ 2氣體傳感器Arduino

    電子發(fā)燒友網(wǎng)站提供《MQ 2氣體傳感器Arduino.zip》資料免費(fèi)下載
    發(fā)表于 11-17 10:24 ?2次下載
    <b class='flag-5'>MQ</b> 2<b class='flag-5'>氣體</b><b class='flag-5'>傳感器</b><b class='flag-5'>Arduino</b>

    基于MQ傳感器的空氣分析儀

    我想只使用低成本的 MQ 傳感器來監(jiān)控空氣中的每個(gè)組件,所以我訂購了一套 9 個(gè) MQ 傳感器并做了這個(gè)項(xiàng)目。其中我可以僅使用一些 MQ
    發(fā)表于 12-07 11:31 ?4次下載