吳鳳嬌,孫培欽,龍 燕,王 斌
(1. 西北農林科技大學水利與建筑工程學院,陜西 楊凌 712100;2. 西安交通大學電氣工程學院, 陜西 西安 710049;3. 西北農林科技大學機械與電子工程學院,陜西 楊凌 712100)
農業一直是我國賴以生存的根基行業,隨著目前世界水資源短缺,且我國人均水資源占有率過低、水資源利用率低,農業用水面臨空前巨大的壓力[1,2]。節水灌溉從20世紀早期就已經開始發展,我國引入較晚,而且設備的發展步伐一直遠遠落后其他先進國家[3]。目前,我國節水灌溉農業不乏滴灌[4]、噴灌[5]等節水方式,甚至也有一些自動化控制的灌溉設備,但都存在些許不足。如:沒有采用實時監測土壤水分含量,僅進行定時灌溉,造成水源浪費;農田布線十分復雜且不穩定,嚴重制約了設備的普及;大部分自動化設備昂貴且操作復雜,不利于廣大農民的使用和學習。
所以,節水灌溉技術的研究從未停止,特別是在利用無線ZigBee技術[6-8]與自動灌溉[9,10]相結合的方面有了很大的進步。然而,上述系統存在明顯不足:①無線數據傳輸距離短且信號易受干擾;②數據信號集中式處理,容易造成系統瓶頸,難以進一步提高系統性能。這些因素較大地限制了研究成果在生產實際中的推廣應用。本文是結合了研究學者們的寶貴經驗和發現,并加以自我的研究和探索研制的一款專門針對普通農民使用的基于C#和Access數據庫的無線精準灌溉系統軟件。基于對CC2530功率放大和無線傳感器網絡,系統分布式運行,具有魯棒性強、易于擴充和伸縮性良好等優點。
系統的總體框圖如圖1所示。系統運行首先由用戶在上位機界面輸入所需維持的土壤墑情范圍和監控的溫度范圍,這些數據會經由串口通信與無線CC2530模塊交互,兩塊無線CC2530完成上、下位機之間的數據通信。在下位機部分中,將所需監測的土壤中布上土壤墑情傳感器MS10,其為一個輸出為電壓信號的傳感器。其輸出信號經過單片機的AD模塊進行采集,單片機將信號轉化后將該數值實時顯示在LCD1602屏幕上面。同時,該數值會與此前上位機無線傳入下位機的數據進行比較,并驅動相應的執行機構或者報警,以保證土壤墑情維持在一定范圍;另外,下位機采集到的數據會經無線CC2530模塊傳到上位機界面中進行顯示并儲存,方便用戶實時監控和查看。

圖1 系統的總體框圖
基于C#和Access數據庫的無線精準灌溉系統軟件流程圖如圖2所示。首先,用戶從電腦登錄上位機軟件并給下位機上電,整個系統為啟動狀態。然后,用戶在上位機軟件的監控主界面中打開串口通道,并設置相應的串口參數,之后用戶將自己所需設定的上、下限值輸入相應的文本框中,點擊確認之后數據便會經由串口和無線通信通道傳送至單片機中,單片機接收這些數據并存儲且顯示這些設定數據在LCD1602屏幕上。用戶若想使下位機開始監控,需從上位機軟件中的監控主界面上按下開啟監控按鈕,下位機接收命令后開啟定時采集并將采集到的數據實時顯示在LCD1602屏幕上。同時,采集到的數據會與之前傳送至單片機中的設定數據進行比較,從而判斷是否驅動執行機構和報警裝置而且采集到的數據也會經由串口和無線通信通道發送回上位機監控主界面中供用戶觀察并儲存。

圖2 無線精準灌溉系統軟件流程圖
若用戶想停止監控或關閉系統,可在上位機監控主界面中點擊停止監控,此時下位機便會停止,如圖3所示。若想繼續可再次點擊開啟監控即可,若不想則點擊退出系統即可關閉系統。

圖3 停止監控流程圖
下位機中主要的關鍵程序部分是定時中斷采集和串口接收中斷函數。在定時中斷采集中分別涉及兩個部分,一部分是溫度傳感器的數據采集,另一部分是對土壤墑情傳感器MS10的AD數模轉換函數,兩者的數據處理完之后,數據會儲存在兩個全局變量中并退出定時采集中斷,然后回至主函數進行實時顯示和判斷比較數據以及發送回上位機主界面。下位機定時采集中斷函數以及串口接收中斷函數如下:
void exter1() interrupt 1 ∥定時采集中斷
{
ES=0; ∥關閉串口中斷
TR0=0;∥關閉定時器0
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;∥重裝初值
tt++;
if(tt==1000)∥設定2秒采集一次
{
ReadTemperature();∥采集溫度
Data_is_read=1; ∥溫度采集完成標志
ISendByte(PCF8591,0x02);
ADC_Data=IRcvByte(PCF8591)*330/256; ∥AD數模轉換
tt=0;∥時間重新歸0
}
TR0=1;∥重新開啟定時器0
ES=1;∥重新開啟串行中斷
}
void ser() interrupt 4 ∥串行中斷函數
{
aa = SBUF; ∥aa存儲數據
RI=0; ∥清除接收中斷標志
if(Uart_state) {Uart_state++;}
if(RF2530_state) {RF2530_state++;}
is_serial_onebit=1; ∥標志接收了一個字節數據
}
上位機軟件為本文系統中的人機交互界面,整個軟件以C#語言為設計基礎,輔助以Access數據庫,完成例如對用戶注冊信息的管理、采集數據的儲存。本文的上位機軟件總共有五個界面構成,分別為歡迎界面、登錄界面、管理員身份驗證界面、新用戶注冊界面、系統監測與控制主界面。
軟件歡迎界面如圖4所示,本界面的目的主要有兩個。一個是起到類似“商標”作用,注明設計者的名稱和設計單位以及該軟件名稱;另一個作用主要帶著緩沖作用,避免像普通軟件在執行的時候由于程序內容過大而導致開啟時等待過久,造成用戶電腦使用不便。

圖4 歡迎界面
用戶鼠標點擊歡迎界面之后便會進入如圖5所示的登錄界面。該登錄界面是利用C#與Access數據庫相結合制作的,可以準確地驗證該用戶是否為本軟件允許用戶,一旦驗證成功便會進入到系統監測與控制主界面,否則將會跳出錯誤提示框。同時,在界面的左下方有注冊新用戶按鈕,若使用者為新用戶便可點擊該按鈕進入到管理員身份驗證界面。

圖5 登錄界面
管理員身份驗證界面如圖6所示,起到的是一個“把關”的作用,為了防止非正常允許的工作人員私自亂注冊系統使用的賬號,在系統安裝時會告知用戶一個管理員賬號,使用者若需注冊新賬號則應在管理員身份驗證界面中輸入正確的管理員信息方可進入到注冊界面,否則會跳出錯誤提示框。

圖6 管理員身份驗證界面
新用戶注冊界面如圖7所示。其主要由三個文本框為主體構建而成。這三個文本框分別為新用戶名,用戶密碼以及核對密碼三部分構成。當用戶在新用戶名文本框輸入完畢之后,可按下驗證賬號按鈕,便可以實現對在Access數據庫內存儲的之前注冊的用戶信息進行核對,若發現重復便跳出錯誤提示框并清空新用戶名文本框,同時該按鈕還具有正則表達式驗證功能,可以規范用戶的注冊用戶名,避免用戶名出現混亂。若三個文本框填寫完畢,可點擊注冊按鈕,該按鈕同時也具備驗證賬號規范用戶名格式及驗證兩個密碼文本框是否一致的功能。現將該按鈕的事件如下所示:
private void NewUserRegister_Click(object sender, EventArgs e)
{
if (!zhuce_pbyj()) ∥判斷文本框是否為空
{ return;}
∥驗證用戶名格式
string Regextest = @"^[a-zA-Z0-9]{7,15}$";
if (!Regex.IsMatch(textBox1.Text, Regextest))
{
MessageBox.Show("請輸入由字母和數字組成的賬號,數目在8個到16字節之間!", "格式錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
return; }∥格式不正確跳出提示框
if (!UserRepeat())∥如果用戶名重復
{return; }
∥驗證密碼格式
if (!Regex.IsMatch(textBox2.Text, Regextest))
{
MessageBox.Show("請輸入由字母和數字組成的密碼,數目在8個到16字節之間!", "格式錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
return; }
if (!PasswordRight())
{return;}
name = this.textBox1.Text;
pwd = this.textBox2.Text;
string CommandString = string.Format("INSERT INTO [UserList]([UserName],[Password]) values('{0}','{1}')", name, pwd);
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=login_data.accdb");
conn.Open();
OleDbCommand cmd = new OleDbCommand(CommandString, conn);
if (cmd.ExecuteNonQuery() != 0)
{
MessageBox.Show(" 注冊成功!","恭喜",MessageBoxButtons.OK);
this.Dispose();
Register register = new Register();
register.Show();
}
else
{MessageBox.Show("注冊失敗");}
conn.Close();
return;
}

圖7 新用戶注冊界面
用戶在登錄界面登錄成功之后,便可以進入到系統監測與控制主界面,如圖8所示。整個主界面分為四大塊:菜單欄、監控信息、串口設置、控制設置臺,現將其一一簡單介紹。在菜單欄中共設置6個功能性按鈕:
(1)開啟監控和停止監控用于上位機無線遙控下位機的定時采集開啟或停止;
(2)輸出數據可直接開啟數據存儲所在的數據庫;
(3)使用說明主要是介紹界面的使用方法;
(4)切換用戶是跳回登錄界面更換用戶;
(5)退出系統即退出該軟件。
監控信息欄用來實時顯示下位機通過傳感器采集到的數據,便于觀察和判斷。串口設置欄用來提供用戶設置通信串口的具體參數。控制設置臺提供用戶輸入所需的大氣溫度、土壤墑情上、下限并且可人為控制電磁閥的開、關。
菜單欄的開啟監控按鈕和關閉監控按鈕程序如下所示:
∥************該函數用來開啟監控
private void OpenSystem_Button_Click(object sender, EventArgs e)
{
if (sp.IsOpen == false)∥驗證串口開啟?
{
MessageBox.Show("請打開串口", "田間精準灌溉測控系統", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;}
if (button5.Enabled == true || button8.Enabled == true)
{
MessageBox.Show("請設置所需要的參數", "田間精準灌溉測控系統", MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;}
if (OpenCloseSystem == false)
{
string OpenStr1 = CombinStr('#', '&');∥發送控制單片機開啟監控的數據
SendCommand(OpenStr1 + '$');
groupBox4.Enabled = false; ∥關掉串口的設置界面,除非停止監控方能重能打開
groupBox6.Enabled = false;
groupBox7.Enabled = false;∥關掉溫度和土壤上限的控制
OpenSystem_Button.Enabled = false;
CloseSystem.Enabled = true;
OpenCloseSystem = true;
ReceiveInit();∥初始化接收部分的程序
return;}
}
∥*****該函數用來關閉監控********
private void CloseSystem_Click(object sender, EventArgs e)
{
if(OpenCloseSystem == true)
{
string CloseStr1 = CombinStr('#', '*');∥發送控制單片機開啟監控的數據
SendCommand(CloseStr1 + '$');
sp.Close();∥關閉串口
OpenClose_SerialPorts.Text = "開啟";
groupBox4.Enabled = true; ∥開啟串口的設置界面,除非停止監控方能重能打開
groupBox6.Enabled = true;
groupBox7.Enabled = true;∥開啟溫度和土壤上限的控制
OpenSystem_Button.Enabled = true;
CloseSystem.Enabled = false;
OpenCloseSystem = false;}
return;
}

圖8 系統監測與控制主界面
本系統設計主要目的為的是構建一個用于控制土壤墑情值能在一定范圍內時同時具有大氣溫度檢測功能的簡易灌溉控制器,并且通過大功率無線CC2530模塊實現無線數據傳輸,節約布線成本同時提高環境的適應能力。基于C#和Access數據庫設計的無線精準灌溉系統實現了該所需功能。其利用串口通信和無線通信構建了一個上位機與下位機通信的橋梁,使上、下位機之間的數據能夠互通有無。而且作為人機交互界面的上位機軟件的功能也十分實用豐富,包括了:歡迎界面、登錄界面、管理員身份驗證界面、新用戶注冊界面以及系統監測與控制主界面。設計的無線精準灌溉系統中上位機界面友好,操作簡單,運行穩定,為無線精準灌溉系統的設計提供了參考。
參考文獻:
[1] 中華人民共和國水利部. 2012全國水利發展統計公報[M]. 北京: 中國水利水電出版社, 2013:13.
[2] 佟金萍, 馬劍峰, 王慧敏,等. 農業用水效率與技術進步: 基于中國農業面板數據的實證研究[J]. 資源科學, 2014,36(9):1 765-1 772.
[3] 金宏智, 嚴海軍, 錢一超. 國外節水灌溉工程技術發展分析[J]. 農業機械學報, 2010,41:59-63.
[4] 郭 霖, 白 丹, 王新端, 等. 雙向對沖流滴灌灌水器水力性能與消能效果[J]. 農業工程學報, 2016,32(17):77-82.
[5] 劉柯楠, 吳普特, 朱德蘭, 等. 太陽能驅動噴灌機組行走動力和光伏功率匹配設計與試驗[J]. 農業工程學報, 2017,33(16):96-103.
[6] 紀建偉, 丁 皓, 李征明, 等. 基于無線傳輸的稻田灌溉監控系統[J]. 農業工程學報, 2013,29(1):52-58.
[7] 張增林, 郁曉慶. 土壤水分無線傳感器網絡節點設計與測試[J]. 中國農村水利水電, 2012,(12):5-8.
[8] 于海業, 羅 瀚, 任 順, 等. ZigBee技術在精準農業上的應用進展與展望[J]. 農機化研究, 2012,(8):1-6.
[9] 劉 濤, 趙計生. 基于ZigBee技術的農田自動節水灌溉系統[J]. 測控技術, 2008,27(2):95-99.
[10] 張亞鋒. 基于ZigBee技術的農田土壤溫濕度監測系統設計[J]. 節水灌溉, 2014,(9):80-83.