何 江
(蘭州理工大學機電工程學院,蘭州 730000)
最近幾年,隨著政府投入農業的力度日益增大以及各個行業開始對農業領域進行投資,我國農業現代化正在加速發展,許多新型農業主體已經成長起來,對于農業科技的資金投入也已經增加,為推廣智能化灌溉系統提供了有力保障。而隨著物聯網的發展,各種新技術廣泛應用于智能灌溉,為智能灌溉技術的發展提供了技術上有力的保證。
隨著電子科技的快速發展,芯片迭代速度大大增加,物聯網不僅在CPU、傳感器等硬件上得到了飛速的發展,軟件上也進行了跨越式的發展。尤其是目前基于Android、iOS的APP編程,以及非常流行的B/S網絡結構,都讓物聯網的控制系統軟件相比于以往,不僅在功能上有了極大的提高,在用戶體驗上也有了飛躍的進步。然后目前的智能灌溉系統并沒有充分的利用硬件技術的極大提高,很多系統仍然采用C51之類的單片機,性能低下不說,而且很多需要PC機作為上位機;在用戶體驗上,依然是傳統工業冷冰冰的設計方案,沒有利用目前互聯網一些流行的網絡技術,讓用戶產生了距離感。
因此,本文利用目前性能很高的Raspberry Pi II(樹莓派二代)作為控制核心硬件,以及先進的Web技術,并結合其他外圍器件,制作了一部可靠性高、穩定性強、經濟性好、用戶易接受度高的智能云灌溉系統。
本智能灌溉系統主要由Raspberry Pi II電路板、FC-28土壤濕度傳感器、DTH11溫濕度傳感器、AD8591數模轉換模塊及L298N直流電機驅動模塊和蠕動泵等硬件構成。其中,Raspberry Pi II采用Broadcom BCM2836 900 MHz的四核SoC,1GB內存, 不僅能跑全系列ARM GNU/Linux發行版,而且支持Snappy Ubuntu Core及Windows 10。
整體結構示意圖見圖1。

圖1 整體結構示意圖
FC-28土壤濕度傳感器的AO口(模擬量口)與AD8591數模轉換模塊的輸入口連接,將模擬量轉換為數字量,然后AD8591將土壤濕度的數字量通過I2C總線傳輸到Raspberry Pi II里。其連線示意圖如圖2。

圖2 濕度傳感器連接
其中I2C(Inter-Integrated Circuit)總線是兩線式串行總線,一條是數據線SDA,一條是時鐘線SCL。特別需要注意的就是,Raspberry Pi II 的Ubuntu mate系統默認是不開啟I2C功能的(其他系統),需要在Config文件中修改。另外如果系統接了多個AD8591模塊,需要修改其地址線。例如,A0、A1、A2如果都接地的話,地址即為Ox48,二進制即為1 001 000,前4位不能修改,只能通過修改A0、A1、A2來修改地址,即最多同時只能并聯8個模塊進行32路的數據采集(每個模塊有4路輸入)。
本系統采用直流電機驅動蠕動泵,為了能夠調整灌溉水量,需要使用PWM脈沖寬度調制來解決直流電機調速的問題。Raspberry Pi II的PWM硬件輸出口只有一路,當然如果需要多路的PWM輸出口,可以用軟件的方法實現,例如wiringPi就提供了用軟件多線程實現PWM的輸出方法,可以很方便的利用庫中的函數來任意配置GPIO口為PWM輸出。本系統的直流電機驅動模塊為L298N,連線圖如圖3。

圖3 直流電機接線圖
其中L298N是ST公司生產的一種驅動能力強、發熱量低的直流電機驅動芯片。使用L298N芯片驅動電機,既可以驅動一臺兩相步進電機或四相步進電機,也可以同時驅動兩臺直流電機。本系統目前只接了一臺蠕動泵(直流電機驅動),因此OUT3、OUT4、IN3、IN4、ENB接口可以不用。這里也需要特別注意一點,當我們使用外部電源的時候,L298N的+5v接的不是Raspberry Pi II電路板的+5V,而是一個GPIO口,不然會引起電路的短路。
整體硬件完成后,如圖4。

圖4 實際完成圖
本系統前臺、后臺程序和控制程序均采用Python開發,控制軟件使用了Python GPIO、BCM2835的庫,這些集成庫提供了對樹莓派相關硬件資源的操作函數,使用非常簡潔方便。而傳統的linux驅動設計的方法,為編寫驅動程序對CPU的GPIO寄存器進行操作,生成驅動模塊后再加載,不僅復雜而且調試周期長。軟件大概框架如圖5。

圖5 軟件框架圖
其主要流程為:傳感器讀取程序模塊首先按照預定的時間值讀取當前的土壤濕度值,然后將數據寫入Mysql數據庫,Web程序將數據(空氣溫濕度、土壤濕度等數據)顯示出來(如圖7),同時控制程序模塊介入系統的流程,把從Mysql的數據傳入模糊算法控制器控制,后者將處理后的數據又傳給前者,控制程序模塊執行一邊執行相應的操作,一邊又要將數據寫入Mysql數據庫。該程序還有手動功能,能夠通過web界面直接操控系統。
本系統采用帶修正因子的二維模糊控制器,輸入量分別為土壤濕度和土壤濕度的變化,輸出量為直流電流的PWM值。模糊集均為{NB,NBL,NM,NS,NO,PO,PS,PM,PBL,PB},論域均為{-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6}。精確量轉換為模糊量的公式為:
Y=2n[x-(a+b)/2]/(b-a)
(1)
式中:a為精確量的上限值;b為精確量的下限值;x為所要轉換的精確量;Y為轉換的模糊量;n為模糊量的上限(或下限)值(需對稱)。
模糊控制規則采用if … and … then 結構。本系統的模糊控制表為在線自動生成,能夠根據不同的修正因子自動生成不同的控制表,其公式為:
U=a*hum+(1-a)*dhum
(2)
式中:U為控制模糊量;a為修正因子;hum為土壤濕度值;dhum為土壤濕度值的變化值。
本模糊控制器完全是用Python編寫的。Python是完全面向對象的語言。函數、模塊、數字、字符串都是對象。并且完全支持繼承、重載、派生、多繼承,有益于增強源代碼的復用性。而且Python是一種跨平臺語言,在Windows、Linux、MacOS等均可以使用。下面是具體代碼的實現:
class Fuzzy_Control:
def __init__(self, hum,dHum):
self.hum = hum ##土壤濕度值
self.dHum = dHum ##土壤濕度值的變化值(采用周期0.2s)
##模糊論域
self.humDegree = [ -6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6 ]
self.dHumErrDegree = [ -6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6]
self.uDegree = [ -6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6 ]
##二維數組坐標對應
def degerr(self,x,y):
if x <= -6:
return 0
if x == -5:
return 1
…… …
##將基本論域轉成模糊論域
def fuzzy_hum_Input(self,a,b):
fuzzy_Hum = round((12*(self.hum-(a+b)/2))/(b-a))
return self.degerr(fuzzy_Hum,self.humGOM)
#return fuzzy_Hum
def fuzzy_dhum_Input(self,a,b):
fuzzy_dHum = round((12*(self.dHum-(a+b)/2))/(b-a))
return self.degerr(fuzzy_dHum,self.dHumGOM)
#return fuzzy_dHum
##利用修正因子求控制輸出表
def output_Table(self):
##創建12×12二維矩陣
u_table = [[0 for col in range(13)] for row in range(13)]
a = 0.5 ##設定修正因子
for i in range(13):
for j in range(13):
u_table[i][J]=-round(self.humDegree[i]*a+self.dHumErrDegree[J]*(1-a))
return u_table
##根據控制輸出表來輸出模糊量
def out_Put(self):
s = self.output_Table()
return s[self.fuzzy_hum_Input(66,100)][self.fuzzy_dhum_Input(-35,35)]
Web頁面采用Html5、Css、JavaScript及jQuery編寫,Web后臺采用Flask,具體框架見圖6。

圖6 Web程序框架圖
Flask是Python Web框架的一種,其核心既簡單而又可擴展。其是用Python編寫的輕量級 Web 應用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。程序運行后的效果圖如圖7。

圖7 程序運行后的效果圖
目前本智能云灌溉系統已經運用于水果黃瓜的種植試驗,在單株黃瓜的種植試驗當中,系統運行穩定、可靠,達到了精確灌溉的目的,完全實現了自動化的灌溉與施肥,而省了大量的人力勞動。
本智能云灌溉系統利用目前飛速發展的物聯網的一些硬件設備,使得以前類似于工控機形象的灌溉系統煥發出了新的生命力。利用Raspberry Pi II強大的計算能力,不僅將模糊運算器放在上面運行,還在其上建立一個web系統,使得整個系統不僅運行精確可靠,而且操作簡單方面,接受性高。
[1] Jonathan Brogdon. Control the limelight with a Raspberry Pi[J]. Linux Journal,2013.
[2] Warren W. Gay. Experimenting with Raspberry Pi[M]. Apress, 2014.
[3] 楊耿煌,付 春. 基于GSM短信平臺的灌溉自動控制器的開發[C]∥2005年中國農業工程學會學術年會,2005.
[4] 谷海穎,韓正之,唐厚君,等.一類參數自調整型智能模糊控制器的設計和實現[J]. 電氣自動化,2001,(6).