吳祥,康戈文
(電子科技大學 航空航天學院,成都 610000)
本系統在傳統的滴水灌溉系統基礎上,在農田中采用ZigBee自組網網絡進行信息的傳輸,不用在農田中布置通信線路;遠程數據的傳輸采用GSM網絡,不需要額外地布置通信設備,減少了農田灌溉的成本,增加了系統的安全性。系統采用具有低功耗特性的ZigBee無線自組網單片機,采用兩節干電池供電,節約對能源的消耗。農田中的無線傳感網絡可以實時地采集灌溉系統的運行狀況,將其傳輸到遠程的監控系統,工作人員實時遠程控制灌溉,極大地節省了勞動力,提高了工作效率,增加了農民的收入。
農田種植面積大,地塊分散,這就決定了采集系統應具有如下兩個主要特點:一是系統控制節點多;二是系統是一個覆蓋面很廣的通信網絡(采集點具有分散性)。基于上述特點,系統設計為分布式體系結構,主要包含農田監控終端和監控管理中心兩個模塊,而農田監控終端由于功能的不同又分為ZigBee終端和ZigBee協調器(與上位機交互的終端)。基于上述分析本系統采用ZigBee技術和GSM技實現系統網絡的組件和數據的傳輸。其系統結構如圖1所示。

圖1 系統總體結構圖
遠程的監控管理中心通過GSM網絡發送控制指令到農田中的ZigBee協調器,ZigBee協調器收到控制指令后,將其轉發到ZigBee終端,以實現對灌溉系統的控制。首先監控管理中心的計算機通過RS232接口向GSM無線通信設備PTM100發送AT命令,PTM100以短消息形式通過GSM網絡把控制命令發送到農田ZigBee協調器,ZigBee協調器根據監控管理中心發送的控制命令,向相應的終端發送控制命令,控制電磁閥的關斷,ZigBee終端采集電磁閥的狀態通過無線網絡傳輸到ZigBee協調器,再通過GSM網絡將電磁閥的狀態傳輸到數據終端。
根據系統功能的要求,系統的硬件電路分為太陽能充電電路、CC2530供電電路、電磁閥驅動電路。
由于ZigBee協調器不能睡眠而且加入了GSM模塊,ZigBee協調器耗電量比較大,因此ZigBee協調器必須采用太陽能電池板供給電池充電。其充電電路如2所示。

圖2 太陽能充電電路
太陽能電池板接在J1處,CN3082是一塊太陽能充電管理芯片。當輸入電壓大于電源低電壓檢測閾值時,CN3082開始對電池充電,在預充電狀態和恒流充電狀態,引腳輸出低電平,表示充電正在進行。如果電池電壓反饋輸入端FB引腳電壓低于1.54V,充電器處于預充電狀態,充電電流為所設置的恒流充電電流的20%。電池電壓反饋輸入端FB引腳電壓大于1.54V且小于2.445V時,充電器采用恒流模式對電池充電,充電電流由電阻R1確定。當電池電壓反饋輸入端FB引腳電壓大于2.445V時,CN3082處于維持充電狀態,維持充電電流由輸入電壓VIN、R2和R1決定。在維持充電狀態,當電池電壓反饋輸入端FB引腳電壓下降到1.65V時,CN3082將開始新的充電周期,進入預充電狀態或者恒流充電狀態。
由于CC2530的供電電壓為2~3.6V,而充電電池的輸出電壓為3.7V,因此用充電電池供電的CC2530供電電路必須經過一個線性穩壓電路,使其輸出電壓變為2~3.6V,電路如圖3所示。其中CAT6219-330是一塊輸出電流最大為500mA、輸出電壓為3.3V的線性穩壓器件,EN端為輸入使能端,高電平時輸入有效。為了提高瞬態響應,在5腳加一個2.2μF的旁路電容,為了提高電壓抑制比和減少輸出電壓的噪聲,在4腳處接一個0.01μF的旁路電容。

圖3 CC2530供電電路
由于CC2530的驅動電路很小,不能驅動電磁閥里面的電機,使電磁閥關斷,所以必須在CC2530的I/O和電機之間加上驅動電路來驅動電機,其電路圖如圖4所示。

圖4 電磁閥驅動電路
J2接電磁閥的輸入端,L7010為電機驅動模塊,其工作電壓最低可以達到1.8V,持續驅動電流達1A,尖峰工作電流可以達到2A,并且可以方便地控制電機的正反轉,其中VM為電機電源,VCC為芯片電源。
3.1.1 上位機向下位機發送控制消息
由于上位機發送指令時,是通過手機短信發送出去的,并且由于垃圾短信的存在,終端難免會收到一些和控制無關的指令,因此當解析短信中的控制指令時,必然會使一些短信無法解析或者解析出錯誤的控制信息。不能解析出控制指令會使程序出現運行錯誤,使整個系統癱瘓;而解析出錯誤的控制指令將使電磁閥出現誤動作,影響控制效果。因此,為了保證系統的安全性和健壯性,必須設計相應的協議。為了區分控制信息和非控制信息,必須有一個標志來加以區分,本文采用一個字節表示消息類型。每一個節點有4個電磁閥,所以采用一個字節可以描述一個電磁閥的控制信息。為了減少終端的控制和命令解析的難度,將此字節的剩下4位作為每一個電磁閥有無控制信息的標志。如果每一個節點都單獨發送一條控制短信,必然會加重系統的負擔,使電能消耗增加,所以本系統將所有節點的控制組合在一條短信中發送出去。其消息結構如下所示。

字節1 字節2~字節n消息類型 各個節點的控制信息
消息類型域,其長度為1個字節。應用中設置成表1消息類型域,其長度為1個字節。應用中設置成表1中的某值。

表1 消息類型域的值
控制消息域,其長度根據具體農田里的終端個數決定,一個終端采用一個字節,其中每兩位為一個電磁閥的控制信息,應用中應設置成表2所列的值。

表2 電磁閥的控制信息值
3.1.2 下位機向上位機發送數據消息
上位機向下位機發送控制指令后,下位機將會向上位機發送相應的回復信息,以告訴上位機下位機對所發送指令的執行情況,這種信息包括兩類:第一類是上位機發送完控制指令后,下位機收到指令的一個確認狀態回復,其消息類型值見表1;第二類消息是下位機對上位機發送的控制指令執行后的電磁閥信息,電磁閥的狀態信息格式如下。

字節1 字節2消息類型 位0~3 位4電池閥狀態 是否為電磁閥狀態信息
其消息類型見表1。字節2以后的字節表示電池閥的狀態,每一個字節表示一個終端節點,其中低4位為電磁閥狀態。由于ZigBee協調器節點可能沒有收到終端采集到的電磁閥狀態數據,所以用第4位來表示低4位是否為電磁閥狀態,1為是,0為不是。
3.1.3 ZigBee網絡通信協議設計
(1)ZigBee協調器消息處理
ZigBee協調器通過UART接口從短信模塊中讀取短信的內容后,將其保存在ZiBee協調器中,等待ZiBee終端醒來后發送詢問消息。如果詢問后ZigBee協調器保留了控制消息,那么ZigBee協調器將保存的控制指令以廣播的形式發送出去,如果終端詢問過后ZigBee協調器沒有控制指令,那么ZigBee協調器將發送無控制消息到ZigBee終端。
ZigBee協調器發送數據后等待ZigBee終端回復確認信息,其信息格式如下。

字節1 字節2消息類型 終端編號
其消息類型域取值見表1。協調器收到ZigBee終端的回復消息后,將該節點號所對應的字節的控制消息全部位置0,使下次廣播控制指令后,該終端節點不會采取相應動作。
當ZigBee協調器發送完控制消息后,等待接收終端電磁閥的狀態,ZigBee協調器收到所有ZigBee終端的電磁閥狀態信息或者等待時間超時后,向上位機發送已接收到的電磁閥信息。
ZigBee協調器的消息處理流程如圖5所示。

圖5 ZigBee協調器的消息處理流程圖
(2)ZigBee終端消息處理
由于ZigBee終端是完全由電池供電,所以ZigBee終端必須定時睡眠來節約能量,使終端工作時間可以盡可能地長。因此,ZigBee協調器收到控制信息后不可能直接發送給終端,必須先存儲,ZigBee終端為了獲得控制消息,在醒來后必須向協調器發送詢問消息,使ZigBee協調器發送控制消息。
ZigBee終端收到ZigBee協調器發送來的控制指令后,向ZigBee協調器發送確認消息,使ZigBee協調器更改相應的節點狀態,避免重復發送控制指令到ZigBee終端,增加ZigBee終端的負擔。
ZigBee終端收到控制信息后,獲取本節點的控制信息,判斷是否有控制信息。如果有控制信息,為了使Zig-Bee終端的電磁閥中的電機不出現卡死的現象,ZigBee終端必須判斷當前的控制狀態是否和電磁閥當前的狀態相同。如果相同,則對電磁閥不采取任何控制動作;如果不同,則根據控制信息對電磁閥采取相應的控制。對控制信息進行判斷后,為了使電磁閥對控制信息有充分的反應時間,延時1s采集電磁閥的控制信息,然后將其傳送到ZigBee協調器,其處理流程圖6所示。回復到ZigBee協調器的電磁閥的狀態信息的消息格式如下。

圖6 ZigBee終端的消息處理流程圖

字節1 字節2 字節3消息類型 節點編號 電磁閥狀態
其中消息類型域的值見表2。電磁閥狀態域低4位存放電磁閥的狀態,每一位存放一個電磁閥的狀態。
由于ZigBee終端節點是采用電池供電,所以ZigBee終端節點必須定時地休眠和喚醒以節約能量,使電池的供電時間更長。如果本系統的ZigBee網絡采用網狀結構和樹狀結構,那么路由器節點必須在非路由器節點之前醒來,這樣必然會增加系統的控制難度,最糟糕的情況下可能會使整個系統無法控制,并且可能使終端節點不定期的掉線。所以本系統采用星型網絡,終端節點直接和協調器節點交互信息。
3.2.1 ZigBee節點同步
ZigBee節點之間的誤差主要是傳輸延時和節點之間的時鐘誤差。
(1)節點時鐘誤差測量
ZigBee協調器節點先發送廣播數據包,其中帶有協調器節點下一次發送數據包的時間T1。節點收到數據包后,啟動定時器等待接收ZigBee協調器下次發送數據,當ZigBee終端節點收到下一次同步數據后,讀取定時器的時間為T2,所以時鐘偏移誤差為:a=(T2-T1)/T1。
(2)延時誤差
ZigBee終端節點向ZigBee協調器節點發送同步信息,ZigBee協調器收到同步信息后回復一個同步信息到ZigBee終端,ZigBee終端收到此回復信息的時間為T3。假設傳輸的延時一樣,為T4,則T4=(1+a)×T3/2。
3.2.2 ZigBee終端節點睡眠
當ZigBee協調器接收到所有節點的狀態回復后,廣播一個睡眠消息到ZigBee終端,消息中加入睡眠的時間T5,ZigBee終端收到此時間后,開始睡眠,其睡眠時間為T5-T4-a×(T5-T4)。節點醒來后,再延時1s發送詢問消息到協調器,獲得控制消息。
本系統經過現場調試,能夠對上位機發送的控制指令進行準確的控制。節點定時地睡眠和蘇醒,能夠有效地節約電量,兩節干電池能夠工作6個月到兩年,為系統在農田這種無電源供電場合提供保障。采用同步算法和一些輔助措施,使系統能夠在同一時間蘇醒、同一時間睡眠,ZigBee終端節點同一時間接收到ZigBee協調器廣播控制指令數據包的概率在90%以上,更加節約能源。
[1] 孫燕,曹成茂,馬德貴.基于ZigBee網絡的節水灌溉自動控制系統研究[J].農機化研究,2012(6):153-156.
[2] 孫燕,曹成茂,繆鵬程.無線遙控節水灌溉控制系統的研制[J].電氣自動化,2008(30):47-48.
[3] 曹成茂,夏萍,朱張青.無線數據傳輸在節水灌溉自動控制中的應用[J].農業工程學報,2005,21(4):127-130.
[4] 楊宗凱,趙大勝,王玉明.無線傳感器網絡時鐘同步算法綜述[J].計算機應用,2005,25(5):1170-1173.
[5] Gao Q,Blow K J,Holding D J.Simple algorithm for improving time synchronization in wireless sensor networks[J].Electronics Letters,2004,40(14):889-891.
[6] Arvind K.Probabilistic clock synchronization in distributed systems[J].IEEETransactions on Parallel and Distributed System,1994,5(5):474-487.
[7] 康冠林,王福豹,段渭軍.無線傳感器網絡時間同步綜述[J].計算機測量與控制,2005,12(10):1021-1023.
[8] 陳英,舒堅,劉琳嵐,等.無線傳感器網絡時間同步與成簇算法[J].傳感器與微系統,2008,27(1):44-48.
[9] Sichitiu Mihail L,Veerarittipahan Chanchai,Sirnple.Accurate Time Synchronization for Wireless Sensor Networks[C]//New Orleans,LA:Proceedings of the IEEE Wireless Communications and Networki-ng Conference (WCNC 2003).New Orleans,2003:1266-1273.
[10] 趙明,徐科軍,倪偉,等.一種無線傳感器網絡節點設計和通信協議研究[J].儀器儀表學報,2005(8):630-635.