孟一飛++謝堂健++楊文慧++劉麗萍
摘 要:物聯網是新一代信息技術的重要組成部分,文中立足農業,提出了物聯網在農業中的具體應用。為實現溫濕度采集和智能灌溉,將ZigBee無線網絡與Modbus協議結合,對智能農業系統進行設計。在農業大田中部署若干個節點,每個節點控制若干電磁閥或傳感器,由上位機通過協調器控制節點動作,實現對農業大田溫濕度采集和灌溉的遠程控制。經實驗驗證,該系統可實現無線數據采集與智能灌溉。
關鍵詞:智能農業;ZigBee;CC2530;Modbus;溫濕度傳感器;電磁閥
中圖分類號:TP39;S274 文獻標識碼:A 文章編號:2095-1302(2017)10-00-06
0 引 言
智能農業[1]是運用遙感技術(RS)、全球定位系統技術(GPS)、計算機網絡技術等技術與土壤快速分析、自動灌溉、自動施肥給藥等智能化農機技術相結合的新型農業生產方式。本文正是基于智能農業的背景,旨在解決農作物環境遠程監測及灌溉遠程控制,重點論述了基于ZigBee網絡與Modbus協議的智能灌溉系統的原理與方案,實現了灌溉的無線控制。
中國是一個人口大國、農業大國,中國農業的發展面臨著農業人口比例高、農業生產效率低、人均淡水資源占有量少等問題,面對這一系列問題,解決灌溉的半自動化和自動化問題對于提高農業生產效率,節約勞動力與勞動成本,實現農業的精細化,節約水資源等具有重要意義,可助力農業生產的自動化、信息化、科學化。
隨著城市的發展,農村人口比例會進一步降低,農業發展更現代化。本文提出的智能灌溉技術具有良好的應用前景。
1 系統功能及概要設計
1.1 系統總體功能
本系統設計基于對ZigBee無線網絡的認識[2],實現遠程無線控制電磁閥通斷和監控農業大田空氣溫濕度、光照強度、土壤溫濕度情況。按照自上而下的設計理念進行設計,PC機作為上位機通過互聯網或總線向協調器下發命令,協調器接收到命令后立即做出響應,解析該命令,并將命令通過廣播或者單播的方式借助ZigBee無線網絡下發至節點。節點會在此解析命令,執行命令并向協調器反饋信息,協調器向上位機反饋結果。在整個通信過程中,命令下發格式嚴格按照Modbus協議完成,因此在每次下發命令和執行命令過程中都會進行CRC校驗。
系統總體框架如圖 1所示。本文不僅對智能農業系統中的智能灌溉部分進行設計實現,還對空氣溫濕度和光照強度進行了無線采集。
1.2 系統框架設計
根據系統功能要求,系統主要由上位機、協調器、節點、傳感器以及電磁閥等組成。上位機和協調器通過USB轉485方式進行通信,協調器與節點之間經由ZigBee網絡通信。對于ZigBee節點,主要實現數據采集和灌溉控制。節點不僅采集溫濕度傳感器、光照強度傳感器和土壤溫濕度傳感器的數據,還要對電磁閥進行控制,即電磁閥的開與關。硬件系統框圖如圖 2所示。
2 ZigBee傳感網絡設計與實現
無線傳感器網絡[3](Wireless Sensor Network,WSN)是新一代傳感器網絡,它綜合了微電子技術、現代網絡及通信技術等,能夠協同監測和采集網絡覆蓋區中的信息,并對其處理,最后通過無線網絡發送信息。本文提出的技術利用ZigBee傳感網絡實現了遠程控制農業灌溉與數據采集。
2.1 ZigBee傳感器網絡概述
ZigBee傳感網絡采用ZigBee技術作為通信方式,通過部署在監測區域的傳感器節點來采集、處理網絡覆蓋區中的對象信息,并將信息傳回至觀測者。
表1是常用的幾種無線網絡的參數指標,對常用的幾種無線網絡進行了對比。為滿足智能農業系統中長距離、低功耗的需求,本系統把ZigBee網絡[4]作為無線傳輸方式的首選。
一個典型的ZigBee無線網絡結構通常包括節點群、協調器,此外還會根據需要添加用于中繼的路由器。ZigBee節點分布式部署在某一區域內,可以通過自組網的方式構成無線網絡。ZigBee無線網絡標準規定在一個單一的網絡中最多可容納255個節點,這些節點分為三種類型,即ZigBee匯聚節點(協調器)、ZigBee路由節點和ZigBee終端節點。圖 3簡明畫出了ZigBee網絡實現的三種拓撲結構,分別為星型結構,簇狀結構和網狀結構。一個ZigBee網絡中理論上最多容納65 536個設備。ZigBee網絡具有大容量的特點,使其在無線傳感網絡中擁有巨大的優勢。
2.2 基于CC2530的ZigBee設計
通訊模塊主要是指協調器與節點,它們的核心芯片都是CC2530。ZigBee硬件開發選用Altium Designer平臺,即對CC2530進行原理圖和PCB的繪制[5]。CCC2530節點開發的主要流程包括需求分析、核心CPU的確定、外圍器件的選取[6]、PCB設計以及焊接與測試等。
根據CC2530數據手冊,CC2530的工作電壓在2~3.6 V之間。此外,繼電器模塊的工作電壓為5 V,因此供電電路必須同時提供3.3 V和5 V電壓[7,8]。
繼電器是利用電磁效應實現功能的一種電子控制器件。在電路設計過程中,使用電磁閥作為灌溉用的閥門器件,采用繼電器作為電磁閥的控制元件。在設計中以MAX3485作為UART轉485通信的核心芯片,該芯片是作用于RS-485通信協議標準的低功耗收發器[9],是TTL信號與差分信號的轉換芯片。
CC2530核心板模塊采用DRF1605模塊[10],該產品技術成熟,基于TI公司CC2530F256芯片。DFR系列可自動組網,上電即組網,用戶無需了解復雜的ZigBee協議。
2.3 控制模塊設計
控制模塊主要是電磁閥部分,電磁閥在系統中是智能灌溉的控制器件,通過遠程控制實現電磁閥的開啟與閉合。電磁閥由繼電器直接控制。灌溉系統中的電磁閥部分結構示意圖如圖 4所示。endprint
電磁閥選用DC 24 V型,在實驗中,采用直流24 V電源為其供電。在實際大田中,本著綠色節能的理念,采用太陽能光伏板與蓄電池供電。
2.4 傳感器模塊設計
傳感器模塊可采集信號,為系統的“決策”提供判斷和支撐。本文主要介紹DHT11溫濕度傳感器、MAX44009光照強度傳感器和土壤溫濕度傳感器。智能灌溉時,需要考慮土壤濕度等客觀條件,此外,空氣溫濕度、光照等因素是影響作物生長的因素,因此對這些參數的獲取與監測也十分必要。
2.4.1 DHT11溫濕度傳感器
溫濕度傳感器[11]采用DHT11數字溫濕度傳感器,其濕度測量范圍為20~90%RH,溫度測量范圍為0~50℃。DHT11與單片機之間僅需一個I/O口就能進行通信。DHT11與CC2530連接示意圖如圖5所示。為了提高穩定性,當連接線長度短于20 m時,數據端和電源之間接一個4.7 kΩ的上拉電阻。
2.4.2 光照強度傳感器
MAX44009是由Maxim公司設計的環境光傳感器,其內部集成了光電二極管和ADC。該傳感器量程超寬,可以檢測0.045~188 000 Im的光強。MAX44009的工作電壓范圍為1.7 ~3.6 V,功耗低。在實際大田中,系統的供電采用太陽能光伏板,所以光照強度的獲取對供電系統的研究十分必要。
由于CC2530硬件上只有UART和SPI接口,而MAX44009只有I2C接口,因此在系統設計中采取模擬I2C的方式來讀取光強傳感器。CC2530與MAX44009的接線方案如圖 6所示。其中,VCC為3.3 V。
2.4.3 土壤水分溫濕度傳感器
文中選用SMTS-II-100土壤傳感器,該傳感器具有功耗低、精度高等優點,用以測量土壤層中的溫濕度。水分測量量程范圍分為0~50%和0~100%兩個檔位,溫度測量量程分為-30℃~70℃和-40℃~90℃(485型)兩個檔位。該傳感器的額定電源電壓范圍為5~24 V,選用485接口輸出,其接線方案如圖7所示。
3 基于ZigBee的Modbus協議
3.1 Modbus協議概述
Modbus協議是美國Modicon公司開發的總線協議,可實現主從即時通信,實現方便簡單。Modbus協議定義了能被處理器識別的消息幀結構,可保證主機和從機之間的良好通信模式[12]。
RTU(Remote Terminal Unit,RTU)和ASCII模式在Modbus協議中均被認可,本文采用RTU模式。典型的RTU消息幀見表2所列。
3.1.1 地址域
在ZigBee無線網絡中,為方便上位機查詢某一節點信息,為節點進行統一編號,設備地址長度為1 B,每一個節點地址在網絡中是唯一的。協調器或主設備沒有地址。另外我們規定,地址FF為主設備用于廣播發射命令。
3.1.2 功能碼
功能碼標明了主設備需要執行的動作,功能域由一個字節構成,1~255(0x01~0xFF)是協議支持的功能碼。
常見的Modbus協議功能碼見表 3所列。
3.1.3 數據域
數據域通常包括兩個16進制數,請求時,通常包括起始地址和字節數等內容。
3.1.4 CRC校驗
CRC檢驗是Modbus協議中RTU數據幀的錯誤檢測,防止錯誤數據的傳輸。其校驗域為16位數據,接收設備重新計算校驗碼后會與接收到的校驗碼進行比對,若一致則數據正確,若不一致則說明數據有誤,拋棄該數據。
3.2 Modbus協議在ZigBee網絡上的移植
對于ZigBee無線傳感網絡而言,網絡中的信息傳遞缺乏互動性和自我約束。本文將Modbus協議嵌入到ZigBee協議棧中,從而實現了Modbus協議在ZigBee網絡上的移植與應用[13]。上文已對Modbus協議的功能碼進行了介紹,Modbus協議在ZigBee網絡上的應用是通過Modbus命令嵌入到ZigBee協議棧中來實現的。本文采用的是ZStack協議棧,使用的開發版本是ZStack-CC2530-2.5.1a。
其次,Modbus從屬于應用層協議,它為需要通信的設備提供相互認識和使用的消息結構。Modbus協議數據的傳輸通過ZigBee應用層采用透傳方式實現,所謂透傳是指在傳輸過程中,傳輸設備不處理數據,不修改數據包。加入Modbus協議后,并不影響通信效率[14]。
在通信過程中,主機下發指令,從機根據指令判斷功能碼執行不同的動作。而ZigBee節點的工作就是解析接收的數據執行不同的操作。當需要解析的功能命令很多時,把每個功能集成到子函數里,然后在case分支里調用[15]。
本文以RTU模式作為Modbus的傳輸方式,主要用到了03號命令和05號命令。
表4所示的03號命令數據幀的含義為上位機需要01號節點反饋寄存器首地址為0000H后的5個寄存器數據,因為系統要采集5種數據。
上位機需要01號節點1號繼電器的狀態為閉合。在05命令中,程序定義FF00狀態為閉合狀態,0000狀態為開狀態。
本文中的通信數據傳達均采用Modbus協議實現,協議中規定總線上有一個主機和多個從機,在初始化網絡階段,網絡已為每個從機設定了唯一一個網絡地址。信息匹配的從機首先進行CRC校驗,CRC校驗失敗的會拋棄該條命令,并向主機反饋錯誤信息。Modbus協議的執行流程如圖 8所示。
4 系統程序設計與實現
4.1 協調器與上位機的通信
本設計中上位機與協調器之間的通信主要采用UART轉485的方式進行。圖9所示為CC2530串口的初始化流程圖。endprint
串口接收數據和發送數據的方法與其他單片機的I/O通信相同,僅寄存器不一致,以下僅為程序中具體使用的函數名及作用:
//串口0發送字符串函數
void UartSendString(char *Data, uint16 len)
//串口發送任意長度數據
void UART2_SendData(u8 *pbuff, u16 len)
//UART接收使能:
void UART_RxEnable(UART_CH ch, FunctionalState Enable)
//獲取串口新數據:
bool UART_GetNewData(UART_CH ch, u8 *pData)
//32 M系統時鐘下的毫秒延時函數:
void Delay_ms(uint16 ms)
//獲取串口接收緩沖區滿標志:
bool UART_GetRxBuffFullFlag(UART_CH ch)
//設置串口接收緩沖區:
void UART_SetRxBuff(UART_CH ch, u8 *pRxBuff, u16 BuffSize)
//串口0接收中斷服務程序:
void UART0_ISR(void)
4.2 ZigBee組網
ZigBee網絡的構建主要由ZigBee協議棧完成,圖 10所示為ZigBee組網流程圖。
網絡構建主要分為如下兩個階段:
(1)網絡初始化。由協調器負責最初網絡的構建,設置網絡標識符(PANID)和網絡參數。按照初始化設定的網絡信道進行主動掃描,對指定的信道進行能量檢測以避免可能出現的干擾。
(2)節點加入網絡。主要包括節點搜索周圍的協調器和協調器的應答。
4.3 傳感器數據采集
傳感器采集是對上文選定的三種傳感器進行無線數據采集[16],其采集流程如圖11所示。在無線采集過程中,首先應構建ZigBee網絡,包絡協調器發起網絡,節點加入網絡,這是數據傳輸的前提與途徑。其次是進行條件判斷,即如果收到Modbus采集指令(這里指03號命令),則開始采集數據,否則繼續等待指令。
4.4 電磁閥控制
智能灌溉[17]模型搭建好后,采用Modbus協議中05號命令進行測試。電磁閥控制流程如圖12所示。
對于電磁閥這個灌溉關鍵器件的控制,可以通過設置CC2530的某些引腳電平來實現。由于控制量是個開關量,因此可由CC2530引腳電平的變化控制繼電器來實現電磁閥的開與關。具體代碼如下:
P1SEL = 0xDF; //設置P1.4口為普通IO
P1DIR = 0x20; //設置P1.4為輸出
上文對Modbus協議在ZigBee網絡中的移植原理已進行了闡述,對ZigBee組網的流程也做了說明。以電磁閥控制的05號命令為例,詳細說明Modbus協議在ZigBee協議棧中的移植與應用。
上位機將RTU數據幀下發至協調器后,經由ZigBee網絡將命令發至節點。在實驗中取一個節點,并定義其為Modbus協議中的1號節點,同時設定一個數據緩沖數組。
#define ED_ADDR 0x01
//定義節點接收數組
uint8 afRxData[32]={0};
//節點收到數據包后,要判斷是否屬于自己
if(0x01 == afRXData[0] || afRXData[0] == 0xFF)
然后進行CRC校驗。校驗通過后,繼續解析命令,對功能碼、繼電器地址進行判斷,之后解析操作命令,判斷開關。具體程序如下所示:
checkCRC=crc16(afRxData,afRxLength-2);
//判斷CRC校驗
if(checkCRC==(afRxData[afRxLength-2] << 8 | afRxData[afRxLength-1]))
{
//命令解析
switch(afRxData[1])
{
case 0x03:
rfreadRegisters();
break;
case 0x05:
writecoil();
}
}
繼電器地址以及繼電器的操作指令判斷程序如下:
//地址判斷,是否是0001
if((afRxData[3]==0x00)&&( afRxData[3]==0x01))
//FF00,繼電器閉合
{ if((afRxData[5]==0x00)&&(afRxData[4]==0xFF))
{ P1_4=0; }
else if
//0000,繼電器斷開
((afRxData[5]==0x00)&&(afRxData[4]==0x00))
{ P1_4=1; }
}
5 實驗及測試
在測試中,采用Modbus協議通訊軟件和串口調試助手進行軟件測試。其中,Modbus協議通訊軟件可直接進行CRC校驗。命令發送時,配置好串口后,以hex格式發送。
經過測試,此系統可以完成協調器下發命令,節點向協調器反饋相應數據。協調器下發03號命令時,節點可以成功向協調器反饋寄存器內相應的數據,包括溫濕度信息、光照強度信息和土壤溫濕度信息。協調器下發05號命令時,節點可以使能對應的繼電器,從而使電磁閥處于打開狀態。endprint
6 結 語
本文進行了基于ZigBee和Modbus協議的智能農業灌溉系統的設計,重點論述了ZigBee無線網絡、Modbus協議在智能農業系統中的應用。介紹了ZigBee技術和Modbus協議,并對CC2530的硬件電路進行了設計、對傳感器進行了選型和數據獲取,最后進行了電磁閥的電路搭建及驗證。本文的創新之處是將Modbus協議與ZigBee網絡相結合,給出了遠程采集信息與控制的設計方案與軟件實現流程,在智能農業上具有良好的應用。
參考文獻
[1]中國電子信息產業發展研究院.物聯網產業發展及應用實踐[M].北京:電子工業出版社,2013:126.
[2]李倩梅,孫進生.基于ZigBee和Modbus的無線遠程控制系統的實現[J].工業控制計算機,2013,26(9):84-85.
[3]熊茂華,熊昕.無線傳感器網絡技術及應用[M].西安:西安電子科技大學出版社,2014:1.
[4]張瑩.無線傳感器網絡在智慧農業中的應用[J].渭南師范學院學報,2014,29(23):25-28.
[5]余娟.硬件電路設計流程與方法[J].電子世界,2014(16):117-118.
[6]馬磊.基于CC2530的無線數據遠距離通信模塊的設計[D].合肥:安徽大學,2013.
[7]付玉志.基于ZigBee技術的智慧農業實時采集和遠程控制系統[D].杭州:浙江大學,2015.
[8]徐健,楊珊珊.基于CC2530的ZigBee協調器節點設計[J].物聯網技術,2012,2(5):55-57.
[9]王公堂.基于RS-485通信的溫度水位遠程測控系統[J].電子設計工程,2011,19(6):78-81.
[10]蔡利婷,陳平華,羅彬,等.基于CC2530的ZigBee數據采集系統設計[J].計算機技術與發展,2012,22(11):197-200.
[11]王鑫,潘賀,楊簡.基于CC2530的ZigBee無線溫濕度監測系統設計[J].中國農機化學報,2014,35(3):217-220.
[12]朱小襄.Modbus通信協議及編程[J].信息化研究,2005,31(7):42-44.
[13] YU C B, LIU Y F, WANG C. Research on ZigBee wireless sensors network based on Modbus protocol[J].Wireless sensor network,2009,1(1):43-47.
[14]涂煊,彭瑜,周怡颋,等. Modbus通信協議的紫蜂無線傳輸網絡的研究[J].自動化儀表,2007,28(7):10-13.
[15]宋雪松,李冬明,崔長勝.手把手教你學單片機C語言版[M].北京:清華大學出版社,2014.
[16]王婷,陳憲偉,田俊紅.ZigBee在無線測溫技術中的應用研究[J].自動化與儀器儀表,2017(4):76-78.
[17]宋艷,黃留鎖.農業土壤含水率監測及灌溉系統研究——基于物聯網模式[J].農機化研究,2017,39(4):237-240.endprint