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