霧霾已成常態(tài),自己DIY一個(gè)PM2.5檢測(cè)儀還是很有必要的。利用零基礎(chǔ)入門開(kāi)發(fā)板 Arduino UNO R3,只需很簡(jiǎn)單的電路和很少的代碼就能自制一個(gè)PM2.5檢測(cè)儀。為保證測(cè)量精度,這里選用激光粉塵傳感器來(lái)測(cè)試空氣中的霧霾污染程度,同時(shí)選用DHT11來(lái)檢測(cè)環(huán)境溫度和濕度,非常適合中小學(xué)生練習(xí)。
一、制作PM2.5檢測(cè)儀所需的材料
Arduino UNO R3開(kāi)發(fā)板,一個(gè)
激光PM2.5傳感器,一個(gè)
1.3寸OLED屏,1個(gè)
溫濕度傳感器DHT11,一個(gè)
面包板,一個(gè)
杜邦線,若干
電阻,阻值約5k,1個(gè)
二、元件介紹
1、Arduino UNO R3開(kāi)發(fā)板
Arduino是一個(gè)開(kāi)放源代碼的設(shè)計(jì)平臺(tái),由硬件Arduino板和軟件Arduino IDE集成開(kāi)發(fā)環(huán)境兩部分組成。Arduino板是一個(gè)以AVR單片機(jī)為核心的開(kāi)源硬件平臺(tái),有多種型號(hào)和配套資源,其中最基礎(chǔ)、最常用的是Arduino UNO R3板,價(jià)格低廉、售價(jià)約23元,體積小巧、使用方便。Arduino IDE是一款非常優(yōu)秀的軟件開(kāi)發(fā)平臺(tái),界面簡(jiǎn)潔友好,上手快,具有很好的跨平臺(tái)性。
Arduino編程是基于入門級(jí)的C語(yǔ)言,門檻低,最重要的是在Arduino環(huán)境中,很多功能均已封裝成函數(shù),可直接調(diào)用函數(shù)完成相應(yīng)的功能,大大降低了編程復(fù)雜度,學(xué)生無(wú)需具備太多的單片機(jī)知識(shí)就可使用 Arduino板與各種傳感器、電子元件連接,快速搭建出各種有趣的、實(shí)用的電路,實(shí)現(xiàn)豐富的功能。Arduino還支持第三方庫(kù)和硬件等,靈活性和擴(kuò)展性強(qiáng)。
2、激光PM2.5傳感器
為保證測(cè)試精度,選用了一款激光PM2.5傳感器,缺點(diǎn)是售價(jià)比較離譜,這東西成本不高,但因?yàn)槿狈Ω?jìng)爭(zhēng),所以價(jià)格一直居高不下。
該傳感器接口有6個(gè)引腳,但實(shí)際上只用到4個(gè),各引腳定義如下所示。
傳感器采用異步串行通信方式(UART),以幀為單位進(jìn)行通訊。幀格式固定,每一幀由9 個(gè)字節(jié)組成,分命令幀和應(yīng)答幀。當(dāng)外部設(shè)備向傳感器發(fā)送命令幀時(shí),傳感器會(huì)回復(fù)外部設(shè)備對(duì)應(yīng)的應(yīng)答幀。
波特率:9600;
校驗(yàn)位:無(wú);
停止位:1 位;
數(shù)據(jù)位:8;
3、OLED屏
OLED顯示屏采用有機(jī)發(fā)光二極管,不需背光源,是一種較新型的顯示屏,缺點(diǎn)是價(jià)格較高,不如LCD壽命長(zhǎng)。
有機(jī)發(fā)光顯示技術(shù)由非常薄的有機(jī)材料涂層和玻璃基板構(gòu)成。當(dāng)有電荷通過(guò)時(shí)這些有機(jī)材料就會(huì)發(fā)光。OLED發(fā)光的顏色取決于有機(jī)發(fā)光層的材料,故廠商可由改變發(fā)光層的材料而得到所需之顏色。有源陣列有機(jī)發(fā)光顯示屏具有內(nèi)置的電子電路系統(tǒng)因此每個(gè)像素都由一個(gè)對(duì)應(yīng)的電路獨(dú)立驅(qū)動(dòng)。OLED具備有構(gòu)造簡(jiǎn)單、自發(fā)光不需背光源、對(duì)比度高、厚度薄、視角廣、反應(yīng)速度快、可用于撓曲性面板、使用溫度范圍廣等優(yōu)點(diǎn)。
本例程采用128x64的1.3寸OLED單色顯示屏,IIC接口
接線時(shí),請(qǐng)務(wù)必仔細(xì)核對(duì)電源和地線,不要接反。
4、溫濕度傳感器
DHT11 是一款廉價(jià)的溫濕度傳感器,利用濕敏電阻測(cè)量濕度,采用數(shù)字溫度傳感器測(cè)試溫度,并由單片機(jī)處理后采用串行輸出。DHT11 售價(jià)約4元,就是略丑。DHT22 售價(jià)約15元,雖然顏色變白了,但顏值依然很低。二者管腳定義一樣,但操作時(shí)序不同在應(yīng)用時(shí)需要注意。這里,我們選用DTH11型號(hào)。
DHT11的硬件連接非常簡(jiǎn)單,原理圖如下:
三、軟件環(huán)境配置
安裝
雙擊arduino-1.8.3-windows.exe,出現(xiàn)安裝導(dǎo)向,依次確認(rèn),默認(rèn)安裝即可。安裝完成后,桌面上會(huì)出現(xiàn)Arduino軟件的logo,下次使用時(shí)雙擊。
配置開(kāi)發(fā)環(huán)境
插入Arduino UNO R3開(kāi)發(fā)板,系統(tǒng)自動(dòng)安裝USB驅(qū)動(dòng)。
選擇相應(yīng)的板卡
選擇端口
可以通過(guò)設(shè)備管理器查看設(shè)備對(duì)應(yīng)的端口情況,本機(jī)對(duì)應(yīng)的是COM5。
驗(yàn)證
打開(kāi)文件,示例,找到Blink程序
點(diǎn)擊對(duì)號(hào)驗(yàn)證程序能否通過(guò)編譯,如果一切正常;點(diǎn)擊向右的箭頭將編譯好的程序上傳至Arduino UNO R3的AVR單片機(jī)中;也可以直接點(diǎn)擊該箭頭,IDE會(huì)先執(zhí)行驗(yàn)證,通過(guò)驗(yàn)證后直接上傳。
如果看到LED燈閃爍,說(shuō)明一切正常。恭喜你,安裝成功,板卡正常。
添加第三方庫(kù)
啟動(dòng)Adruino IDE
項(xiàng)目-》加載庫(kù)-》管理庫(kù),搜索DHT,安裝 DHT sensor library,以支持DHT11
項(xiàng)目-》加載庫(kù)-》管理庫(kù),搜索U8GLIB,安裝 U8GLIB,以支持OLED
四、開(kāi)始動(dòng)手實(shí)踐
操作溫濕度傳感器
1、先把Arduino UNO R3板子上的電源和地引到面包板上
2、把溫濕度傳感器連接好,其中傳感器的數(shù)據(jù)輸出SDA接Arduino板的A0口。溫濕度的連接方式非常簡(jiǎn)單,如本文前面的原理圖所示,除了電源和地,只有一根SDA線經(jīng)5-10k電阻上拉至5V,同時(shí)接Arduino板的A0口即可。
3、調(diào)入例程
文件-》示例-》DHT sensor library -》DHTtester
4、修改數(shù)據(jù)輸入端
#define DHTPIN A0// what digital pin we‘re connected to
5、修改例程,支持 DHT11,去掉該行前面的//
#define DHTTYPE DHT11 // DHT 11
6、上傳程序,打開(kāi)串口監(jiān)視器,設(shè)置9600波特率,觀察環(huán)境溫濕度。
操作OLED屏
1、斷開(kāi)Arduino UNO R3板子的電源
2、把OLED屏連接好,由于是IIC接口,電路連接很簡(jiǎn)單,OLED屏除了連接好電源和地,只需將SCL接Arduino板的A5端,SDA接Arduino板的A4端即可。
3、調(diào)入例程
文件-》示例-》U8glib -》helloword
4、修改例程,支持OLED,去掉該行前面的//
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);// I2C / TWI
5、上傳程序,觀察OLED屏的顯示是否正確。
操作PM2.5傳感器
該傳感器是一款激光數(shù)字式PM2.5傳感器,內(nèi)置激光器和光電接收組件,采用光散射原理,激光在顆粒物上產(chǎn)生散射光,由光電接收器轉(zhuǎn)變?yōu)殡娦盘?hào),再通過(guò)特定算法計(jì)算出PM2.5值和PM10值。
該傳感器采用串口輸出,除了1腳接地,2腳接電源,再將3腳TXD和4腳RXD分別接Arduino板的D5、D6端口,當(dāng)然,您也可以接別的端口,只要程序做相應(yīng)的修改即可。
常用指令只需要三條,分別是開(kāi)機(jī)指令、讀取PM2.5值指令和關(guān)機(jī)指令,不妨根據(jù)手冊(cè)自己編寫(xiě)試試,簡(jiǎn)單起見(jiàn),可以用串口監(jiān)視器顯示結(jié)果。
五、編寫(xiě)程序,實(shí)現(xiàn)PM2.5檢測(cè)儀
由于硬件電路已經(jīng)逐步連接完畢,下面可以針對(duì)整個(gè)電路編寫(xiě)程序了,把各部分功能統(tǒng)一起來(lái),軟件示例代碼如下:
#include 《DHT.h》
#include “U8glib.h”
#include 《SoftwareSerial.h》
// 說(shuō)明,這僅是一個(gè)簡(jiǎn)單的示例程序,目的是幫助初學(xué)者入門
#define DHTPIN A0 // 接溫濕度傳感器的數(shù)據(jù)端
// 選擇合適的溫濕度傳感器型號(hào)
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
uint8_t PM25_OPEN[] = {0xAA,0x01,0x00,0x00,0x00,0x00,0x01,0x66,0xBB}; //開(kāi)機(jī)指令
uint8_t PM25_CLOSE[] = {0xAA,0x03,0x00,0x00,0x00,0x00,0x01,0x68,0xBB}; //關(guān)機(jī)指令
uint8_t PM25_DATA[] = {0xAA,0x02,0x00,0x00,0x00,0x00,0x01,0x67,0xBB}; //讀數(shù)據(jù)指令
DHT dht(DHTPIN, DHTTYPE);
// 軟串口定義格式 SoftwareSerial(rxPin, txPin, inverse_logic)
SoftwareSerial mySerial(5, 6); //定義軟串口,D5、D6分別連接PM2.5傳感器的3(TXD)、4(RXD)
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI OLED屏定義
uint16_t pm25, pm10;
float h, t, hic;
void setup() {
mySerial.begin(9600); //設(shè)置軟串口波特率與PM2.5傳感器一致
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
u8g.setColorIndex(255); // white
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3); // max intensity
}
else if ( u8g.getMode() == U8G_MODE_BW ) {
u8g.setColorIndex(1); // pixel on
}
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
u8g.setHiColorByRGB(255,255,255);
}
pmOn();
delay(2000);
}
int i=0;
void loop() {
u8g.firstPage();
if (i==0) pmRead();
if(i》=5) i=0;else i++;
dhtRead();
do {
draw();
} while( u8g.nextPage() );
delay(500);
}
void pmOn(){
mySerial.write(PM25_OPEN,9);
}
void pmOff(){
mySerial.write(PM25_CLOSE,9);
}
void pmRead(){
uint8_t data[9];
//while(mySerial.available());
mySerial.write(PM25_DATA,9);
delay(100);
for(int i=0;i《9;i++){
if (mySerial.available()) {
data[i] = mySerial.read();
}
}
if(data[0]==0xAA && data[8]== 0xBB){
pm25 = data[4]*256 + data[5];
pm10 = data[2]*256 + data[3];
}
}
void dhtRead(){
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds ‘old’ (its a very slow sensor)
h = dht.readHumidity();
// Read temperature as Celsius (the default)
t = dht.readTemperature();
// Compute heat index in Celsius (isFahreheit = false)
hic = dht.computeHeatIndex(t, h, false);
}
void draw(void) {
// graphic commands to redraw the complete screen should be placed here
char sendBuff[20];
u8g.setFont(u8g_font_unifont_78_79);
sprintf(sendBuff,“%c”,14);
u8g.drawStr( 0, 18, sendBuff);
u8g.setFont(u8g_font_unifont);
sprintf(sendBuff,“H:%2d%% T:%2d%cC”,(int)h,(int)t,0xB0);
u8g.drawStr( 20, 18, sendBuff);
u8g.setFont(u8g_font_profont22);
sprintf(sendBuff,“PM2.5:%4d”,pm25);
u8g.drawStr( 6, 42, sendBuff);
sprintf(sendBuff,“PM 10:%4d”,pm10);
u8g.drawStr( 6, 64, sendBuff);
}
運(yùn)行結(jié)果
六、工匠精神
為使這款PM2.5檢測(cè)儀更具有實(shí)用性,你也可以動(dòng)手制作印刷電路板,為便于初學(xué)者使用,主控芯片可以采用與Arduino UNO R3板子一樣的CPU。
-
測(cè)試儀
+關(guān)注
關(guān)注
6文章
4004瀏覽量
57994 -
PM2.5
+關(guān)注
關(guān)注
0文章
59瀏覽量
26405
發(fā)布評(píng)論請(qǐng)先 登錄
怎樣使用防水測(cè)試儀對(duì)手機(jī)進(jìn)行測(cè)試

OTDR與光纖測(cè)試儀的區(qū)別
絕緣電阻測(cè)試儀
電池測(cè)試儀的使用方法 電池測(cè)試儀適用范圍
pm2.5傳感器有什么作用
基于51單片機(jī)的溫濕度及PM2.5監(jiān)測(cè)系統(tǒng)仿真

基于51單片機(jī)的甲烷、溫濕度及PM2.5監(jiān)測(cè)系統(tǒng)仿真

內(nèi)阻測(cè)試儀原理是電橋原理嗎
內(nèi)阻測(cè)試儀怎么測(cè)內(nèi)阻怎樣測(cè)量
pm2.5測(cè)試儀的網(wǎng)絡(luò)連接方式包括什么
pm2.5檢測(cè)儀的優(yōu)勢(shì)
山東防水測(cè)試儀的標(biāo)準(zhǔn)設(shè)置

華盛昌五合一PM2.5空氣質(zhì)量檢測(cè)儀產(chǎn)品介紹

守護(hù)空氣質(zhì)量的科技利器:PM2.5傳感器全面解析

評(píng)論