文獻標識碼: A
文章編號: 0258-7998(2015)04-0073-04
0 引言
我國是一個農業大國,傳統農業模式多采用粗放式管理,主要依靠個人感知來管理農作物周圍的環境參數,無法做到對影響農業環境參數的精確控制,從而很難做到投入產出比的最優化[1]。智能農業作為農業科技的最新發展方向,通過對農作信息的智能化采集,并對采集后的信息通過科學地分析,從而制定出高效集約的可持續性發展方式,高效利用農業資源,實現可觀的經濟效益。
信息采集作為智能農業的起點,主要通過對農作物生長環境系統中大氣溫濕度、光照強度、土壤濕度、二氧化碳濃度、土壤pH值等參數進行測量與匯總,為技術人員提供分析與決策的依據。雖然目前的研究主要都是基于無線傳感器網絡的農業檢測系統[2],但是在應用中由于專業傳感器模塊價格昂貴,導致節點成本偏高。本文提出一種基于開源硬件的智能農業監測系統,以高性價比的開源硬件Arduino為核心控制器,采用ZigBee技術無線連接上位機LabVIEW,實現數據的可視化。同時由于Arduino的強擴展性,可以根據使用需求增加傳感器模塊,以及采用有線串口連接Arduino控制板與上位機。
1 系統硬件組成
監測系統的數據采集部分主要使用Arduino作為核心控制器,配合BH1750光照傳感器、YL-69土壤水分傳感器、DHT22溫濕度傳感器以及CO2濃度傳感器采集農作物生長環境參數后,采用接口擴展板連接Xbee,通過無線(也可采用RS-485總線)與上位機的虛擬儀器Lab-VIEW軟件通信。
1.1 Arduino控制器
Arduino作為一個開源的電子平臺,其不僅是一種基于Atmel AVR單片機的控制器,也是包含Arduino IDE以及開源社區的一個開源系統。Arduino控制器采用了多樣的硬件配置,其中應用最為廣泛的Arduino Uno采用ATmega 328作為核心處理器,包括14通道數字輸入/輸出,其中包括6通道PWM輸出、6通道10 bit ADC模擬輸入/輸出通道,電源電壓主要有5 V和3.3 V[3]。在核心控制板的外圍,有開關量輸入輸出模塊、各種模擬量傳感器輸入模塊、總線類傳感器的輸入模塊,還有網絡通信模塊[4]。使用者通過編程與輸入和輸出信號做出各種交互。由于Arduino采用開源協議,任何人和公司都可以利用開源公布的文檔生產兼容的Arduino控制器。Arduino兼容控制器的低廉價格,受到廣大極客的熱捧。
1.2 光照傳感器
BH1750FVI是一種用于兩線式串行總線接口的數字型光強度傳感器集成電路。其內部結構如圖1所示。
光敏二極管PD的信號通過集成運算放大器將電流轉化為電壓,之后通過ADC進行數模轉換為16 bit數字信號,轉換后的數字信號通過邏輯芯片輸出為I2C信號。BH1750FVI的地址模式分為高位和低位兩種,當ADD接VCC時為高地址模式,當ADD接GND時為低地址模式。
1.3 土壤水分傳感器
在監測系統中,采用了價格低廉的電阻式水分傳感器。可以根據使用需要更換為抗電離腐蝕的專用數字土壤水分傳感器。
如圖2所示,當傳感器探頭插入土壤中時,由于土壤水分含量影響土壤電阻值的大小,從而影響三極管基極的導通電流的大小。基極電流放大為發射極電流后經下拉電阻轉化為電壓形式輸入Arduino控制板。
1.4 溫濕度傳感器
本監測系統采用DHT22作為溫濕度傳感器,它采用了電容式感濕元件與NTC測溫元件,并集成了一個微型8位單片機。DHT22將在濕度實驗室中校準的系數存儲在OTP內存中,檢測信號需要通過校準系數進行處理。
DHT22采用單總線數據結構進行通信和同步。每次通信發送數據量為40 bit,其中濕度數據為16 bit,溫度數據為16 bit,校驗和為8 bit。一般采用高速模式通信,每次通信發送時間約為5 ms。DHT22在收到Arduino所發出開始信號后才開始一次溫濕度的測量,平時不會主動收集數據。
1.5 CO2濃度傳感器
CO2濃度傳感器主要采用了MG-811 CO2探頭,對CO2極為敏感,同時還能排除酒精和CO的干擾。其內部結構如圖3所示。
當傳感器在CO2的環境中,電極將會發生如下反應:
負極:2Li++CO2+1/2O2+2e-=Li2CO3
正極:2Na++1/2O2+2e-=Na2O
總電極反應:Li2CO3+2Na+=Na2O+2Li++CO2
傳感器敏感電極與參考電極間的電勢差(EMF)符合能斯特方程:
EMF=Ec-(RxT)/(2F)ln(P(CO2))
當探頭內部通過外電路提供的電壓加熱時,探頭就相當于一個固體電解質電池,其兩端對應輸出電壓信號,其值符合能斯特方程。故可將空氣中的CO2以電壓的形式輸出。
1.6 ZigBee通信模塊
ZigBee是基于IEEE 802.15.4標準的低功耗個域網協議。其特點是近距離、自組織、低功耗、相對成本低。ZigBee工作在2.4 GHz、868 MHz和915 MHz頻段上,可靠傳輸距離為75 m以內,一般室內為30 m。ZigBee的網絡層采用了星型、樹型和網狀網3種網絡拓撲結構,每個ZigBee網絡最多可以支持65 000個節點[5],廣泛地使用于自動控制和遠程控制領域。
在Arduino系統中主要采用的是美國MaxStream公司生產的Xbee模塊。該模塊使用方便,只需將數據輸入一個XBee模塊,它就能自動地將數據發送到另一個匹配好的XBee模塊。
采用XBee擴展板可以將XBee模塊連接至Arduino,USB 適配器則可將XBee模塊通過USB口與計算機連接,從而實現Arduino與計算機的數據通信。并可采用串口指令或X-CTU軟件對XBee參數進行配置。
1.7 RS-485串口通信模塊
雖然Arduino與上位機可以采用ZigBee技術進行無線連接,但是XBee相對其他傳感器模塊來說成本比較高,不適合大規模使用。Arduino作為開源硬件有著豐富的擴展性,可以根據使用需求與LabVIEW采用有線串口通信。并且只需要使用LabVIEW Interface for Arduino的庫函數,并不需要了解具體的底層實現。
RS-485作為串口通信的標準之一,采用平衡傳輸方式。當采用二線制時,可以實現多點雙向通信,總線上最多可接32個設備,最大傳輸距離約為1 200 m。
在使用RS-485時,Arduino端主要采用MAX485接口芯片模塊完成RS-485與TTL電平的轉換。由于上位機通常只帶有USB接口,可以通過USB/RS-485轉換電路,先將USB信號轉化為TTL信號,再由TTL信號轉化為RS-485信號。
2 虛擬儀器與LabVIEW
虛擬儀器是采用計算機為控制器,以軟件方式實現數據測量的技術。虛擬儀器將采集的數據通過計算機傳輸、分析、處理、存儲后,在虛擬面板顯示測量結果。即通過編程實現真實儀器的功能,而通過虛擬面板顯示。
2.1 LabVIEW
LabVIEW是由美國NI公司開發的圖形化程序開發平臺,早期用于自動控制設計,現已成為成熟的高級編程語言,廣泛被工業界以及學術界所使用,作為標準的數據采集與設備控制軟件[6]。
LabVIEW作為可視化的圖形編程軟件編寫儀器軟面板,界面友好,操作方便,具有以下特點[7]:(1)函數封裝于可視化的模塊之中,采用連線表示功能模塊間的數據傳遞;(2)可采用高亮執行調試,直觀顯示運行中的問題;(3)多操作系統平臺支持;(4)通信接口建立方便,可采用多種形式與下位機連接;(5)提供豐富的庫函數供用戶使用。
2.2 LabVIEW與Arduino的連接
LabVIEW與Arduino的連接方式包括了LabVIEW Interface for Arduino,有線串口、無線串口以及網絡接口。LabVIEW Interface for Arduino由于實際上并不涉及Arduino編程,只能采用官方的Arduino函數庫在LabVIEW端完全控制,所以可用傳感器非常有限,擴展性差。網絡接口的方式雖然是只需要Arduino與LabVIEW聯入互聯網就能實現方便地通信,但是對于農用耕地要實現互聯網的覆蓋和接入,在現階段很難做到。所以,在農業監測系統中采用串口連接Arduino與LabVIEW。
在使用串口連接Arduino與LabVIEW之前,LabVIEW需要先安裝VISA。VISA是虛擬儀器軟件體系結構的縮寫,主要應用于儀器編程的標準I/O應用程序接口。在LabVIEW采用VISA節點進行串口通信,配置好VISA是實現串口通信的首要步驟。
當采用無線串口,即設計方案中的ZigBee方式連接Arduino與上位機時,由于需要實現2個或者以上的XBee模塊來實現通信,所以需要使用X-CTU軟件每個XBee模塊的參數進行配置[8]。XBee模塊具有64 bit的長地址與16 bit的短地址,其中64 bit長地址為出廠時寫入,不能修改,16 bit短地址需要進行人工配置。當采用長地址作為尋址方式時就需要將接收模塊的64 bit地址設置為發送模塊的目標地址高位(Destination Address High,DH)+目標地址低位(Destination Address Low,DL)。若采用短地址作為尋址方式則需將接收模塊的16 bit地址設置為發送模塊的目標地址低32 bit(DL),并將發送模塊的DH置零。
3 Arduino與LabVIEW系統整合設計
3.1 傳感器設置
Arduino語言建立在C/C++基礎上,其基本程序框架由setup()和loop()兩部分組成。Arduino程序首先執行setup()函數,并且只運行一次。因此,setup()函數一般用于初始化,例如設置引腳類型、配置串口、引入類庫文件、外圍器件的初始化等。初始化之后執行loop()函數,而且loop()函數將會不斷循環執行,故所有的執行語句都放在loop()函數中,完成指定的輸入/輸出。
在本設計中,采用光照傳感器、土壤水分傳感器、溫濕度傳感器以及CO2濃度傳感器采集農作物生長環境參數。其中土壤水分傳感器與溫濕度傳感器的數據可以通過模擬輸入口直接被Arduino讀取。
對于光照傳感器由于采用I2C總線傳輸,在配置完總線參數后,自定義讀取數據函數如下:
int BH1750_Read(int address)
{ int i=0;
Wire.beginTransmission(address);
Wire.requestFrom(address, 2);
while(Wire.available())
{buff[i] = Wire.receive(); // receive one byte
i++;}
Wire.endTransmission();
return i; }
對于CO2濃度傳感器,雖然輸出電壓可以通過模擬輸入端直接讀取,但是為了防止濃度的不均勻引起的突發誤差,還需要對采樣數據做平滑處理并轉化為ppm濃度。
3.2 LabVIEW配置
LabVIEW的主要功能為:向Arduino控制板發送采集光照、溫度、濕度、水分、二氧化碳的命令,Arduino在接收到LabVIEW的命令后,通過傳感器模塊接收相應的數據(并將二氧化碳傳感器采集的電壓數據轉化的二氧化碳濃度)傳送回LabVIEW,LabVIEW將收到的數據顯示在前面板。
LabVIEW的前面板如圖4所示,主要通過儀表盤表示了光照、溫度、濕度、水分以及二氧化碳濃度的狀態。
LabVIEW的主程序采用狀態機實現。主程序分為6個狀態:0狀態初始化串口,1狀態光照測量,2狀態溫度測量,3狀態濕度測量,4狀態水分測量,5狀態二氧化碳測量。初始為0狀態。程序框圖如圖5所示(以二氧化碳濃度采集環節為例)。
4 總結
基于開源硬件的智能農業監測系統,充分利用了開源硬件價格低廉、擴展性強的特點,并結合ZigBee低功耗、自組網的優勢,使得整個系統可以基于虛擬儀器方便地對農業環境中的各個參數進行可視化監控,從而做到對環境的智能監測,以實現農作物的優質高產。而且本系統可以根據環境監測需要擴展新的傳感器,并可在有線與無線組網間進行切換,在智能農業領域有著較強的實踐性和可操作性。
參考文獻
[1] 李圣華,肖傳輝.基于物聯網技術的智能農業系統設計[J].科技廣場,2011(7):73-75.
[2] 張佐經,張海輝,翟長遠,等.設施農業環境因子無線監測及預警系統設計[J].農機化研究,2010,32(11):78-82.
[3] Jonathan Oxer,Hugh Blemings.Practical Arduino:Cool Pro-jects for Open Source Hardware[M].New York:Springer-Verlag,2009:1-10.
[4] 米歇爾·麥克羅伯茨.Arduino從基礎到實踐[M].北京:電子工業出版社,2013.
[5] 韓廷閣,李書琴.基于ZigBee的土壤濕度無線采集系統節點設計[J].農機化研究,2010,32(12):154-159.
[6] 劉君華.基于LabVIEW的虛擬儀器設計[M].北京:電子工業出版社,2003.
[7] 李江全.LabVIEW虛擬儀器數據采集與串口通信測控應用實戰[M].北京:人民郵電出版社,2010.
[8] 王靜霞.一種與ZigBee/802.15.4協議兼容的RF模塊XBee/XBee Pro及其應用[J].電子工程師,2007,33(3):24-27.