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