LabVIEW Arduino RS-485智能農業監測系統(項目篇—4)
1
項目概述
智能農業是目前農業發展的新方向,它根據農作物的生長習性及時調整土壤狀況和環境參數,以最少的投入獲得最高的收益,改變了傳統農業中必須依靠環境種植的弊端及粗放的生產經營管理模式,改善了農產品的質量與品質,調整了農業的產業結構,確保了農產品的總產量,高效地利用了各種各樣的農業資源,可取得可觀的經濟效益和社會效益。
在農業生產過程中,溫度、濕度、光照強度、CO2濃度、水分,以及其他養分等多種自然因素共同影響農作物生長。傳統農業的管理方式遠遠沒有達到精細化管理的標準,只能算是粗放式管理,在這種管理方式下,通過人的感知能力來管理上述環境參數,無法達到準確性要求。而智能農業,是通信、計算機和農學等若干學科和領域共同發展并相互結合所形成的產物,它將信息采集、傳輸、處理和控制集成在一起,使人們更容易獲得農作物生長各個階段的各類信息,也讓人們更容易掌控這些信息,通過人工智能與農業生產的結合真正實現人與自然的交互。
智能農業的核心問題可以概括為以下四部分,即農業信息的獲取、對所獲取信息的管理、經信息分析做出的決策、由決策而決定的具體實施方針。在這四部分中,對農業信息的獲取是智能農業的起點,也是非常關鍵的一點,做不到準確實時地獲取農業信息,就無法建造真正的智能農業。而實現智能農業,建立一個實用、可靠、可長期監測的農業環境監測系統是非常必要的。
隨著通信、計算機、傳感網等技術的迅猛發展,將物聯網應用到農業監測系統中已經是目前的發展趨勢,它將采集到的溫度、濕度、光照強度、土壤水分、土壤溫度、植物生長狀況等農業信息進行加工、傳輸和利用,為農業生產在各個時期的精準管理和預警提供信息支持,追求以最少的資源消耗獲得最大的優質產出,使農業增長由主要依賴自然條件和自然資源向主要依賴信息資源轉變,使不可控的產業得以有效控制。
2
項目架構
本篇博文將要介紹一種基于Arduino與LabVIEW的智能農業監測系統,可以實現農作物生長環境參數的實時采集以及上位機監測軟件的數據分析和遠程監測。數據采集終端設備采用Arduino作為控制核心,上位機軟件采用LabVIEW,兩者通過RS-485總線實現通信,只需要在田壟之間進行RS-485布線,即可實現組網通信。
3
傳感器選型
3.1、溫濕度傳感器
SHT11是瑞士Sensirion公司推出的一款數字溫濕度傳感器芯片,將傳感元件和信號處理電路集成在一塊微型電路板上,輸出完全標定的數字信號,采用CMOSens專利技術,確保產品具有極高的可靠性與卓越的長期穩定性。傳感器芯片內部包括一個電容性聚合體測濕敏感元件、一個用能隙材料制成的測溫元件,并在同一芯片上與14位的A/D轉換器以及串行接口電路實現無縫連接。因此,具有品質卓越、響應迅速、抗干擾能力強、性價比高等優點,廣泛應用于暖通空調、汽車、消費電子、自動控制等領域。
每個傳感器芯片都在極為精確的濕度腔室中進行標定,校準系數以程序形式儲存在OTP內存中,用于內部的信號校準。兩線制的串行接口與內部的電壓調整,使外圍系統集成變得快速而簡單。微小的體積、極低的功耗,使SHT11成為各類應用的首選。

3.2、光強度傳感器
BH1750FVI是一種兩線式串行總線接口的數字型光強度傳感器,可以根據收集的光線強度數據來調整液晶或者鍵盤背景燈的亮度,利用它的高分辨率可以探測較大范圍的光強度變化。BH1750FVI光照傳感器模塊如下圖所示:

3.3、水分傳感器
專業的農用水分傳感器價格較貴,此處選擇價格較為低廉的電阻式水分傳感器,如下圖所示:

4
硬件環境
將SHT11溫濕度傳感器的VCC、GND、SCK、DATA分別接至Arduino Uno控制板上的+5V、GND、模擬端口A2和A3。
將BH1750FVI光照傳感器的VCC、GND、SCL、SDA和ADD分別接至Arduino Uno控制板上的+5V、GND、SCL、SDA和GND,此處在硬件連接圖上沒有表示出來。
將水分傳感器的VCC、GND、Vout分別接至Arduino Uno控制板上的+5V、GND和模擬端口A0,此處在硬件連接圖上表示出來。
將MAX485模塊的VCC、GND、RO、DI分別接至Arduino Uno控制板上的+5V、GND、RX和TX,將RE和DE端接至數字端口D2,用于控制收發信號。
Arduino Uno與MAX485和SHT11的硬件連接,如下圖所示:

5
Arduino功能設計
在基于RS-485總線的智能農業監測系統中,每個節點配置一個Arduino Uno控制器通過MAX485模塊掛在RS-485總線上。Arduino Uno控制器需要完成以下功能:接收和判斷命令、采集和傳輸溫濕度、光照和水分數據。Arduino Uno控制器利用MAX485模塊通過串口從RS-485總線上接收上位機發來的命令,分析得到有效命令,再根據命令碼實現溫濕度、光照和水分數據的采集,并上傳給LabVIEW軟件。
智能農業監測系統Arduino控制器程序代碼如下所示:
#include <Wire.h>#include <SHT1x.h> #define temp_Command 0x10 //采集命令字#define humidity_Command 0x20 //A1采集命令字#define water_Command 0x30 //D1采集命令字#define illumination_Command 0x40 //D0采集命令字// GY-30// BH1750FVI// in ADDR 'L' mode 7bit addr#define ADDR 0b0100011// addr 'H' mode// #define ADDR 0b1011100 // Specify data and clock connections and instantiate SHT1x object#define dataPin A3#define clockPin A2SHT1x sht1x(dataPin, clockPin); byte comdata[3]={0}; //定義數組數據,存放串口接收數據float temp_c;float humidity;int dustPin=0;int dustVal=0;int Water_Val=0; int Illumination_Val = 0; void receive_data(void); //接受串口數據void test_do_data(void); //測試串口數據是否正確,并更新數據 void setup(){ Serial.begin(9600); Wire.begin(); Wire.beginTransmission(ADDR); Wire.write(0b00000001); Wire.endTransmission();}void loop(){ while (Serial.available() > 0) //不斷檢測串口是否有數據 { receive_data(); //接受串口數據 test_do_data(); //測試數據是否正確并更新標志位 }}void receive_data(void) { int i ; for(i=0;i<3;i++) { comdata[i] =Serial.read(); //延時一會,讓串口緩存準備好下一個字節,不延時可能會導致數據丟失, delay(2); }} void test_do_data(void){ if(comdata[0] == 0x55) //0x55和0xAA均為判斷是否為有效命令 { if(comdata[1] == 0xFF) { switch(comdata[2]) { case temp_Command: temp_c = sht1x.readTemperatureC(); Serial.print(temp_c, 2); break; case humidity_Command: humidity = sht1x.readHumidity(); Serial.print(humidity,2); break; case water_Command: Water_Val=analogRead(A0); Serial.print(Water_Val); break; case illumination_Command: // reset Wire.beginTransmission(ADDR); Wire.write(0b00000111); Wire.endTransmission(); delay(100); Wire.beginTransmission(ADDR); Wire.write(0b00100000); Wire.endTransmission(); // typical read delay 120ms delay(120); Wire.requestFrom(ADDR, 2); // 2byte every time for (Illumination_Val=0; Wire.available()>=1; ) { char c = Wire.read(); //Serial.println(c, HEX); Illumination_Val = (Illumination_Val << 8) + (c & 0xFF); } Illumination_Val = Illumination_Val / 1.2; Serial.println(Illumination_Val); break; } } }}
6
LabVIEW功能設計
LabVIEW上位機部分需要完成如下功能:根據所選擇的節點向RS-485總線上發送不同節點號的溫度、濕度、光照、水分的數據采集命令,Arduino控制器通過串口和MAX485模塊從RS-485總線上接收上位機命令,然后判斷接收的命令中的節點號是否與自己的節點號匹配,如果匹配則實現相應的數據采集之后并將采集的數據回傳,LabVIEW軟件將回傳的數據顯示在前面板上;如果不匹配則舍棄當前接收的上位機命令,重新等待下次命令的到來。
6.1、前面板設計
LabVIEW前面板分為節點選擇、工作指示燈和數據顯示模塊,節點選擇用于選擇當前監測的節點,將其數據顯示在顯示模塊上;工作指示燈用于該節點是否正常工作;顯示模塊主要用于顯示當前的數據,包括溫度、濕度、光照和水分情況。
基于Arduino與LabVIEW的智能農業監控系統的LabVIEW上位機前面板,如下圖所示:

6.2、程序框圖設計
采用條件結構+移位寄存器的狀態機來實現LabVIEW上位機主程序,將主程序劃分為5個狀態:0狀態為串口初始化,1狀態為溫度測量,2狀態為濕度測量,3狀態為光照測量,4狀態為水分測量,且初始狀態為0狀態(串口初始化)。
為了更好地實現通信,制定如下的通信協議:幀頭+節點代號+操作碼。0x55為幀頭,節點代號有0xA1為節點0的代號,0xA2為節點1的代號,0xA3為節點2的代號,0xA4為節點3的代號,0xA5為節點4的代號,操作碼有0x10為溫度采集,0x20為濕度采集,0x30為光照采集,0x40為水分采集。
在0狀態中,通過設置的串口號來初始化串口通信,如下圖所示:

在1狀態中,讀取溫度數據并顯示,如下圖所示:

在2狀態中,讀取濕度數據并顯示,如下圖所示:

在3狀態中,讀取光照數據并顯示,如下圖所示:

在4狀態中,讀取水分數據并顯示,如下圖所示:

最后,關閉串口通信。
由于RS-485總線具有抗干擾能力強的優點,適合用于可靠性要求高的場合,本節介紹的智能農業監測系統采用RS-485總線作為每個子節點與總站的通信方式,如果需要檢測的面積較大,監測密度較為稀疏,RS-485總線方式需要很多的線材,則采用ZigBee無線通信方式更為實用。由于農業專業的傳感器價格較為昂貴,本部分采用較為低廉的傳感器來實現了一個簡易的監測,如果需要專業應用,則需要購買農業專用的傳感器。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。