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