王博博,李詩堯,馮 妍
(西北農(nóng)林科技大學 信息工程學院,楊凌 712100)
從上世紀開始,科學技術(shù)在全球飛速發(fā)展,人們的日常生活也因為科技的不斷進步而不斷的發(fā)生改變,科技日新月異,不斷有新的技術(shù)被研發(fā),繼而普及,應用在了人們的生活之中。21世紀以來,科技的發(fā)展更是迅速,國家也越來越重視,各種互聯(lián)網(wǎng)科技應用普及的速度也逐漸加快,人們的生活已經(jīng)離不開網(wǎng)絡,Wi-Fi、無線USB、Bluetooth、ZigBee等也隨著科技的發(fā)展達到了新的高度。相對其他通信設(shè)備逐漸升高著其復雜性與功耗成本,功耗更少,成本更低的ZigBee在無數(shù)的無線通信設(shè)備中“殺出重圍”,廣泛普及在各行各業(yè)。ZigBee應用范圍主要環(huán)境監(jiān)測、智能家居等方面,甚至在軍事、醫(yī)療等方面也有廣泛的應用,特點是可以實時監(jiān)控網(wǎng)絡覆蓋范圍內(nèi)所有對象發(fā)送的信息。
物聯(lián)網(wǎng)在21世紀之前還沒有廣泛普及,我國的物聯(lián)網(wǎng)發(fā)展也只是處于摸索階段,還沒有出現(xiàn)相關(guān)的較為突出的物聯(lián)網(wǎng)行業(yè)生產(chǎn)商,但是在進入21 世紀之后,因為整個國際上的物聯(lián)網(wǎng)的發(fā)展,國內(nèi)的物聯(lián)網(wǎng)產(chǎn)品公司也雨后春筍般的發(fā)展起來了,如華為、華立、藍科、千旸、聰明屋等公司,而如今,在市場上已經(jīng)隨處可見物聯(lián)網(wǎng)產(chǎn)品,無線傳感網(wǎng)絡的應用普及的范圍之廣、速度之快也是有目共睹。
在眾多的氣體檢測方式中,多數(shù)的檢測設(shè)備都具備著高靈敏度與高準確度,但是它們同時也存在著體積龐大、不能現(xiàn)場監(jiān)測等一系列的缺點,因此其在某些環(huán)境中的應用也受到了很大的限制。為了有效地解決這一系列的缺陷,本系統(tǒng)利用了三種電化學傳感器來采集有毒有害氣體的濃度信息,其輕巧的體積,較低的成本,可現(xiàn)場監(jiān)測等優(yōu)點得到了充分體現(xiàn),系統(tǒng)同時采用了帶有TI公司的CC2530射頻模塊的ZigBee節(jié)點建立無線傳感網(wǎng)絡,使得各個節(jié)點之間可以利用無線網(wǎng)絡進行數(shù)據(jù)傳輸,有效地解決了不能實時監(jiān)測、不能遠程監(jiān)測等一系列的氣體監(jiān)測相關(guān)的問題,通過該系統(tǒng)進行有害氣體的監(jiān)測,達到了實時監(jiān)測、遠程監(jiān)測的目的,同時也具有良好的實用價值和使用價值。
本系統(tǒng)可使用的ZigBee無線傳感器網(wǎng)絡可分為星型網(wǎng)絡、樹型網(wǎng)絡、網(wǎng)狀網(wǎng)絡三種。由于在奶牛場中需要監(jiān)測的范圍較大并且所有的監(jiān)測點都比較固定,因此本系統(tǒng)選擇組建樹型無線傳感網(wǎng)絡,其網(wǎng)絡拓撲結(jié)構(gòu)圖如圖1所示。本系統(tǒng)所使用的主要硬件主要有CC2530無線單片機和TGS2611、MQ136、MQ137傳感器以及供電模塊組成。系統(tǒng)所采用無線傳感設(shè)備開發(fā)板是搭載TI公司的ZigBee新一代Soc芯片CC2530的ZigBee開發(fā)板。相對于CC2430單片機而言,CC2530單片機擁有更大的存儲容量,并且其內(nèi)部內(nèi)置了ZigBee協(xié)議,降低了ZigBee的成本。
ZigBee無線傳感網(wǎng)絡負責奶牛長中三種有害氣體濃度的監(jiān)測與節(jié)點之間氣體濃度信息的傳輸。系統(tǒng)中的氣體采集模塊負責采集奶牛場中有害氣體的濃度,濃度信息通過ZigBee無線網(wǎng)絡進行節(jié)點間的相互連接。樹型的ZigBee網(wǎng)絡由協(xié)調(diào)器、路由器、終端三種節(jié)點組成:作為樹型網(wǎng)絡中的根節(jié)點的協(xié)調(diào)器負責ZigBee無線傳感網(wǎng)絡的建立,并對其進行組織與管理;作為根節(jié)點或上一級路由的子節(jié)點的路由器負責將ZigBee網(wǎng)絡數(shù)據(jù)的轉(zhuǎn)發(fā)至協(xié)調(diào)器或者是其他路由器;連接著三種有害氣體傳感器的終端節(jié)點作為整個ZigBee網(wǎng)絡的葉子節(jié)點,負責采集有害氣體并發(fā)送其濃度信息。
圖1 網(wǎng)絡拓撲結(jié)構(gòu)圖
氣體采集模塊主要由TGS2611、MQ136、MQ137三種分別對甲烷,硫化氫,氨氣三種氣體具有高靈敏度的有害氣體傳感器與無線傳感網(wǎng)絡中的終端節(jié)點構(gòu)成。
在本系統(tǒng)中,通過使用杜邦線將傳感器與終端節(jié)點指定引腳進行連接(如圖2所示)構(gòu)成氣體采集模塊,該模塊中主要利用了終端節(jié)點的P0_6,P0_7,P0_0 三個引腳分別連接了MQ137、TGS2611、MQ136 三個傳感器的A-out接口,通過在終端節(jié)點燒寫程序?qū)崿F(xiàn)了將傳感器檢測到的電信號轉(zhuǎn)換為氣體濃度數(shù)據(jù)并進行傳輸,其中氣體采集模塊實拍圖如圖3所示。在終端節(jié)點的硬件開發(fā)板中,為了便于使用設(shè)計了更多的特有引腳接口,如圖4中標出的引腳,即與J6板中的對應編號的引腳使用的是一致的電路,故可以使用圖中的引腳。當奶牛場中存在有害氣體時,對應的有害氣體傳感器的電導率會隨著空氣中有害氣體濃度的增大而增大,氣體采集模塊的關(guān)鍵就是找到電導率與檢測到的氣體濃度的關(guān)系,并且設(shè)計出可以將傳感器的電導率轉(zhuǎn)換為該氣體濃度的電路。
在氣體采集模塊中,傳感器節(jié)點的VCC接口連接終端節(jié)點的3V3引腳,GND接口連接終端節(jié)點的GND接口,A-out接口與設(shè)置的指定終端節(jié)點引腳連接,即MQ136的A-out接口連接終端節(jié)點的P0_0引腳,MQ137的A-out接口連接終端節(jié)點的P0_6接口,TGS2611的A-out接口連接終端節(jié)點的P0_7接口。下面是數(shù)據(jù)采集模塊主要流程:
圖2 氣體采集模塊連接引腳圖
圖3 氣體采集模塊實拍圖
圖4 終端節(jié)點引腳
(1)終端節(jié)點上電,通過 HalAdcRead(HAL_ADC_CHANNEL_X,HAL_ADC_RESOLUTION_Y)函數(shù)讀取與終端節(jié)點連接的傳感器的ADC。其中參數(shù)HAL_ADC_CHANNEL_X表示信道,X表示要設(shè)置的引腳編號,參數(shù)HAL_ADC_RESOLUTION_Y表示分辨率,Y可設(shè)置為8、10、12、14,在本系統(tǒng)中使用的分辨率為14位。
(2)判斷ADC采樣值是否大于8192(采樣值最大是8192)。當ADC的采樣是大于8192時,表示出錯,則給出錯誤提示。否則執(zhí)行第三步。
(3)當ADC的采樣值小于8192時,將傳感器的參考電壓取3.3V,利用ReadGasData()函數(shù)讀取傳感器引腳上的ADC轉(zhuǎn)換值。
(4)將轉(zhuǎn)換后的ADC值轉(zhuǎn)換為字符串形式,即使用下列方式將ADC轉(zhuǎn)換值轉(zhuǎn)換未字符串形式:
str_adc[9]=’0’+((adc%1000)/100);
str_adc[10]=’0’+(((adc%1000)%100)/10);
str_adc[11]=’0’+(((adc%1000)%100)%10);
str_adc是一個類型為byte的數(shù)組,將str_adc通過發(fā)送函數(shù)發(fā)送,即完成了氣體濃度數(shù)據(jù)的采集。
本系統(tǒng)中的ZigBee無線網(wǎng)絡數(shù)據(jù)傳輸模塊由連接有害氣體傳感器的終端節(jié)點、路由節(jié)點以及協(xié)調(diào)器三部分組成。上電之后的協(xié)調(diào)器節(jié)點會自動建立ZigBee無線傳感網(wǎng)絡。無線傳感網(wǎng)絡在被創(chuàng)建之后即允許多個子節(jié)點加入網(wǎng)絡;路由器負責將有害氣體濃度信息在無線傳感網(wǎng)絡中的各個節(jié)點之間進行傳輸。它即可以連接協(xié)調(diào)器并作為協(xié)調(diào)器的子節(jié)點,也可以連接其他路由器作為其他路由器的父節(jié)點或者是子節(jié)點;協(xié)調(diào)器節(jié)點在每一個無線傳感網(wǎng)絡中都是獨一無二的,它負責接收由路由器或者是終端節(jié)點傳輸來的氣體濃度信息。
協(xié)調(diào)器建立網(wǎng)絡的過程如下:
(1)當協(xié)調(diào)器上電以后,系統(tǒng)會進行硬件設(shè)備的自動初始化并建立ZigBee無線傳感網(wǎng)絡,當網(wǎng)絡成功建立,協(xié)調(diào)器進入網(wǎng)絡掃描狀態(tài),檢測是否有子節(jié)點發(fā)送來的加入網(wǎng)絡請求,如果存在加入網(wǎng)絡的請求,則協(xié)調(diào)器進行請求處理。
(2)當協(xié)調(diào)器的子節(jié)點上電后,系統(tǒng)調(diào)用ADOInitDevice()函數(shù)進行設(shè)備初始化,并設(shè)置初始化事件,之后調(diào)用ADO_StartService()函數(shù),在網(wǎng)絡層中如果調(diào)用了發(fā)現(xiàn)加入網(wǎng)絡請求函數(shù),則協(xié)調(diào)器進行請求處理并將處理響應返回給子節(jié)點,子節(jié)點接收響應之后設(shè)置設(shè)備啟動事件并進行執(zhí)行,進一步設(shè)置ZDO狀態(tài)改變事件進行網(wǎng)絡狀態(tài)更新。
(3)子節(jié)點向用戶發(fā)送ZDO狀態(tài)改變事件,當用戶收到ZDO狀態(tài)改變事件,根據(jù)狀態(tài)執(zhí)行發(fā)送數(shù)據(jù)函數(shù),在網(wǎng)絡中進行數(shù)據(jù)傳輸。
在數(shù)據(jù)傳輸?shù)倪^程中,主要流程如下:
(1)首先調(diào)用osal_msg_receive()函數(shù),通過在消息隊列中接收消息。
(2)通過SampleApp_Send_ADC_Message()函數(shù)將接收到的數(shù)據(jù)通過串口發(fā)送到PC端,通過上位機進行數(shù)據(jù)的顯示。在函數(shù)SampleApp_Send_ADC_Message(void)中,調(diào)用了AF_DataRequest()函數(shù)進行數(shù)據(jù)傳輸。
在AF_DataRequest()函數(shù)中,主要有以下參數(shù):
參數(shù)名 參數(shù)類型 參數(shù)含義*dstAddr *afAddrType_t 目的地址結(jié)構(gòu)體變量(發(fā)送目的地址和端點地址以及模式)*srcEP endPointDesc_t 設(shè)備端點描述符cID uint16 集群號Len uint8 發(fā)送數(shù)據(jù)的長度Data uint8 存放發(fā)送數(shù)據(jù)的數(shù)組SampleApp_TransID uint8 任務ID號AF_DISCV_ROUTE uint8 有效位掩碼的發(fā)送選項AF_DEFAULT_RADIUS uint8 傳送跳數(shù)
在本系統(tǒng)中,我們使用點播的方式進行數(shù)據(jù)傳輸,即當終端節(jié)點的父節(jié)點為路由節(jié)點時,終端節(jié)點的數(shù)據(jù)只發(fā)送至該節(jié)點的父路由節(jié)點,不會發(fā)送到其他節(jié)點,所以在設(shè)置AF_DataRequest()的參數(shù)時。
(1)設(shè)置了*dstAddr為SampleApp_P2P_DstAddr。
(2)設(shè)置*srcEp為SampleApp_epDesc。
(3)設(shè)置cID為SAMPLEAPP_P2P_CLUSTERID。
(4)設(shè)置Len為需要傳輸?shù)臄?shù)據(jù)的長度。
(5)設(shè)置Data為需要傳輸?shù)臄?shù)據(jù)即上文中提到的str_adc。
利用這些參數(shù)的設(shè)置,當AF_DataRequest()的返回值等于afStatus_SUCCESS時,數(shù)據(jù)進行發(fā)送。利用AF_DataRequest()函數(shù),實現(xiàn)了在ZigBee無線傳感網(wǎng)絡中將終端節(jié)點采集的數(shù)據(jù)通過路由轉(zhuǎn)發(fā),最后傳輸?shù)絽f(xié)調(diào)器的過程。
不同于其它需要不管更換電池的無線傳感網(wǎng)絡節(jié)點,本系統(tǒng)中的無線傳感網(wǎng)絡節(jié)點使用了可循環(huán)充電的蓄電池作為節(jié)點供電的主要能源,系統(tǒng)所采用的蓄電池可循環(huán)進行充電,且其電壓范圍為7.2V-7.5V,而ZigBee節(jié)點的額定電壓為5V,故系統(tǒng)中使用了降壓模塊進行電壓降壓處理,將蓄電池的電壓降低至在系統(tǒng)節(jié)點中可用的電壓范圍。圖5所示系統(tǒng)供電模塊的主要電路圖,圖6為供電模塊的實拍圖。在使用降壓器時,根據(jù)實際所用電壓可靈活調(diào)節(jié)輸出與輸入電壓值,降壓器的示意圖如圖7所示,該降壓模塊主要調(diào)節(jié)流程如下:
(1)調(diào)節(jié)變壓器使其進入變壓器輸入輸出電壓調(diào)整模式。
(2)根據(jù)系統(tǒng)中節(jié)點對電壓范圍的需求調(diào)節(jié)變壓器的輸入電壓以及輸出電壓。
(3)當輸入電壓與輸出電壓均設(shè)置完畢后保存所有參數(shù),退出變壓器輸入輸出電壓調(diào)節(jié)模式。
圖5 節(jié)點供電模塊設(shè)計圖
圖6 供電模塊實拍圖
圖7 降壓器示意圖
基于ZigBee無線傳感器網(wǎng)絡的奶牛場有害氣體監(jiān)測系統(tǒng)中軟件模塊主要分為上位機與移動端App。PC端上位機負責顯示協(xié)調(diào)器接收到的數(shù)據(jù)。當協(xié)調(diào)器通過串口連接了PC端的串口,打開上位機以后,可選擇已經(jīng)存在的串口,打開串口后,若協(xié)調(diào)器接收到了由路由節(jié)點或者終端節(jié)點傳輸過來的數(shù)據(jù),則上位機會依次顯示每一條傳輸過來的數(shù)據(jù)。當PC端的數(shù)據(jù)庫服務處于開啟狀態(tài),則上位機會以指定格式將接收的數(shù)據(jù)寫入數(shù)據(jù)庫。
移動端App負責用可視化方式顯示終端節(jié)點監(jiān)測到的氣體濃度的動態(tài)變化,同時支持查詢歷史氣體記錄以及設(shè)置濃度閾值功能。
PC端上位機主要采用QT Creator開發(fā)平臺進行開發(fā)。上位機有數(shù)據(jù)顯示區(qū),同時也可以設(shè)置串口、波特率、數(shù)據(jù)位、校驗位、停止位。上位機也支持將連接數(shù)據(jù)庫功能,在協(xié)調(diào)器通過串口方式將數(shù)據(jù)信息傳輸PC機時,上位機會顯示傳輸過來的數(shù)據(jù),當上位機與MySQL數(shù)據(jù)庫連接后,數(shù)據(jù)就會自動寫入數(shù)據(jù)庫。上位機界面業(yè)務流程圖如圖8所示:
圖8 上位機業(yè)務流程圖
數(shù)據(jù)顯示區(qū)顯示的內(nèi)容連接PC端的協(xié)調(diào)器接收到的終端節(jié)點通過傳感器采集到的數(shù)據(jù)濃度,數(shù)據(jù)格式為Rx:節(jié)點編號 氣體名稱:氣體濃度值 氣體濃度單位。上位機可直接連接MySQL數(shù)據(jù)庫,當連接數(shù)據(jù)庫后,會將接收到的數(shù)據(jù)進行格式解析,并插入數(shù)據(jù)庫中。左下角狀態(tài)欄顯示數(shù)據(jù)庫連接狀態(tài)以及端口狀態(tài)。如圖9為上位機界面。
圖9 上位機界面
移動端App采用Android開發(fā),主要開發(fā)工具為谷歌公司的Android Studio。Android Studio專門用于谷歌的安卓操作系統(tǒng)開發(fā),內(nèi)置于JetBrains 公司的IntelliJ IDEA軟件和專門的Android開發(fā)插件,官方提供了Windows版本、Linux版本、Mac版本,該開發(fā)工具具有以下特點:
a)基于Gradle的構(gòu)建支持;
b)Android特定的重復機制和快速修復機制;
c)Lint工具來捕捉性能;
d)基于模板的向?qū)韯?chuàng)建常見的設(shè)計與組件;
e)支持構(gòu)建Android Wear應用程序;
f)內(nèi)置對Google云平臺的支持;
本文使用Android Studio開發(fā)的移動端App主要功能如下:
g)用戶注冊、用戶登陸功能(如圖10所示)
h)實時監(jiān)測節(jié)點氣體濃度功能(如圖11所示)
i)查詢歷史監(jiān)測信息(如圖12所示)
j)設(shè)置氣體濃度閾值功能(如圖13所示)
圖10 登陸注冊
圖11 歷史節(jié)點監(jiān)測
圖12 實時監(jiān)測
圖13 閾值設(shè)定
為測試系統(tǒng)數(shù)據(jù)采集以及組網(wǎng)效果,假設(shè)該網(wǎng)絡由網(wǎng)關(guān)節(jié)點、一個路由器節(jié)點、三個連接傳感器的終端節(jié)點構(gòu)成一個樹型網(wǎng)絡,利用節(jié)點的LCD顯示屏觀察測試結(jié)果。
系統(tǒng)中LCD顯示屏顯示EndDevice的節(jié)點為終端節(jié)點,顯示Router的為路由器節(jié)點,顯示ZigBee Card的為協(xié)調(diào)器節(jié)點。系統(tǒng)中各個節(jié)點上電后,網(wǎng)關(guān)節(jié)點會建立一個ZigBee網(wǎng)絡(如圖14)所示,其自身分配了一個16位的網(wǎng)絡地址FFF1,網(wǎng)關(guān)節(jié)點建立網(wǎng)絡后會處于允許節(jié)點加入狀態(tài),啟動路由器節(jié)點后,網(wǎng)關(guān)節(jié)點為路由器節(jié)點分配一個網(wǎng)絡地址(如圖15),并且路由器節(jié)點的Parent為0,表示其父節(jié)點為協(xié)調(diào)器,同時路由器節(jié)點為終端節(jié)點分配網(wǎng)絡地址(如圖16),EndDevice后面的16位地址即為終端節(jié)點的網(wǎng)絡地址,終端節(jié)點的Parent為路由器節(jié)點的網(wǎng)絡地址,表示終端節(jié)點的父節(jié)點為路由器節(jié)點。終端節(jié)點LCD顯示屏第三行的內(nèi)容表示節(jié)點編號、所監(jiān)測的氣體名稱以及氣體的實時濃度值。
圖14 網(wǎng)關(guān)節(jié)點
圖15 路由器節(jié)點
圖16 終端節(jié)點
同時,當協(xié)調(diào)器通過串口連接PC端,打開上位機并打開串口(如圖17)所示,就會看到上位機依次顯示各個終端節(jié)點傳輸過來的數(shù)據(jù),并且當數(shù)據(jù)庫連接成功后會將數(shù)據(jù)自動插入數(shù)據(jù)庫中,終端節(jié)點每隔5秒鐘發(fā)送一次數(shù)據(jù)(如圖18)。
圖17 上位機
當數(shù)據(jù)寫入數(shù)據(jù)庫后,我們打開移動端App,可查看終端節(jié)點中氣體濃度的變化過程(如圖19)
測試結(jié)果表明,網(wǎng)關(guān)節(jié)點成功建立了一個ZigBee樹型網(wǎng)絡,并且路由器節(jié)點與終端節(jié)點成功加入的ZigBee網(wǎng)絡中,且終端節(jié)點成功采集了傳感器監(jiān)測到的數(shù)據(jù)并將數(shù)據(jù)傳輸?shù)搅藚f(xié)調(diào)器,協(xié)調(diào)器接收到了數(shù)據(jù)并通過上位機進行了顯示與數(shù)據(jù)庫插入,且移動端App也成功顯示出了氣體濃度的變化。
圖18 數(shù)據(jù)庫數(shù)據(jù)
圖19 App監(jiān)測顯示圖
本文設(shè)計了一套基于ZigBee無線傳感網(wǎng)絡的奶牛場氣體監(jiān)測系統(tǒng),主要成功實現(xiàn)了無線傳感網(wǎng)絡的搭建,對奶牛場中有毒有害氣體的實時監(jiān)測。本系統(tǒng)最終將終端節(jié)點采集到的氣體濃度信息傳輸至PC端的上位機。上位機不僅實現(xiàn)了對奶牛場中有害氣體濃度的實時查詢,也實現(xiàn)了濃度數(shù)據(jù)在MySQL數(shù)據(jù)庫中的存儲。本系統(tǒng)也設(shè)計了安卓手機端App方便用戶實時查看數(shù)據(jù)庫中存放的氣體濃度信息。本系統(tǒng)通過實驗調(diào)試和在奶牛場的實地認證達到了項目的設(shè)計要求并且實現(xiàn)了對奶牛場中有害氣體進行實時監(jiān)測的功能。