李 俊 峰
(安陽(yáng)師范學(xué)院軟件學(xué)院 河南 安陽(yáng) 455000)
在冬季,中南部沒(méi)有集中供暖的屋內(nèi)非常寒冷。為了取暖,人們想了各種辦法。其中,利用燃?xì)獗趻鞝t取暖,受到了很多家庭的青睞[1]。燃?xì)獗趻鞝t可以單戶安裝,能對(duì)本戶進(jìn)行冬季供暖和熱水洗浴。使用燃?xì)獗趻鞝t供暖具有方便、快捷、舒適性比較高、節(jié)能環(huán)保等優(yōu)點(diǎn)[2-3]。為了實(shí)現(xiàn)對(duì)室溫的控制,需要遠(yuǎn)程控制壁掛爐的開(kāi)關(guān)和能隨時(shí)查看室內(nèi)的溫度;由于燃?xì)獗趻鞝t在冬季經(jīng)常開(kāi)著,需要監(jiān)控天然氣是否會(huì)出現(xiàn)泄露和燃燒不完全的一氧化碳?xì)怏w會(huì)否倒灌到室內(nèi)。現(xiàn)階段對(duì)于智能監(jiān)控系統(tǒng)研究的很多,文獻(xiàn)[3-4]等都研究了遠(yuǎn)程監(jiān)控系統(tǒng),但是與燃?xì)獗趻鞝t相結(jié)合的遠(yuǎn)程監(jiān)控系統(tǒng)卻很難找到。
為了解決這些問(wèn)題,本文把遠(yuǎn)程監(jiān)控系統(tǒng)和燃?xì)獗趻鞝t結(jié)合起來(lái),開(kāi)發(fā)了基于Android的燃?xì)獗趻鞝t監(jiān)控系統(tǒng)。該系統(tǒng)功能有:遠(yuǎn)程打開(kāi)或關(guān)閉燃?xì)獗趻鞝t;隨時(shí)查看室內(nèi)的溫度;隨時(shí)查看室內(nèi)的危險(xiǎn)氣體是否超標(biāo);當(dāng)室內(nèi)危險(xiǎn)氣體超標(biāo)時(shí)會(huì)自動(dòng)關(guān)閉燃?xì)獗趻鞝t。
本系統(tǒng)由硬件系統(tǒng)和軟件系統(tǒng)兩部分組成。硬件部分是由協(xié)調(diào)器、控制燃?xì)獗趻鞝t電源的智能開(kāi)關(guān)、溫濕度傳感器和空氣傳感器組成的ZigBee無(wú)線傳感網(wǎng)絡(luò)[4-5];軟件系統(tǒng)由用來(lái)存儲(chǔ)監(jiān)控?cái)?shù)據(jù)的Yeelink云平臺(tái)和Android手機(jī)端APP組成。系統(tǒng)總體設(shè)計(jì)如圖1所示。傳感器節(jié)點(diǎn)和智能開(kāi)關(guān)加入ZigBee無(wú)線網(wǎng)絡(luò),溫濕度和空氣質(zhì)量等參數(shù)通過(guò)ZigBee無(wú)線網(wǎng)絡(luò)匯集到協(xié)調(diào)器。由于需要把數(shù)據(jù)上傳到網(wǎng)絡(luò)Yeelink云平臺(tái),需要實(shí)現(xiàn)協(xié)調(diào)器的聯(lián)網(wǎng),于是在協(xié)調(diào)器上額外接了一個(gè)W5500模塊,這樣,協(xié)調(diào)器就成為TCP客戶端連接以太網(wǎng)內(nèi)的主機(jī),將終端節(jié)點(diǎn)發(fā)來(lái)的數(shù)據(jù)通過(guò)W5500上傳給Yeelink云平臺(tái)。Android手機(jī)上的APP就可以隨時(shí)通過(guò)云平臺(tái)遠(yuǎn)程監(jiān)控和操作燃?xì)獗趻鞝t。

圖1 總體設(shè)計(jì)圖
本系統(tǒng)的協(xié)調(diào)器是由TI公司ZigBee SOC CC2530芯片為核心進(jìn)行設(shè)計(jì)的。它結(jié)合了領(lǐng)先的RF收發(fā)器、業(yè)界標(biāo)準(zhǔn)的增強(qiáng)型8051 CPU內(nèi)核,并集成了ZigBee射頻發(fā)射系統(tǒng),TI公司為其制定了完備的軟件協(xié)議棧z-stack。由于本系統(tǒng)的傳感器節(jié)點(diǎn)比較少,并且距離不遠(yuǎn),因此ZigBee網(wǎng)絡(luò)采用星型網(wǎng)絡(luò)進(jìn)行布局。
在對(duì)燃?xì)獗趻鞝t設(shè)置完成后,只要接通燃?xì)夂碗娫淳蜁?huì)自動(dòng)開(kāi)啟加熱,而關(guān)閉電源就會(huì)自動(dòng)關(guān)閉壁掛爐。因此,為了實(shí)現(xiàn)對(duì)燃?xì)獗趻鞝t進(jìn)行控制,需要設(shè)置一個(gè)智能電源開(kāi)關(guān),通過(guò)智能開(kāi)關(guān)接收到的信息,來(lái)打開(kāi)燃?xì)獗趻鞝t或者關(guān)閉燃?xì)獗趻鞝t。
智能開(kāi)關(guān)主要通過(guò)一個(gè)繼電器控制電路來(lái)實(shí)現(xiàn)控制交流電回路的連通或者斷開(kāi)。繼電器型號(hào)采用HRS3FNH-S-DC 5 V,最大可承受AC 250 V的電壓,額定電流最大為10 A,能滿足家用燃?xì)獗趻鞝t的功率要求。用三極管驅(qū)動(dòng)繼電器的吸合與關(guān)閉,并聯(lián)在線圈兩端的二極管能為感性線圈提供泄放回路,提高電路安全性,延長(zhǎng)繼電器使用壽命,其輸入端接CC2530的P0.1引腳。
本系統(tǒng)主要監(jiān)控室內(nèi)的溫度,防止燃?xì)庑孤┮约胺乐谷紵笈懦龅臍怏w倒灌回室內(nèi),因此需要溫度傳感器和空氣傳感器。
溫度傳感器選用精度較高的DHT22溫濕度傳感器,可以通過(guò)單總線直接和CC2530相連接。
空氣傳感器采用TGS2600空氣傳感器,該傳感器是由日本FIGARO公司開(kāi)發(fā)生產(chǎn)的一種新型半導(dǎo)體氣體傳感器,能夠非常靈敏地檢測(cè)到空氣中的低濃度污染物,對(duì)H2、CO和CH4等有較高的檢測(cè)敏感度。TGS2600與CC2530的A/D轉(zhuǎn)換接口P0.6相連接。
空氣傳感器和溫濕度傳感器信號(hào)的采集、處理和對(duì)繼電器開(kāi)關(guān)的控制都是由CC2530內(nèi)部集成的8051控制器來(lái)完成的,而ZigBee網(wǎng)絡(luò)之間數(shù)據(jù)的傳輸由CC2530內(nèi)部集成的RF收發(fā)器來(lái)完成的。
協(xié)調(diào)器主要負(fù)責(zé)ZigBee網(wǎng)絡(luò)的發(fā)起、配置參數(shù)的設(shè)定、網(wǎng)絡(luò)信息的管理及維護(hù)功能[6]。協(xié)調(diào)器部件主要由CC2530芯片作為主控芯片,RF前端芯片選用TI公司的集成度很高的射頻前端芯片CC2591。通過(guò)協(xié)調(diào)器,可以主動(dòng)和其他終端結(jié)點(diǎn)組成一個(gè)ZigBee網(wǎng)絡(luò)。協(xié)調(diào)器能收集這些終端結(jié)點(diǎn)的刷新數(shù)據(jù),也可以將執(zhí)行命令通過(guò)ZigBee網(wǎng)絡(luò)傳遞給相應(yīng)終端。
由于需要將協(xié)調(diào)器收集到的數(shù)據(jù)傳遞到云端,而CC2530芯片無(wú)法實(shí)現(xiàn)對(duì)互聯(lián)網(wǎng)的連接,只能通過(guò)串口將收集到的數(shù)據(jù)傳出去。這樣就需要一個(gè)聯(lián)網(wǎng)設(shè)備。W5500是WIZnet公司推出的一款在硬件上實(shí)現(xiàn)了TCP/IP協(xié)議的以太網(wǎng)芯片,通過(guò)該芯片無(wú)需其他設(shè)備進(jìn)行數(shù)據(jù)轉(zhuǎn)換就可以作為網(wǎng)關(guān)直接連接互聯(lián)網(wǎng)。CC2530實(shí)質(zhì)上是一款MCU(微控制單元),而W5500可以通過(guò)SPI接口與MCU進(jìn)行通信。CC2530片上有兩個(gè)SPI接口,我們可以選擇其中一個(gè)作為W5500的控制接口。
本系統(tǒng)通過(guò)Android手機(jī)APP發(fā)送命令給Yeelink云服務(wù)器;云服務(wù)器將接收到的命令發(fā)送給室內(nèi)的網(wǎng)關(guān)W5500;W5500對(duì)接收到的控制命令進(jìn)行解析和處理,然后將處理的結(jié)果發(fā)送給協(xié)調(diào)器模塊;協(xié)調(diào)器通過(guò)ZigBee網(wǎng)絡(luò)將命令發(fā)送給相應(yīng)的終端結(jié)點(diǎn);終端結(jié)點(diǎn)接到命令后進(jìn)行響應(yīng),從而實(shí)現(xiàn)Android手機(jī)監(jiān)控室內(nèi)環(huán)境并實(shí)現(xiàn)對(duì)燃?xì)獗趻鞝t的開(kāi)關(guān)控制。數(shù)據(jù)傳輸如下:各個(gè)傳感節(jié)點(diǎn)將數(shù)據(jù)通過(guò)ZigBee網(wǎng)絡(luò)傳輸給協(xié)調(diào)器,協(xié)調(diào)器對(duì)數(shù)據(jù)進(jìn)行處理,若超出,就將控制信息傳遞給智能開(kāi)關(guān)終端,從而控制控制開(kāi)關(guān)的閉合或者打開(kāi)。在判斷數(shù)據(jù)的同時(shí),協(xié)調(diào)器把數(shù)據(jù)通過(guò)網(wǎng)關(guān)W5500,上傳到互聯(lián)網(wǎng)上的云服務(wù)器存儲(chǔ)起來(lái),最后在Android手機(jī)請(qǐng)求數(shù)據(jù)時(shí),將數(shù)據(jù)傳遞給APP。終端結(jié)點(diǎn)的控制圖和數(shù)據(jù)流圖如圖2所示。

圖2 終端結(jié)點(diǎn)的控制圖和數(shù)據(jù)流圖
系統(tǒng)的軟件設(shè)置主要包括ZigBee終端節(jié)點(diǎn)設(shè)置、協(xié)調(diào)器設(shè)置、網(wǎng)關(guān)設(shè)置、云端設(shè)置和Android手機(jī)客戶端設(shè)置幾部分。
協(xié)調(diào)器模塊是ZigBee網(wǎng)絡(luò)的主要控制器,主要負(fù)責(zé)網(wǎng)絡(luò)的建立、維護(hù)和數(shù)據(jù)的中轉(zhuǎn)[7]。還可以通過(guò)公司為CC2530提供的ZStack協(xié)議棧控制ZigBee網(wǎng)絡(luò)。
(1) 對(duì)網(wǎng)關(guān)W5500的處理 在該協(xié)議棧中,需要先將W5500的驅(qū)動(dòng)程序包添加到CC2530的例程中,去掉“LCD_SUPPORTED”,并添加“HAL_LCD=FALSE”,這樣能避免與LCD驅(qū)動(dòng)發(fā)生沖突,導(dǎo)致SPI不可用。將W5500的初始化和相關(guān)配置函數(shù)放在應(yīng)用層的任務(wù)里面執(zhí)行,當(dāng)系統(tǒng)運(yùn)行起來(lái)后,系統(tǒng)會(huì)每隔一段時(shí)間就要對(duì)W5500的網(wǎng)絡(luò)狀態(tài)進(jìn)行一次輪詢處理,該處理放在應(yīng)用層sapi.c文件中的ZB_USER_EVENTS函數(shù)中。Sapi.c文件中定義了節(jié)點(diǎn)組網(wǎng)和入網(wǎng)的應(yīng)用函數(shù)。該文件里初始化了SAPI 任務(wù),在這個(gè)任務(wù)中定義了ZB_ENTRY_EVENT和ZB_USER_EVENTS兩個(gè)事件,ZB_ENTRY_EVENT僅僅運(yùn)行一次,用來(lái)定義設(shè)備的類型(協(xié)調(diào)器或終端節(jié)點(diǎn)),ZB_USER_EVENTS處理用戶事件,會(huì)運(yùn)行多次。
該配置函數(shù)能啟動(dòng)TCP客戶端程序,用來(lái)維護(hù)W5500設(shè)備與云服務(wù)器的連接,使得W5500在插上網(wǎng)線后能夠及時(shí)連上Intent云服務(wù)器。
(2) 溫濕度傳感器和氣體傳感器的設(shè)計(jì) 數(shù)據(jù)的采集需要在協(xié)調(diào)器的應(yīng)用層添加定時(shí)采集函數(shù),協(xié)調(diào)器定時(shí)給相關(guān)傳感器終端結(jié)點(diǎn)發(fā)送采集命令。本系統(tǒng)采用DHT22溫濕度傳感器采集室內(nèi)的溫度數(shù)據(jù),當(dāng)終端節(jié)點(diǎn)接收到采集命令時(shí)進(jìn)行采集,并將采集結(jié)果通過(guò)ZigBee網(wǎng)絡(luò)上報(bào)給協(xié)調(diào)器進(jìn)行處理。采用TGS2600空氣傳感器采集燃?xì)獗趻鞝t附近的氣體信息,當(dāng)終端結(jié)點(diǎn)接收到采集命令時(shí)候進(jìn)行采集,并將采集到的數(shù)據(jù)通過(guò)ZigBee網(wǎng)絡(luò)上傳給協(xié)調(diào)器進(jìn)行判斷處理。
(3) 協(xié)議棧中對(duì)燃?xì)獗趻鞝t的智能開(kāi)關(guān)控制邏輯 在協(xié)調(diào)器接收到終端結(jié)點(diǎn)發(fā)送的數(shù)據(jù)后,在通過(guò)網(wǎng)關(guān)上傳到云端服務(wù)器的同時(shí),需要在協(xié)議棧中數(shù)據(jù)進(jìn)行判斷處理。首先通過(guò)APP設(shè)置室內(nèi)溫度,通過(guò)氣體傳感器取得有害氣體濃度并判斷是否達(dá)到預(yù)警值,當(dāng)達(dá)到預(yù)警值時(shí)需要對(duì)燃?xì)獗趻鞝t開(kāi)關(guān)進(jìn)行控制。
在對(duì)燃?xì)獗趻鞝t的控制上,本系統(tǒng)在運(yùn)行時(shí)候主要分為手動(dòng)模式和自動(dòng)模式。手動(dòng)模式就是不管室溫如何,只能用手動(dòng)(或通過(guò)操作Android手機(jī)中的相應(yīng)APP)來(lái)開(kāi)關(guān)壁掛爐。自動(dòng)模式則是通過(guò)程序判斷,當(dāng)溫度達(dá)到某一值時(shí)候自動(dòng)通過(guò)智能開(kāi)關(guān)打開(kāi)或者關(guān)閉燃?xì)獗趻鞝t,達(dá)到節(jié)省資源的目的。當(dāng)氣體濃度達(dá)到某一危險(xiǎn)值時(shí)候,會(huì)將模式自動(dòng)切換為手動(dòng)模式并關(guān)閉燃?xì)獗趻鞝t。具體的程序流程圖如圖3所示。

圖3 協(xié)調(diào)器對(duì)智能開(kāi)關(guān)的控制圖
本文使用Yeelink云服務(wù)器作為整個(gè)系統(tǒng)連接家庭網(wǎng)關(guān)和手機(jī)APP的紐帶,根據(jù)命令實(shí)現(xiàn)對(duì)整個(gè)系統(tǒng)的數(shù)據(jù)的傳輸[8-9]。Yeeklink是一個(gè)開(kāi)放的公共物聯(lián)網(wǎng)接入平臺(tái),能使傳感器數(shù)據(jù)的接入、存儲(chǔ)和展現(xiàn)變得輕松簡(jiǎn)單。使用該平臺(tái),需要首先注冊(cè)一個(gè)賬號(hào)(APP KEY),作為不同用戶連接設(shè)備的唯一標(biāo)識(shí);接著將系統(tǒng)用到的傳感器通過(guò)“添加新設(shè)備”的方式,添加到Y(jié)eeklink平臺(tái)上;然后下載yeelink SDK,用自己注冊(cè)的APP KEY和設(shè)備的信息替換掉原來(lái)的默認(rèn)信息。這樣就完成了云服務(wù)器傳感器的連接。
通過(guò)Android客戶端我們能時(shí)刻關(guān)注家里溫度情況和燃?xì)獗趻鞝t的工作情況,還可以通過(guò)Android客戶端實(shí)現(xiàn)對(duì)燃?xì)獗趻鞝t的控制。由于訪問(wèn)網(wǎng)絡(luò)是一個(gè)耗時(shí)操作,需要開(kāi)啟一個(gè)子線程,在子線程中創(chuàng)建基于TCP/IP協(xié)議的Socket輸入輸出流,用來(lái)接收和發(fā)送網(wǎng)絡(luò)數(shù)據(jù)。子線程中得到的數(shù)據(jù),不能直接顯示到頁(yè)面上,需要通過(guò)handler消息機(jī)制,將接收到的數(shù)據(jù)發(fā)送到主線程并顯示到主頁(yè)面中。
頁(yè)面主要用到:TextView控件,用文本顯示接收到的數(shù)據(jù)內(nèi)容;Switch控件,用來(lái)設(shè)置手動(dòng)模式或自動(dòng)模式,還用來(lái)控制壁掛爐的開(kāi)關(guān)狀態(tài);EditText控件和Button控件,用來(lái)設(shè)置室內(nèi)的溫度; LineChartView控件,這是個(gè)第三方控件,利用圖表的形式直觀地呈現(xiàn)一段時(shí)間室內(nèi)的溫度情況。
當(dāng)操作Switch控件和Button控件的時(shí)候,需要在主線程中設(shè)置事件監(jiān)聽(tīng)器。當(dāng)監(jiān)聽(tīng)到控件狀態(tài)改變的時(shí)候,觸發(fā)聯(lián)網(wǎng)子線程,通過(guò)網(wǎng)絡(luò)將相應(yīng)的命令發(fā)送給云服務(wù)器。
測(cè)試系統(tǒng)硬件由2個(gè)溫度傳感器節(jié)點(diǎn),分別放置在一個(gè)臥室和客廳、1個(gè)空氣傳感器節(jié)點(diǎn)、一個(gè)智能開(kāi)關(guān)節(jié)點(diǎn)、一個(gè)協(xié)調(diào)器模塊和一個(gè)Android手機(jī)組成。
在測(cè)試中,主要測(cè)試溫度數(shù)據(jù)的采集、有害氣體超標(biāo)的響應(yīng)和手機(jī)對(duì)智能開(kāi)關(guān)的控制。設(shè)置家里溫度為18 ℃,利用自動(dòng)模式進(jìn)行測(cè)試。在2個(gè)溫度傳感器節(jié)點(diǎn)附近放置兩個(gè)家用溫度計(jì)同時(shí)測(cè)試并記錄測(cè)試結(jié)果。由于用了兩個(gè)溫度傳感器節(jié)點(diǎn),顯示的溫度是兩個(gè)溫度傳感器的均值。
溫度計(jì)測(cè)試結(jié)果平均值和傳感器測(cè)試平均值實(shí)時(shí)溫度趨勢(shì)圖如圖4所示。其平均溫度誤差不超過(guò)0.2 ℃。

圖4 實(shí)時(shí)溫度平均值趨勢(shì)圖
由于太短時(shí)間內(nèi)的室內(nèi)溫度變化比較小,用圖顯示意義不大,因此,將每半個(gè)小時(shí)的平均氣溫進(jìn)行比較,結(jié)果如圖5所示。

圖5 燃?xì)獗趻鞝t狀態(tài)監(jiān)控圖
為了測(cè)試在有害氣體濃度升高時(shí)候系統(tǒng)的有效性,將氣體打火機(jī)的氣體靠近氣體傳感器進(jìn)行排放。隨著氣體的排放,智能開(kāi)關(guān)關(guān)閉了燃?xì)獗趻鞝t的電源,壁掛爐停止了工作;在手機(jī)APP中,看到模式自動(dòng)切換到了手動(dòng)模式,可燃?xì)怏w濃度也變成了“危險(xiǎn)”,壁掛爐模式變成了“手動(dòng)”。具體如圖6所示,經(jīng)測(cè)試,用手機(jī)APP能打開(kāi)和關(guān)閉燃?xì)獗趻鞝t,能準(zhǔn)確感應(yīng)有害氣體并響應(yīng)。

圖6 有害氣體升高后的狀態(tài)圖
測(cè)試結(jié)果表明:該系統(tǒng)基本完成了設(shè)計(jì)要求。能遠(yuǎn)程實(shí)時(shí)監(jiān)控室內(nèi)溫度,監(jiān)控溫度與實(shí)際溫度誤差不超過(guò)0.2 ℃,當(dāng)有害氣體超標(biāo)時(shí)候,能及時(shí)切斷燃?xì)獗趻鞝t電源。
本文設(shè)計(jì)了基于Android的燃?xì)獗趻鞝t監(jiān)控系統(tǒng)。傳統(tǒng)壁掛爐系統(tǒng)的溫度設(shè)定、監(jiān)控和有害氣體監(jiān)控都是基于本地,不能遠(yuǎn)程及時(shí)查看及管理。本系統(tǒng)能通過(guò)手機(jī)APP,實(shí)時(shí)監(jiān)控和管理燃?xì)獗趻鞝t的狀態(tài)。測(cè)試結(jié)果表明,該系統(tǒng)安全經(jīng)濟(jì),穩(wěn)定性高,人機(jī)界面簡(jiǎn)潔直觀、實(shí)用性強(qiáng)。