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