這篇文章將為大家詳細(xì)講解有關(guān)如何利用支持MicroPython的TPYBoard開發(fā)板自制PM2.5檢測儀,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
創(chuàng)新互聯(lián)建站自2013年起,先為銅山等服務(wù)建站,銅山等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為銅山企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
秋冬季節(jié),霧霾天氣的持續(xù),讓人們對空氣質(zhì)量的關(guān)注程度提升。而近期人們對于空氣質(zhì)量的關(guān)注總也繞不開一個詞——“PM2.5”。《環(huán)境空氣質(zhì)量標(biāo)準(zhǔn)》將PM2.5、臭氧(8小時濃度)納入常規(guī)空氣質(zhì)量評價(jià),是我國首次制定關(guān)于PM2.5的監(jiān)測標(biāo)準(zhǔn)。細(xì)顆粒物又稱細(xì)粒、細(xì)顆粒、PM2.5.細(xì)顆粒物指環(huán)境空氣中空氣動力學(xué)當(dāng)量直徑小于等于 2.5 微米的顆粒物。PM2.5粒徑小、面積大、活性強(qiáng)、易附帶有毒、有害物質(zhì)(例如,重金屬、微生物等)。PM2.5對人體健康有著致命的危害。
那么PM2.5(細(xì)顆粒物)是什么?
因?yàn)楦鲊鴺?biāo)準(zhǔn)不一樣,天氣預(yù)報(bào)也報(bào)空氣質(zhì)量,預(yù)報(bào)的空氣質(zhì)量與實(shí)際的空氣質(zhì)量一樣嗎?但這個問題,想動手制作一個PM2.5檢測儀,有了自己動手制作的PM2.5檢測儀的話,當(dāng)空氣質(zhì)量較差或者嚴(yán)重污染的時候,提醒家人,同學(xué)和身邊的人盡量減少戶外活動,真正減少吸入細(xì)顆粒物。
制作一個PM2.5檢測儀的想法是好,在1個小時內(nèi)能否制作出一個PM2.5檢測儀呢?利用C/C++是貼近硬件的語言來做的話,要花好長一段時間甚至半年先學(xué)習(xí)C語言以后,再考慮動手制作,更不用說1個小時內(nèi)制作出一個PM2.5檢測儀。
接下來我介紹一個在1個小時內(nèi)制作一個PM2.5的方法,也就是利用擁有自家的解析器、編譯器、虛擬機(jī)和類庫等,也就是具備二次開發(fā)和環(huán)境的TPYBoard開發(fā)板制作一個PM2.5檢測儀吧。
1. PM2.5檢測儀的目的
采用TPYBoard開發(fā)板為控制處理器,通過串口由PM2.5灰塵傳感器GP2Y1010AU0F檢測低程度的空氣污染PM2.5能夠甄別香煙和室內(nèi)/室外灰塵,并通過SPI接口由LCD5110顯示屏顯示當(dāng)前空氣粉塵濃度(ug/m?)。當(dāng)空氣中粉塵濃度達(dá)到所設(shè)定限度點(diǎn)亮不同的LED燈來知道當(dāng)前空氣質(zhì)量等級。
本系統(tǒng)電路簡單、工作穩(wěn)定、集成度高,調(diào)試方便,測試精度高,具有一定的實(shí)用價(jià)值。該檢測儀通過Python腳本語言實(shí)現(xiàn)硬件底層的訪問和控制細(xì)顆粒物檢測傳感器,每間隔一定時間,傳感器自動進(jìn)行檢測,檢測到的空氣粉塵濃度數(shù)據(jù)通過串口上傳至主控板,主控板收集到數(shù)據(jù)后,同樣使用Python腳本語言將PM2.5的檢測結(jié)果顯示到LCD5110上。
參照1:TPYBoardLED亮燈狀態(tài)與 PM2.5日均濃度對應(yīng)的指數(shù)等級對應(yīng)表:
參照2: TPYBoard的硬件特點(diǎn):
————————————————————————————
üSTM32F405RG MCU.
ü168 MHz Cortex-M4 CPU with 32-bit hardware floating point.
ü1 MiB flash storage, 192 KiB RAM.
üUSB口, 支持 串口,通用存儲,HID協(xié)議。
üSD卡插槽。
üMMA76603軸加速度計(jì).
ü4 LEDs, 1復(fù)位按鈕, 1通用按鈕.
ü3.3V0.3A板載 LDO , 可從USB口或者外置電池供電。
ü實(shí)時時鐘。
ü30個通用IO口,其中28個支持5V輸入輸出。
ü2個 SPI接口, 2個 CAN接口, 2個I2C接口, 5個USART接口.
ü14個 12-bit ADC引腳。
ü2個DAC 引腳。
————————————————————————————
2. 材料準(zhǔn)備
制作PM2.5檢測儀所需材料如下:
1.PM2.5粉塵傳感器1個,檢測PM2.5(細(xì)顆粒物)傳感器,TXD串口輸出。
2.TPYBoard開發(fā)板1塊,主要用來當(dāng)主控開發(fā)板,讀入傳感器數(shù)據(jù)。
3.Lcd5110顯示屏1個,主要用來顯示檢測的信息。
4.杜邦線若干。
5.數(shù)據(jù)線一條。
3.硬件接線方法
3.1 傳感器的針腳
傳感器上一共六根線,從1到6依次是GND,VCC,NC,NC,RX,TX。其中我們只用三根線,電源(GND,VCC)和串口(TX),傳感器與TPYBorad接線參照圖1,具體用哪個串口請參照官方網(wǎng)站上文檔TPYBoard 關(guān)于串口的使用,小編用的串口為 UART(2) is on: (TX, RX) = (X3, X4) = (PA2, PA3),因?yàn)橹恍枰獙?shù)據(jù)傳到PTYBoard,所以只用到RED即PTYBoard的X4引腳。
3.2 LCD5110的針腳
先看一下LCD5110針腳含義吧(注意:LCD5110的針腳有些不一樣的
TPYBoard的針腳與5110的針腳對應(yīng)關(guān)系如圖2:
TPYBoard?????? LCD5110??? memo
————————————————————————————
# any ? Pin???? => RST?????? Reset pin (0=reset, 1=normal)
# any ? Pin???? => CE??????? Chip Enable (0=listen for input, ? 1=ignore input)
# any ? Pin???? => DC??????? Data/Command (0=commands, 1=data)
# MOSI? ??????=> DIN?????? data flow (Master out, Slave in)
# SCK????????=> CLK?????? SPI clock
# 3V3 or any Pin ? => VCC?????? 3.3V logic voltage (0=off, 1=on)
# any Pin????? => LIGHT???? Light (0=on, 1=off)
# GND????????=> GND
還是看不明白的話,直接上針腳編號吧
TPYBoard?????? LCD5110??? memo
————————————————————————————
Y10??????? => RST?????? Reset pin (0=reset, 1=normal)
Y11??????? => CE??????? Chip Enable (0=listen for input, 1=ignore input)
Y9 ???????? => DC??????? Data/Command (0=commands, 1=data)
X8??????? ? => DIN?????? data flow (Master out, Slave in)
X6 ???????? => CLK?????? SPI clock
VCC
Y12??????? => LIGHT???? Light (0=on, 1=off)
GND
3.3 PM2.5檢測儀整體接線方法
按照圖1、圖2所示將PM2.5粉塵傳感器以及5110顯示屏與PTYBoard連接起來,硬件連接完畢,如圖3:
4.PM2.5粉塵傳感器工作原理及數(shù)據(jù)處理
4.1 PM2.5粉塵傳感器工作原理
PM2.5粉塵傳感器的工作原理是根據(jù)光的散射原理來開發(fā)的,微粒和分子在光的照射下會產(chǎn)生光的散射現(xiàn)象,與此同時,還吸收部分照射光的能量。蘿卜教育學(xué)科式編程tpyboard。com
當(dāng)一束平行單色光入射到被測顆粒場時,會受到顆粒周圍散射和吸收的影響,光強(qiáng)將被衰減。如此一來便可求得入射光通過待測濃度場的相對衰減率。而相對衰減率的大小基本上能線性反應(yīng)待測場灰塵的相對濃度。光強(qiáng)的大小和經(jīng)光電轉(zhuǎn)換的電信號強(qiáng)弱成正比,通過測得電信號就可以求得相對衰減率,進(jìn)而就可以測定待測場里灰塵的濃度。在傳感器的中間有一個洞,這個洞可以讓空氣在里面流通。在洞的兩個邊緣 ,一面安裝有一個激光發(fā)射qi,另一面安裝有激光接收器。這樣一來,空氣流過這個小洞,空氣里的顆粒物呢就會擋住激光,從而產(chǎn)生散射,另一面的接收器,是依據(jù)接收到的激光強(qiáng)度來發(fā)出不同的信號的(其實(shí)就是輸出不同的電壓值)。這樣一來,空氣里的顆粒物越多,輸出的電壓越高,顆粒物越少,輸出的電壓越低。
內(nèi)部結(jié)構(gòu)如圖內(nèi)部結(jié)構(gòu)仿真圖所示:
4.2 PM2.5粉塵傳感器傳感器數(shù)據(jù)處理
上面說了傳感器的原理,接下來就說說它傳出來的信號和對于接收到的信號的計(jì)算吧。
這個傳感器的輸出數(shù)據(jù)是靠串口進(jìn)行傳輸?shù)?,傳感器會通過串口每10ms不到(一般3~4ms)發(fā)送一個數(shù)據(jù),數(shù)據(jù)的類型大致是個“0X00”這樣的16進(jìn)制的數(shù)據(jù)。每次的數(shù)據(jù)會以“0XAA”作為起始端,以“0XFF”作為結(jié)束端。共7個數(shù)據(jù)位,7個數(shù)據(jù)位中包含了起始位,結(jié)束位,數(shù)據(jù)高位,數(shù)據(jù)低位,數(shù)據(jù)高校驗(yàn)位,數(shù)據(jù)低校驗(yàn)位和校驗(yàn)位(校驗(yàn)位是怎樣計(jì)算出來的,下面會講到)。數(shù)據(jù)格式大致如下:
其中校驗(yàn)位長度=Vout(H)+Vout(L)+Vref(H)+Vref(L)的長度。
數(shù)據(jù)的組成一共是有7個數(shù)據(jù)位,但是只有Vout(H)和Vout(L)這兩個數(shù)據(jù)才是我們真正所需要的。我們需要依照這兩個數(shù)據(jù)算出來串口輸出的數(shù)字?jǐn)?shù)據(jù),從而通過數(shù)模轉(zhuǎn)換公式來計(jì)算出輸出的電壓。進(jìn)一步的通過比例系數(shù)計(jì)算出空氣中顆粒物的數(shù)量。下面來說一下怎么計(jì)算。
傳感器輸出的數(shù)據(jù)分為高位和低位,其中呢Vout(H)為高位,Vout(L)為低位。因?yàn)榇趥鬟M(jìn)來的Vout(H)和Vout(L)是16進(jìn)制的,第一步先轉(zhuǎn)化成10進(jìn)制的(這個大家都會,不多說了)。然后根據(jù)這兩個輸出值的10進(jìn)制數(shù)計(jì)算出串口輸出數(shù)值的電壓。
公式如下(其中Vout(H)和Vout(L)是已轉(zhuǎn)化為10進(jìn)制的):
Vout=(Vout(H)*256+Vout(L))/1024*5
這樣就算出來了他輸出出來的電壓了,再根據(jù)比例系數(shù)A,就可以計(jì)算出空氣中的顆粒物的值了。(A的值一般是在800到1000,具體的數(shù)值還要根據(jù)你買到的傳感器的精度,準(zhǔn)確度和誤差值進(jìn)行確定。我現(xiàn)在用的是800。)
5.PM2.5粉塵傳感器的采樣頻率及程序編碼
5.1PM2.5粉塵傳感器的采樣頻率
PM2.5粉塵傳感器的采樣頻率是非常高的,一般3~4ms發(fā)送一個16進(jìn)制的采樣數(shù)據(jù),也就是說傳感器通電(接通VCC和GND)后,每隔3~4ms發(fā)送一個16進(jìn)制的采樣數(shù)據(jù),這么高的采樣頻率作為一個檢測儀來說顯然是沒有必要的。
TPYBoard通過串口接收粉塵傳感器數(shù)據(jù),使用串口當(dāng)然先定義串口,通過打開就可以接收串口數(shù)據(jù),關(guān)閉串口就停止接收數(shù)據(jù)的特點(diǎn),來自由控制PM2.5粉塵傳感器的采樣頻率。
5.2程序編碼
我們main.py中,采用首先定義串口,其次是打開串口接收采樣數(shù)據(jù),最后關(guān)閉串口,并且處理采樣數(shù)據(jù)及顯示,依次循環(huán)。
6.運(yùn)行測試
接線ok后,導(dǎo)入font.py文件和upcd8544.py文件(主要用于5110顯示數(shù)據(jù)),再運(yùn)行main.py即可看到當(dāng)前的空氣質(zhì)量等級以及PM2.5的濃度值了。
7.源代碼
把我寫的程序的源碼分享給大家,有需要的可以參考一下。
#main.py import pyb import upcd8544 from machine import SPI,Pin from pyb import UART from ubinascii import hexlify from ubinascii import * #M0 = Pin('X1', Pin.OUT_PP) i=0 K=1 T=0 E=0 F=0 W=0 P=0 L=0 SHUCHU=0 A=800#A比例系數(shù),在北方一般使用800-1000.南方空氣好一些,一般使用600-800.這個還和你使用的傳感器靈敏度有關(guān)的,需要自己測試再定下來。 G=1024/5#G為固定系數(shù),是為了把串口收到的數(shù)據(jù)轉(zhuǎn)換成PM標(biāo)準(zhǔn)值。 SHI=0#后面會賦值轉(zhuǎn)換成十進(jìn)制的數(shù)值。 #*******************************主程序********************************** #pyb.delay(5000) SPI = pyb.SPI(1) #DIN=>X8-MOSI/CLK=>X6-SCK #DIN =>SPI(1).MOSI 'X8' data flow (Master out, Slave in) #CLK =>SPI(1).SCK 'X6' SPI clock RST = pyb.Pin('Y10') CE = pyb.Pin('Y11') DC = pyb.Pin('Y9') LIGHT = pyb.Pin('Y12') while True: u2 = UART(2, 2400) pyb.delay(1000) #print('kaishi ') u2.deinit() pyb.delay(10) if(u2.any()>0): W=1 _dataRead=u2.readall() #print('_dataRead=',_dataRead) R=0 while (W>0): #print('截取開始') T=_dataRead[R] if(T==170): E=R+1 F=R+2 #R=_dataRead[65] #print('十位=',_dataRead[E]) #print('個位=',_dataRead[F]) W=0 R=R+1 P=_dataRead[E] L=_dataRead[F] SHI=P*256+L#把串口收到的十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制。 SHUCHU=SHI/G*A if(SHUCHU<35): Quality = 'Excellente' print('環(huán)境質(zhì)量:優(yōu)','PM2.5=',SHUCHU) pyb.LED(1).off() pyb.LED(2).on() pyb.LED(3).off() pyb.LED(4).off() elif(35關(guān)于如何利用支持MicroPython的TPYBoard開發(fā)板自制PM2.5檢測儀就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
網(wǎng)站名稱:如何利用支持MicroPython的TPYBoard開發(fā)板自制PM2.5檢測儀
當(dāng)前地址:http://weahome.cn/article/pcjijc.html