文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)12-0082-04
0 引言
隨著人民生活水平的逐步提高,,綠色健康成為人們所倡導(dǎo)的生活方式。但是近年來空氣質(zhì)量令人擔(dān)憂,,國(guó)內(nèi)大部分城市都出現(xiàn)過嚴(yán)重的霧霾天氣,。空氣質(zhì)量消息成為人們關(guān)注的重點(diǎn),,也是逐漸通過網(wǎng)絡(luò)更新發(fā)布,,參考文獻(xiàn)[1-2]中提出了針對(duì)空氣質(zhì)量監(jiān)測(cè)的專門的儀器裝置,。一般情況下,雖然有專門儀器檢測(cè)空氣中的有害氣體,,但普遍價(jià)格偏貴,,測(cè)量耗費(fèi)時(shí)間,便攜性不佳,,某些儀器還需要專業(yè)人員操作,并且這些裝置的數(shù)據(jù)無法通過網(wǎng)絡(luò)在線查看,。
基于人們對(duì)健康生活的要求,,需要一種人機(jī)交互簡(jiǎn)單、攜帶方便,、方便查看數(shù)據(jù)的空氣質(zhì)量監(jiān)測(cè)裝置,,本文提出一種小巧方便的基于開源硬件的在線空氣質(zhì)量監(jiān)測(cè)系統(tǒng)。以開源硬件Arduino為核心,,采用灰塵傳感器,、有機(jī)物揮發(fā)氣體傳感器以及溫濕度傳感器作為數(shù)據(jù)采集,通過LCD模塊實(shí)現(xiàn)現(xiàn)場(chǎng)數(shù)據(jù)的顯示,,并且通過以太網(wǎng)模塊將數(shù)據(jù)上傳至開放物聯(lián)網(wǎng)接入平臺(tái),,從而實(shí)現(xiàn)通過網(wǎng)頁或者手機(jī)端對(duì)空氣質(zhì)量數(shù)據(jù)的實(shí)時(shí)查看。
1 系統(tǒng)硬件設(shè)計(jì)
本系統(tǒng)采用開源硬件Arduino為系統(tǒng)核心,,配合DSM501灰塵傳感器,、MS1100有機(jī)物揮發(fā)氣體傳感器、DHT22溫濕度傳感器,、 ENC28J60以太網(wǎng)控制器,、1602字符型液晶模塊實(shí)現(xiàn)了整個(gè)硬件系統(tǒng)的搭建。其硬件構(gòu)成如圖1所示,。
1.1 Arduino主控板
Arduino是源自意大利的一個(gè)教學(xué)用開源硬件項(xiàng)目,其硬件系統(tǒng)是高度模塊化的,,通過USB接口與計(jì)算機(jī)連接,包括14通道數(shù)字輸入/輸出,,其中包括6通道PWM輸出,、6通道10位ADC模擬輸入/輸出通道,電源電壓主要有5 V和3.3 V[3],。
Arduino主控板采用ATMEGA328P-PU微處理控制器,。ATmega328P是一款8位的AVR處理器,具有功耗低,、性能高的特點(diǎn),。在核心控制板的外圍,有開關(guān)量輸入輸出模塊,、各種模擬量傳感器輸入模塊,、總線類傳感器的輸入模塊,,還有網(wǎng)絡(luò)通信模塊。Arduino系統(tǒng)是基于單片機(jī)開發(fā)的,,已有大量應(yīng)用通用和標(biāo)準(zhǔn)的電子元器件,,包括硬件和軟件在內(nèi)的整個(gè)設(shè)計(jì),代碼均采用開源方式發(fā)布[4],。并且Arduino還提供了自己的開發(fā)語言,,IDE開發(fā)環(huán)境支持Windows、Linux,、Mac OS等主流操作系統(tǒng),。
Arduino的硬件和軟件都是開源的,這就意味著任何人都可以自由地獲取代碼,、圖表,、設(shè)計(jì)。利用開源的設(shè)計(jì)方案,,任何人也可以制作克隆板,,并且可以根據(jù)自己的需求精簡(jiǎn)系統(tǒng)控制成本。這種開放的精神促進(jìn)了Arduino的蓬勃發(fā)展,,有著大量的愛好者為其開發(fā)新的擴(kuò)展板,,并維護(hù)著豐富的第三方庫。
1.2 灰塵傳感器
空氣中的懸浮顆粒濃度是現(xiàn)今環(huán)境下影響空氣質(zhì)量的重要指標(biāo),,灰塵傳感器的主要工作原理為在暗室中的空氣灰塵物質(zhì)被激光照射后,,灰塵的濃度與光線散射強(qiáng)度成正比關(guān)系,通過光電感應(yīng)傳感器即可將光強(qiáng)轉(zhuǎn)化為電流,。
本設(shè)計(jì)選用DSM501灰塵傳感器,,該傳感器的測(cè)量精度可達(dá)到1 ?滋m,并可自動(dòng)吸入空氣,。其具體原理結(jié)構(gòu)如圖2所示,。
在灰塵傳感器內(nèi)部通過設(shè)置加熱板使氣流上升從而促進(jìn)外部空氣流入模塊內(nèi)部,如有灰塵等粒子通過時(shí),,在透鏡的放大作用下阻斷發(fā)光二極管光源使得光電傳感器檢測(cè)不到光線,,從而實(shí)現(xiàn)粒子計(jì)數(shù)。如果光電傳感器檢測(cè)不到光線,,輸出低電平信號(hào),,反之輸出高電平信號(hào),形成如圖3所示的PMW脈沖寬度調(diào)制信號(hào),。通過計(jì)算一定時(shí)間內(nèi)低電平脈沖的比例,,參照特征曲線,即可以計(jì)算出空氣中的粒子數(shù)以及PM2.5的參數(shù),。
1.3 揮發(fā)性有機(jī)化合物氣體傳感器
揮發(fā)性有機(jī)化合物是指能參加大氣光化學(xué)反應(yīng)的有機(jī)化合物,。這種化合物對(duì)人體健康有著非常重大的影響,,達(dá)到一定濃度時(shí)會(huì)直接傷害人體內(nèi)臟以及大腦與神經(jīng)系統(tǒng),所以是空氣質(zhì)量監(jiān)測(cè)的重要參數(shù),。
MS1100采用了半導(dǎo)體式的揮發(fā)性有機(jī)化合物氣體傳感器,,可直接輸出電平數(shù)據(jù)或者模擬信號(hào),本設(shè)計(jì)中采用模擬信號(hào)輸出至Arduino,。
1.4 溫濕度傳感器
為了提高測(cè)試的精確度,,減少使用代碼校準(zhǔn),本設(shè)計(jì)使用了DHT22溫濕度傳感器,。DHT22傳感器采用電容式感濕原件與NTC測(cè)溫元件并含有一個(gè)小型的8位單片機(jī),。傳感器在檢測(cè)信號(hào)處理過程中調(diào)用儲(chǔ)存在OTP內(nèi)存中的校準(zhǔn)參數(shù),以單線制串行接口輸出已校準(zhǔn)信號(hào),。
DHT22與Arduino之間采用的進(jìn)行通信和同步的數(shù)據(jù)格式為單總線型,,在每次5 ms左右的通信時(shí)間內(nèi),,發(fā)送數(shù)據(jù)量為40 bit,,其中濕度數(shù)據(jù)為16 bit,溫度數(shù)據(jù)為16 bit,,校驗(yàn)和為8 bit,。當(dāng)Arduino發(fā)送一次開始信號(hào)后,本為節(jié)能模式的DHT22變?yōu)楦咚倌J?,Arduino發(fā)送完開始信號(hào)后,,進(jìn)入拉高等待狀態(tài),而DHT22收到Arduino發(fā)出的開始信號(hào)后則首先發(fā)出響應(yīng)信號(hào),,在一段拉高時(shí)延后送出40 bit數(shù)據(jù),,隨后開始新的一次數(shù)據(jù)采集。故Arduino收到的并不是實(shí)時(shí)的數(shù)據(jù),,所以一般在程序中還需要刷新后再獲取數(shù)據(jù),。DHT22與Arduino通信的具體過程如圖4所示。
1.5 以太網(wǎng)控制器
相對(duì)于傳統(tǒng)的空氣質(zhì)量檢測(cè)裝置,,本設(shè)計(jì)的重點(diǎn)是數(shù)據(jù)的網(wǎng)絡(luò)化,,即如何在線查看空氣質(zhì)量情況。Arduino官方的以太網(wǎng)模塊為Wiznet W5100,,對(duì)于Arduino的IDE所提供的Ethernet庫也是基于這個(gè)芯片,。但是還有一種廣泛使用的以太網(wǎng)微型控制器,這種控制器體積更小,,價(jià)格相對(duì)便宜,,有著廣泛的第三方庫支持,ENC28J60與W5100的比較如圖5所示,。不過W5100芯片集成了成熟的TCP/IP協(xié)議棧,,節(jié)省了MCU資源,。在本設(shè)計(jì)中考慮到成本與體積問題,采用了ENC28J60芯片,。
ENC28J60是一款常見的帶SPI接口的以太網(wǎng)控制器,,符合IEEE802.3規(guī)范,采用包過濾機(jī)制以對(duì)傳入數(shù)據(jù)包進(jìn)行限制,,集成MAC和10BASE-T端口,。ENC28J60通過內(nèi)部的直接存儲(chǔ)模塊實(shí)現(xiàn)對(duì)數(shù)據(jù)的快速吞吐并且可以對(duì)IP校驗(yàn)和進(jìn)行硬件支持。
1.6 LCD顯示模塊
雖然在線空氣質(zhì)量監(jiān)測(cè)系統(tǒng)的所有傳感器數(shù)據(jù)都可以通過網(wǎng)頁或者客戶端實(shí)時(shí)查看,。但是在網(wǎng)絡(luò)故障的情況下,,還有著本地查看的需求。在本設(shè)計(jì)中采用了LCD1602模塊,。該模塊價(jià)格低廉,,采用點(diǎn)陣式LCD,可以顯示數(shù)字,、英文字符,、符號(hào)。一共可以顯示16×2個(gè)字符,,基本滿足本設(shè)計(jì)需要,。
2 開放物聯(lián)網(wǎng)接入平臺(tái)
物聯(lián)網(wǎng)作為近些年的信息技術(shù)的重要組成部分,其包含了兩層意思,。一方面,,物聯(lián)網(wǎng)只是傳統(tǒng)互聯(lián)網(wǎng)的延伸和擴(kuò)展,其核心部分還是互聯(lián)網(wǎng),;另一方面,,物聯(lián)網(wǎng)把傳統(tǒng)互聯(lián)網(wǎng)的終端從電腦、手機(jī)等延伸到了任何可以進(jìn)行信息通信的物品,。
物聯(lián)網(wǎng)雖然發(fā)展迅速,,但是卻沒有統(tǒng)一的融合管理平臺(tái)。因此涌現(xiàn)出了眾多物聯(lián)網(wǎng)的接入平臺(tái),,可以使用戶不再關(guān)注部署和運(yùn)營(yíng)互聯(lián)網(wǎng),,而是可以利用工具包直接處理傳感器數(shù)據(jù),支持用戶使用多種協(xié)議方式上傳符合標(biāo)準(zhǔn)格式的傳感器數(shù)據(jù),,并且通過socket還能實(shí)現(xiàn)對(duì)傳感器設(shè)備的反向控制,。
本設(shè)計(jì)中選擇了Yeelink開放物聯(lián)網(wǎng)接入平臺(tái)。除了上述功能,,Yeelink還實(shí)現(xiàn)了儀表盤交互,、事件觸發(fā)、移動(dòng)APP、社交等眾多功能,,使整個(gè)系統(tǒng)有著強(qiáng)大的擴(kuò)展性,。
3 系統(tǒng)整合設(shè)計(jì)
Arduino語言建立在C/C++基礎(chǔ)上,類似基礎(chǔ)的C語言,,Arduino語言把AVR單片機(jī)相關(guān)的一些參數(shù)設(shè)置都函數(shù)化,,使用戶不用去了解底層,而專心于解決問題[5],。
本設(shè)計(jì)采用灰塵傳感器,、有機(jī)物揮發(fā)氣體傳感器、溫濕度傳感器對(duì)室內(nèi)環(huán)境進(jìn)行監(jiān)測(cè),,并將監(jiān)測(cè)信號(hào)發(fā)送至Arduino控制板,;Arduino對(duì)數(shù)據(jù)進(jìn)行處理之后通過LCD進(jìn)行顯示,并通過以太網(wǎng)控制器模塊將數(shù)據(jù)上傳至物聯(lián)網(wǎng)平臺(tái),。
Arduino程序必須包括setup()和loop()兩個(gè)函數(shù),,其中setup()函數(shù)只在程序開始時(shí)使用,這個(gè)函數(shù)可以在主循環(huán)開始前為程序設(shè)定一些通用的規(guī)則,,如初始化變量,、管腳模式、調(diào)用庫函數(shù)等,。loop()在setup()函數(shù)之后,,即初始化之后,,每一條loop()函數(shù)中的代碼都要執(zhí)行,,并且按順序逐個(gè)執(zhí)行,直到函數(shù)的最后,。然后loop()函數(shù)再次開始從頂部執(zhí)行,,一直循環(huán)下去,主要使用它來運(yùn)轉(zhuǎn)Arduino,。
3.1 傳感器數(shù)據(jù)處理
DSM501灰塵傳感器將測(cè)量的數(shù)據(jù)轉(zhuǎn)化為PWM信號(hào),,但是該信號(hào)并不代表實(shí)際的空氣中的微型顆粒濃度,所以還需要對(duì)得到的低脈沖信號(hào)進(jìn)行轉(zhuǎn)化,。其中低脈沖率為總的低脈沖時(shí)間與單位采樣時(shí)間的比值,。根據(jù)DSM501的特性曲線可以得到對(duì)應(yīng)的粒子數(shù)為:
Y=0.1776X3+0.24X2+94.003X(1)
其中Y為粒子數(shù),X為低脈沖百分率,。
PM1.0的計(jì)算實(shí)現(xiàn)代碼為:
float dsmTemp0=(sumTimeofLow10*100.0)/dsmStatTimes10,;
float dsmTemp10=0.1776*pow(dsmTemp0,3) - 0.24*pow
(dsmTemp0,2) + 94.003*dsmTemp0;
PM2.5的計(jì)算實(shí)現(xiàn)代碼為:
dsmTemp0=(sumTimeofLow25*100.0)/dsmStatTimes25;
dsmTemp25=0.1776*pow(dsmTemp0,3) - 0.24*pow
(dsmTemp0,2) + 94.003*dsmTemp0;
dsmTemp25=dsmTemp10-dsmTemp25;
為了減小外部環(huán)境的干擾,本設(shè)計(jì)對(duì)計(jì)算得到的粒子數(shù)進(jìn)行數(shù)字濾波處理,。常用的濾波算法很多,,但是由于系統(tǒng)資源有限,在設(shè)計(jì)中采用了算法簡(jiǎn)單、運(yùn)算速度快的遞推平均濾波算法,。
遞推平均濾波屬于平滑濾波,,它將N個(gè)測(cè)量值放入暫存隊(duì)列區(qū)域,當(dāng)獲取新的數(shù)據(jù)時(shí),,新測(cè)量的數(shù)據(jù)會(huì)插入隊(duì)尾并同時(shí)舍棄隊(duì)首的數(shù)據(jù),,之后對(duì)新得到的N個(gè)數(shù)據(jù)做算術(shù)平均值。采用這種方式做N次的濾波運(yùn)算比普通的算術(shù)平均值計(jì)算方法快N-1倍,,其具體算法為:
y(k)=[x(k)+x(k-1)+x(k-2)+…+x(k-N+1)]/N(2)
其中y(k)為經(jīng)過平均濾波處理后的數(shù)據(jù),,x(n)為第n次測(cè)量后得到的數(shù)據(jù)。
Arduino的實(shí)現(xiàn)關(guān)鍵代碼為:
uint16_t filteringDsm(uint8_t l,uint16_t _dsmData){
filtSum[l] =filtSum[l]- filtDsm[l][filtI[l]];
filtSum[l] =filtSum[l]+ _dsmData;
filtDsm[l][filtI[l]] = _dsmData;
filtI[l]=filtI[l]+1;
if (filtI[l] >= FILT_N) filtI[l] = 0;
return filtSum[l]/FILT_N;}
其中N設(shè)置為10,,數(shù)組元素的初始值均為0,。
3.2 數(shù)據(jù)在線監(jiān)測(cè)集成
物聯(lián)網(wǎng)的構(gòu)架一般分為三個(gè)層次。最底層為可以采集,、測(cè)量數(shù)據(jù)及被控制的儀器或設(shè)備,,在本設(shè)計(jì)中為各種傳感器;上一層為將底層采集數(shù)據(jù)發(fā)給云端服務(wù)器或?qū)⒖刂菩盘?hào)發(fā)給底層的設(shè)備,,在本設(shè)計(jì)中為Arduino控制板配合ENC28J60以太網(wǎng)控制器,。該層的設(shè)備一方面要能與底層測(cè)量設(shè)備進(jìn)行通信,另一方面要具備網(wǎng)絡(luò)功能,;最上層為云端服務(wù)器,,云端服務(wù)器可以存儲(chǔ)與分析數(shù)據(jù),并且用戶可以通過各種終端設(shè)備訪問數(shù)據(jù)庫,,以實(shí)現(xiàn)基于數(shù)據(jù)的各種應(yīng)用,。
物聯(lián)網(wǎng)平臺(tái)一般采用開放的API將傳感器及測(cè)量設(shè)備接入平臺(tái)。當(dāng)用戶在物聯(lián)網(wǎng)平臺(tái)注冊(cè)后將會(huì)得到一個(gè)APIKey,。在用戶管理界面還能添加新的設(shè)備與傳感器ID,,物聯(lián)網(wǎng)平臺(tái)通過這些參數(shù)將傳感器的數(shù)據(jù)存儲(chǔ)到對(duì)應(yīng)的云端數(shù)據(jù)庫之中。
根據(jù)不同的物聯(lián)網(wǎng)平臺(tái)進(jìn)行相應(yīng)的數(shù)據(jù)格式化之后,,通過ENC28J60傳感器的Ethercard庫的Stash函數(shù)實(shí)現(xiàn)數(shù)據(jù)的上傳,。
當(dāng)傳感器數(shù)據(jù)成功上傳至云端服務(wù)器后,即可通過網(wǎng)頁查看實(shí)時(shí)數(shù)據(jù),,實(shí)現(xiàn)對(duì)空氣質(zhì)量的在線監(jiān)測(cè),。
4 總結(jié)
經(jīng)實(shí)驗(yàn)證明,基于開源硬件的在線空氣質(zhì)量監(jiān)測(cè)系統(tǒng)運(yùn)行穩(wěn)定,。本文采用灰塵傳感器,、有機(jī)物揮發(fā)氣體傳感器、溫濕度傳感器,、Arduino控制板,、LCD液晶顯示模塊,、以太網(wǎng)控制模塊等共同構(gòu)建了監(jiān)測(cè)系統(tǒng)。該系統(tǒng)一方面可以通過LCD模塊在本地實(shí)時(shí)查看空氣質(zhì)量狀態(tài),,另一方面可以通過網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程查看,。該系統(tǒng)小巧緊湊,操作方便,,適合現(xiàn)代人們生活需求,,具有市場(chǎng)潛力和開發(fā)價(jià)值。
參考文獻(xiàn)
[1] 鄧桂昌.室內(nèi)便攜式智能空氣品質(zhì)監(jiān)測(cè)儀的研究與設(shè)計(jì)[D].長(zhǎng)春:吉林大學(xué),,2009.
[2] 杜娟.便攜式現(xiàn)場(chǎng)甲醛檢測(cè)儀的設(shè)計(jì)[D].鄭州:鄭州大學(xué),, 2010.
[3] OXER J,BLEMINGS H.Practical Arduino:cool projects foropen source hardware[M].New York:SpringerVerlag,,2009:1-10.
[4] 楊繼志,,楊宇環(huán).基于Arduino的網(wǎng)絡(luò)互動(dòng)產(chǎn)品創(chuàng)新設(shè)計(jì)[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2012,,25(1):99-100,,60.
[5] 蔡睿妍.Arduino的原理及應(yīng)用[J].電子設(shè)計(jì)工程,2012,,(16):155-157.