何 江
(蘭州理工大學(xué)機(jī)電工程學(xué)院,蘭州 730000)
最近幾年,隨著政府投入農(nóng)業(yè)的力度日益增大以及各個(gè)行業(yè)開始對(duì)農(nóng)業(yè)領(lǐng)域進(jìn)行投資,我國(guó)農(nóng)業(yè)現(xiàn)代化正在加速發(fā)展,許多新型農(nóng)業(yè)主體已經(jīng)成長(zhǎng)起來(lái),對(duì)于農(nóng)業(yè)科技的資金投入也已經(jīng)增加,為推廣智能化灌溉系統(tǒng)提供了有力保障。而隨著物聯(lián)網(wǎng)的發(fā)展,各種新技術(shù)廣泛應(yīng)用于智能灌溉,為智能灌溉技術(shù)的發(fā)展提供了技術(shù)上有力的保證。
隨著電子科技的快速發(fā)展,芯片迭代速度大大增加,物聯(lián)網(wǎng)不僅在CPU、傳感器等硬件上得到了飛速的發(fā)展,軟件上也進(jìn)行了跨越式的發(fā)展。尤其是目前基于Android、iOS的APP編程,以及非常流行的B/S網(wǎng)絡(luò)結(jié)構(gòu),都讓物聯(lián)網(wǎng)的控制系統(tǒng)軟件相比于以往,不僅在功能上有了極大的提高,在用戶體驗(yàn)上也有了飛躍的進(jìn)步。然后目前的智能灌溉系統(tǒng)并沒有充分的利用硬件技術(shù)的極大提高,很多系統(tǒng)仍然采用C51之類的單片機(jī),性能低下不說(shuō),而且很多需要PC機(jī)作為上位機(jī);在用戶體驗(yàn)上,依然是傳統(tǒng)工業(yè)冷冰冰的設(shè)計(jì)方案,沒有利用目前互聯(lián)網(wǎng)一些流行的網(wǎng)絡(luò)技術(shù),讓用戶產(chǎn)生了距離感。
因此,本文利用目前性能很高的Raspberry Pi II(樹莓派二代)作為控制核心硬件,以及先進(jìn)的Web技術(shù),并結(jié)合其他外圍器件,制作了一部可靠性高、穩(wěn)定性強(qiáng)、經(jīng)濟(jì)性好、用戶易接受度高的智能云灌溉系統(tǒng)。
本智能灌溉系統(tǒng)主要由Raspberry Pi II電路板、FC-28土壤濕度傳感器、DTH11溫濕度傳感器、AD8591數(shù)模轉(zhuǎn)換模塊及L298N直流電機(jī)驅(qū)動(dòng)模塊和蠕動(dòng)泵等硬件構(gòu)成。其中,Raspberry Pi II采用Broadcom BCM2836 900 MHz的四核SoC,1GB內(nèi)存, 不僅能跑全系列ARM GNU/Linux發(fā)行版,而且支持Snappy Ubuntu Core及Windows 10。
整體結(jié)構(gòu)示意圖見圖1。
圖1 整體結(jié)構(gòu)示意圖
FC-28土壤濕度傳感器的AO口(模擬量口)與AD8591數(shù)模轉(zhuǎn)換模塊的輸入口連接,將模擬量轉(zhuǎn)換為數(shù)字量,然后AD8591將土壤濕度的數(shù)字量通過(guò)I2C總線傳輸?shù)絉aspberry Pi II里。其連線示意圖如圖2。
圖2 濕度傳感器連接
其中I2C(Inter-Integrated Circuit)總線是兩線式串行總線,一條是數(shù)據(jù)線SDA,一條是時(shí)鐘線SCL。特別需要注意的就是,Raspberry Pi II 的Ubuntu mate系統(tǒng)默認(rèn)是不開啟I2C功能的(其他系統(tǒng)),需要在Config文件中修改。另外如果系統(tǒng)接了多個(gè)AD8591模塊,需要修改其地址線。例如,A0、A1、A2如果都接地的話,地址即為Ox48,二進(jìn)制即為1 001 000,前4位不能修改,只能通過(guò)修改A0、A1、A2來(lái)修改地址,即最多同時(shí)只能并聯(lián)8個(gè)模塊進(jìn)行32路的數(shù)據(jù)采集(每個(gè)模塊有4路輸入)。
本系統(tǒng)采用直流電機(jī)驅(qū)動(dòng)蠕動(dòng)泵,為了能夠調(diào)整灌溉水量,需要使用PWM脈沖寬度調(diào)制來(lái)解決直流電機(jī)調(diào)速的問(wèn)題。Raspberry Pi II的PWM硬件輸出口只有一路,當(dāng)然如果需要多路的PWM輸出口,可以用軟件的方法實(shí)現(xiàn),例如wiringPi就提供了用軟件多線程實(shí)現(xiàn)PWM的輸出方法,可以很方便的利用庫(kù)中的函數(shù)來(lái)任意配置GPIO口為PWM輸出。本系統(tǒng)的直流電機(jī)驅(qū)動(dòng)模塊為L(zhǎng)298N,連線圖如圖3。
圖3 直流電機(jī)接線圖
其中L298N是ST公司生產(chǎn)的一種驅(qū)動(dòng)能力強(qiáng)、發(fā)熱量低的直流電機(jī)驅(qū)動(dòng)芯片。使用L298N芯片驅(qū)動(dòng)電機(jī),既可以驅(qū)動(dòng)一臺(tái)兩相步進(jìn)電機(jī)或四相步進(jìn)電機(jī),也可以同時(shí)驅(qū)動(dòng)兩臺(tái)直流電機(jī)。本系統(tǒng)目前只接了一臺(tái)蠕動(dòng)泵(直流電機(jī)驅(qū)動(dòng)),因此OUT3、OUT4、IN3、IN4、ENB接口可以不用。這里也需要特別注意一點(diǎn),當(dāng)我們使用外部電源的時(shí)候,L298N的+5v接的不是Raspberry Pi II電路板的+5V,而是一個(gè)GPIO口,不然會(huì)引起電路的短路。
整體硬件完成后,如圖4。
圖4 實(shí)際完成圖
本系統(tǒng)前臺(tái)、后臺(tái)程序和控制程序均采用Python開發(fā),控制軟件使用了Python GPIO、BCM2835的庫(kù),這些集成庫(kù)提供了對(duì)樹莓派相關(guān)硬件資源的操作函數(shù),使用非常簡(jiǎn)潔方便。而傳統(tǒng)的linux驅(qū)動(dòng)設(shè)計(jì)的方法,為編寫驅(qū)動(dòng)程序?qū)PU的GPIO寄存器進(jìn)行操作,生成驅(qū)動(dòng)模塊后再加載,不僅復(fù)雜而且調(diào)試周期長(zhǎng)。軟件大概框架如圖5。
圖5 軟件框架圖
其主要流程為:傳感器讀取程序模塊首先按照預(yù)定的時(shí)間值讀取當(dāng)前的土壤濕度值,然后將數(shù)據(jù)寫入Mysql數(shù)據(jù)庫(kù),Web程序?qū)?shù)據(jù)(空氣溫濕度、土壤濕度等數(shù)據(jù))顯示出來(lái)(如圖7),同時(shí)控制程序模塊介入系統(tǒng)的流程,把從Mysql的數(shù)據(jù)傳入模糊算法控制器控制,后者將處理后的數(shù)據(jù)又傳給前者,控制程序模塊執(zhí)行一邊執(zhí)行相應(yīng)的操作,一邊又要將數(shù)據(jù)寫入Mysql數(shù)據(jù)庫(kù)。該程序還有手動(dòng)功能,能夠通過(guò)web界面直接操控系統(tǒng)。
本系統(tǒng)采用帶修正因子的二維模糊控制器,輸入量分別為土壤濕度和土壤濕度的變化,輸出量為直流電流的PWM值。模糊集均為{NB,NBL,NM,NS,NO,PO,PS,PM,PBL,PB},論域均為{-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6}。精確量轉(zhuǎn)換為模糊量的公式為:
Y=2n[x-(a+b)/2]/(b-a)
(1)
式中:a為精確量的上限值;b為精確量的下限值;x為所要轉(zhuǎn)換的精確量;Y為轉(zhuǎn)換的模糊量;n為模糊量的上限(或下限)值(需對(duì)稱)。
模糊控制規(guī)則采用if … and … then 結(jié)構(gòu)。本系統(tǒng)的模糊控制表為在線自動(dòng)生成,能夠根據(jù)不同的修正因子自動(dòng)生成不同的控制表,其公式為:
U=a*hum+(1-a)*dhum
(2)
式中:U為控制模糊量;a為修正因子;hum為土壤濕度值;dhum為土壤濕度值的變化值。
本模糊控制器完全是用Python編寫的。Python是完全面向?qū)ο蟮恼Z(yǔ)言。函數(shù)、模塊、數(shù)字、字符串都是對(duì)象。并且完全支持繼承、重載、派生、多繼承,有益于增強(qiáng)源代碼的復(fù)用性。而且Python是一種跨平臺(tái)語(yǔ)言,在Windows、Linux、MacOS等均可以使用。下面是具體代碼的實(shí)現(xiàn):
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 ]
##二維數(shù)組坐標(biāo)對(duì)應(yīng)
def degerr(self,x,y):
if x <= -6:
return 0
if x == -5:
return 1
…… …
##將基本論域轉(zhuǎn)成模糊論域
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):
##創(chuàng)建12×12二維矩陣
u_table = [[0 for col in range(13)] for row in range(13)]
a = 0.5 ##設(shè)定修正因子
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
##根據(jù)控制輸出表來(lái)輸出模糊量
def out_Put(self):
s = self.output_Table()
return s[self.fuzzy_hum_Input(66,100)][self.fuzzy_dhum_Input(-35,35)]
Web頁(yè)面采用Html5、Css、JavaScript及jQuery編寫,Web后臺(tái)采用Flask,具體框架見圖6。
圖6 Web程序框架圖
Flask是Python Web框架的一種,其核心既簡(jiǎn)單而又可擴(kuò)展。其是用Python編寫的輕量級(jí) Web 應(yīng)用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。程序運(yùn)行后的效果圖如圖7。
圖7 程序運(yùn)行后的效果圖
目前本智能云灌溉系統(tǒng)已經(jīng)運(yùn)用于水果黃瓜的種植試驗(yàn),在單株黃瓜的種植試驗(yàn)當(dāng)中,系統(tǒng)運(yùn)行穩(wěn)定、可靠,達(dá)到了精確灌溉的目的,完全實(shí)現(xiàn)了自動(dòng)化的灌溉與施肥,而省了大量的人力勞動(dòng)。
本智能云灌溉系統(tǒng)利用目前飛速發(fā)展的物聯(lián)網(wǎng)的一些硬件設(shè)備,使得以前類似于工控機(jī)形象的灌溉系統(tǒng)煥發(fā)出了新的生命力。利用Raspberry Pi II強(qiáng)大的計(jì)算能力,不僅將模糊運(yùn)算器放在上面運(yùn)行,還在其上建立一個(gè)web系統(tǒng),使得整個(gè)系統(tǒng)不僅運(yùn)行精確可靠,而且操作簡(jiǎn)單方面,接受性高。
[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短信平臺(tái)的灌溉自動(dòng)控制器的開發(fā)[C]∥2005年中國(guó)農(nóng)業(yè)工程學(xué)會(huì)學(xué)術(shù)年會(huì),2005.
[4] 谷海穎,韓正之,唐厚君,等.一類參數(shù)自調(diào)整型智能模糊控制器的設(shè)計(jì)和實(shí)現(xiàn)[J]. 電氣自動(dòng)化,2001,(6).