施鳳鳴,駱旭坤
我國是農業生產大國,當前大部分農田灌溉還是以粗放式管理為主,農田灌溉用水的有效利用系數只有0.548,尚未達到世界先進水平.因此,發展智能灌溉技術,提高灌溉用水的利用效率,是當前農業發展的重要任務.單片機、PLC、傳感器等硬件設備在智能灌溉技術中的應用已經較為成熟,但是系統控制精度不高,無法滿足用戶遠程監控的功能需求[1-3].隨著物聯網的發展,多種新技術被應用于智能灌溉,為智能灌溉技術的進一步發展提供了有力的技術保證[4].本文提出一種基于樹莓派智能云灌溉模糊控制系統,采用模糊控制算法提高系統控制精度,在樹莓派上搭建WEB服務器,根據土壤濕度的實時監測信息,遠程控制電磁閥的開啟或關閉,最大程度減少灌溉用水浪費,提高灌溉用水利用率.
該系統以PLC為下位機,以樹莓派為上位機,土壤濕度傳感器采集土壤濕度信息,再通過頻率電壓轉換電路產生PLC可接收的電壓信號,通過PLC程序轉換,將電壓信號轉換為土壤濕度百分比存儲在寄存器中.PLC與樹莓派之間采用Modbus rtu通信協議進行RS485的串口通信,讀取寄存器中的數值并上傳至MySQL數據庫中,再利用這些數據,通過模糊控制器產生一個合理的灌溉時長,實現智能灌溉.最后,開發WEB應用程序,在頁面或手機APP實時顯示土壤濕度信息,遠程操控系統,實現“云”灌溉.系統總體設計框圖如圖1所示.

圖1 系統總體設計框圖
土壤濕度傳感器有多種類型,目前較為常見的是基于介電法測量的TDR(Time Domain Reflectometry)和FDR(Frequency Domain Reflectometry)兩種傳感器[5].由于TDR電路較為復雜,存在非線性缺陷,而FDR幾乎具備了TDR的所有優點,且價格合理,所以系統采用FDR設計了一款電容型土壤傳感器.通過周圍土壤濕度變化引發極板間聚合物外膜相對介電常數(ε)與電容量發生變化.利用NE555定時器與濕度傳感器構成一個多諧振蕩器產生頻率信號,隨著土壤濕度的變化,電容值、充放電時間常數發生變化,其輸出波形的峰值也隨之變化,最后通過一個頻率電壓轉換電路產生PLC可以接收的電壓信號,具體電路如圖2所示.

圖2 土壤濕度檢測電路
土壤濕度指的是土壤含水量,由于地形、土壤結構特性和農作物生長活動等多方面影響,土壤含水量具有較強的空間變異特性[6].采用傳統的單一傳感節點進行土壤濕度檢測,容易造成傳感失協,精度不足,無法滿足系統控制要求.同時,由于土壤具有較強的時滯性,這就需要土壤控制系統具有一定的預測能力,能夠根據當前采集的土壤濕度信息預測水分滲透穩定后的土壤濕度情況[7].因此,本系統采用算法簡單、效果良好的灌溉模糊控制系統,其結構如圖3所示.

圖3 灌溉模糊控制系統
該灌溉模糊控制系統采用雙輸入、單輸出的二維模糊控制結構.假設適宜濕度值為h0,傳感器實測濕度值為h,則偏差信號E=h0-h,偏差變化率為EC.根據農作物適宜生長土壤濕度范圍,將系統模糊控制區設定為40%~80%RH,適宜濕度值設為70%RH,濕度差為55%RH.經過換算,定義偏差E和EC的論域區間分別為[-8%,+8%]和[-1%,+1%],變量U的論域為[0,30 min].模糊子集E取7個語言值{過濕,較濕,微濕,適中,稍干,較干,過干},簡化為{GS,JS,WS,SZ,PS,PM,PB},EC也取7個語言值{負大,負中,負小,零,正小,正中,正大},簡化為{ND,NZ,NX,Z,PX,PZ,PD}.其變量的模糊子集論域為{-3,-2,-1,0,1,2,3},輸出變量灌溉時長U的模糊子集為{零,短,中,長},簡記為{Z,ST,DT,LT},其變量的模糊子集論域為U={0,1,2,3,4}.由于E和EC各取7個語言值,所以系統共有49條模糊推理規則,如表1所示.在實際應用中,可根據項目具體情況對規則庫進行相應調整,形成最佳灌溉方案.

表1 模糊控制規則表
模糊控制系統軟件設計有查表法、梯度下降法、最小二乘法等[8].本系統采用簡單易用的查表法,將事先計算好的控制規則表存儲在樹莓派中,系統運行時根據采樣輸入值,按照一定規則計算比較,在查詢表中查找相應值,得到模糊控制輸出量,寫入PLC寄存器,然后通過相應的程序控制電磁閥動作時長.灌溉電磁閥開啟時間的模糊邏輯控制表可利用MATLAB提供的模糊控制箱,構建模糊控制系統模型,采用Mamdani推理算法控制器,選擇最大隸屬度法計算得出模糊控制輸出量,其邏輯控制如表2所示.

表2 模糊邏輯控制表
當土壤濕度百分比低于40%RH時,土壤缺水,開啟電磁閥灌溉30分鐘;當土壤濕度百分比進入40%~80%RH區間時,系統進入模糊控制判斷,根據模糊控制輸出量改變PLC定時器的設定值,改變電磁閥開啟時長,灌溉停止后再過30分鐘,進入下一階段的采樣判斷輸出;當土壤濕度百分比高于80%RH時,土壤濕潤,不需要灌溉,不打開電磁閥,再過30分鐘,進入下一階段的采樣判斷輸出,構成一個閉環控制系統.
西門子S7-200 SMART PLC可以直接讀取模擬量數值、支持各類通信,其CPU內部用數值表示外部的模擬量信號,兩者之間有一定的數學換算關系.無論是電壓還是電流信號,都可以用下列通用換算公式換算,公式中的各項參數如表3所示.


表3 公式各項參數
在編程的過程中,可以直接添加S_ITR的自定義指令庫,直接將電壓信號轉換為內部百分比值,再通過數據格式轉換,將濕度傳感器采集到的濕度信息存儲在寄存器中.具體程序如圖4所示.

圖4 模擬量輸入程序
每個S7-200 SMART CPU都提供一個以太網端口和一個RS485端口(端口0),支持以太網通信、串口通信、OPC通信和MD720遠程通信.樹莓派與PLC之間的通信采用串口通信中的Modbus通信,其中樹莓派作為主站,PLC為從站.要實現Modbus RTU通信,需要使用STEP 7-Micro/WIN SMART Instruction Library(指令庫),Modbus RTU功能通過指令庫中預先編好的程序功能塊實現,具體程序如圖5所示.

圖5 PLC Modbus RTU通信
系統前端采用Angular框架進行頁面設計,它有一套構建用戶界面的豐富組件,是當前較為常用的WEB前端框架之一.后端采用SSM(Spring+Spring MVC+MyBatis)框架進行業務邏輯的開發,采用MySQL數據庫存儲數據信息,將查詢到的數據轉換成json格式放入Redis緩存中,提高數據庫處理數據的能力[9].樹莓派采用spring-integration連接MQTT(Message Queuing Telemetry Transport,消 息隊列遙測傳輸),將來自PLC的消息數據發布在云服務器中,相關程序如下:

REST是一種架構原則,基于RESTful的API在客戶端(包括可聯網嵌入式設備、移動智能手機、計算機等)和平臺服務器之間交互模式十分簡單,且不再需要其他作用相同的第三方庫[10-11].用戶不需要了解內部實現細節,只需調用開放的API,即可通過GET獲取數據資源,通過POST、PUT、DELETE對數據資源進行提交、更改和刪除等操作.在網站開發中,RESTful經常與AJAX(Asynchronous JavaScript and XML)搭配使用,AJAX是一種前端開發技術,用于創建快速動態網頁,與服務器進行少量的數據交換,并可以做到讓網頁局部刷新[12].
將土壤濕度傳感器采集到的濕度信息轉換為-5 V到5 V的電壓信號,經過PLC程序轉換為濕度百分比存儲于數據寄存器.樹莓派通過輪詢的方式,每隔一段時間向PLC發送Modbus數據幀“03 03 00 00 00 04 45 EB”讀取土壤濕度百分比,在前端頁面顯示.頁面顯示操作主要采用AJAX技術,土壤濕度百分比在頁面的標簽值通過AJAX向服務器發送GET請求,后臺程序接到指令后,向MySQL數據庫查詢,隨后將查詢值通過json或xml數據格式傳遞回前端頁面,改變土壤濕度百分比的頁面標簽值,每3秒鐘執行一次操作,只要打開網頁就可以不斷循環,在頁面中顯示實時土壤濕度百分比.當土壤濕度百分比達到預設閾值時,觸發由用戶指定動作,動作類型包括向指定手機發送短信、向樹莓派發送控制包啟動或關閉電磁閥,實現智能“云”灌溉,WEB應用運行如圖6所示.

圖6 智能灌溉WEB應用
基于樹莓派的智能云灌溉模糊控制系統集合了當前較為先進的物聯網技術與軟件技術,將采集到的土壤濕度信息存儲在自身的數據庫中,通過模糊控制運算器計算所需的灌溉時長,達到智能化灌溉的目的.利用python編程軟件,開發了WEB控制程序,使系統成為一個集實時查看和控制為一體的“云”平臺,為智能灌溉系統的組建提供了一種新思路,具有一定的參考意義和推廣價值.