一种智能云灌溉系统
2017-03-21何江
何 江
(兰州理工大学机电工程学院,兰州 730000)
0 引 言
最近几年,随着政府投入农业的力度日益增大以及各个行业开始对农业领域进行投资,我国农业现代化正在加速发展,许多新型农业主体已经成长起来,对于农业科技的资金投入也已经增加,为推广智能化灌溉系统提供了有力保障。而随着物联网的发展,各种新技术广泛应用于智能灌溉,为智能灌溉技术的发展提供了技术上有力的保证。
随着电子科技的快速发展,芯片迭代速度大大增加,物联网不仅在CPU、传感器等硬件上得到了飞速的发展,软件上也进行了跨越式的发展。尤其是目前基于Android、iOS的APP编程,以及非常流行的B/S网络结构,都让物联网的控制系统软件相比于以往,不仅在功能上有了极大的提高,在用户体验上也有了飞跃的进步。然后目前的智能灌溉系统并没有充分的利用硬件技术的极大提高,很多系统仍然采用C51之类的单片机,性能低下不说,而且很多需要PC机作为上位机;在用户体验上,依然是传统工业冷冰冰的设计方案,没有利用目前互联网一些流行的网络技术,让用户产生了距离感。
因此,本文利用目前性能很高的Raspberry Pi II(树莓派二代)作为控制核心硬件,以及先进的Web技术,并结合其他外围器件,制作了一部可靠性高、稳定性强、经济性好、用户易接受度高的智能云灌溉系统。
1 硬件设计
1.1 硬件整体结构
本智能灌溉系统主要由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 整体结构示意图
1.2 湿度传感器的连接
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路输入)。
1.3 直流电机泵组的连接
本系统采用直流电机驱动蠕动泵,为了能够调整灌溉水量,需要使用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 实际完成图
2 控制软件的设计
2.1 软件整体设计方案
本系统前台、后台程序和控制程序均采用Python开发,控制软件使用了Python GPIO、BCM2835的库,这些集成库提供了对树莓派相关硬件资源的操作函数,使用非常简洁方便。而传统的linux驱动设计的方法,为编写驱动程序对CPU的GPIO寄存器进行操作,生成驱动模块后再加载,不仅复杂而且调试周期长。软件大概框架如图5。
图5 软件框架图
其主要流程为:传感器读取程序模块首先按照预定的时间值读取当前的土壤湿度值,然后将数据写入Mysql数据库,Web程序将数据(空气温湿度、土壤湿度等数据)显示出来(如图7),同时控制程序模块介入系统的流程,把从Mysql的数据传入模糊算法控制器控制,后者将处理后的数据又传给前者,控制程序模块执行一边执行相应的操作,一边又要将数据写入Mysql数据库。该程序还有手动功能,能够通过web界面直接操控系统。
2.2 模糊控制算法的实现
本系统采用带修正因子的二维模糊控制器,输入量分别为土壤湿度和土壤湿度的变化,输出量为直流电流的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)]
2.3 Web程序设计
Web页面采用Html5、Css、JavaScript及jQuery编写,Web后台采用Flask,具体框架见图6。
图6 Web程序框架图
Flask是Python Web框架的一种,其核心既简单而又可扩展。其是用Python编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。程序运行后的效果图如图7。
图7 程序运行后的效果图
3 结 语
目前本智能云灌溉系统已经运用于水果黄瓜的种植试验,在单株黄瓜的种植试验当中,系统运行稳定、可靠,达到了精确灌溉的目的,完全实现了自动化的灌溉与施肥,而省了大量的人力劳动。
本智能云灌溉系统利用目前飞速发展的物联网的一些硬件设备,使得以前类似于工控机形象的灌溉系统焕发出了新的生命力。利用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).