谭 燕,秦风元
(1.重庆三峡职业学院智能制造学院,重庆 404155;2.江苏大学电气信息工程学院,江苏 镇江 212013)
我国为世界13大最缺水国家之一,且农业方面的相关用水量占我国总用水量的1/2左右,而近年来电子科学技术的发展不断推进了农业工程相关领域智能化的更新与完善[1-3]。因此,研究智能灌溉系统,提高灌溉系统的用水效率对节约水资源具有重要的意义。
Raspberry Pi是一种基于Linux操作系统的微信电脑,作为开源硬件领域的高阶硬件产品,其在车辆工程、农业工程等方面有了广泛应用[4-6]。姬江涛等通过Raspberry Pi设计一款智能蔬菜耕作设备,其耕作的株距合格率为94.91%,误播率为5.09%,具有良好的工作性能[7]。杨柳等将Raspberry Pi应用于拖拉机的无人驾驶系统的研究中,该系统的响应时间为0.3 s左右,且舵机的角度偏差为3°[8]。张世昂等通过树莓派研究设计了一种田间农作物的智能巡检车,其能够较好的完成巡检车预期的各项巡检要求[9]。本研究通过搭建Raspberry Pi 3b与相关传感器的硬件系统,应用pyhton语言编写控制与后台程序,前端界面程序采用Html5、Css以及Java Script编写,具有跨平台、兼容性好、界面表现性好等优点。同时采用 MySQL 对数据进行存储,系统自身的模糊运算控制器能够根据数据库中的数据输出合适的灌水量,从而使所研究设备成为一个“云”平台,达到智能化灌溉的目的。进而为智能灌溉设备的实现提供了新的思路。
从所研究灌溉系统的稳定性出发,选取的硬件包括Raspberry Pi 3b(图1)、DHT11型空气温湿度检测模块(图2)、卡默尔微型电机蠕动泵(图3)、L298N型电机驱动模块(图4)、YL-69型土壤湿度计检测模块以及PCF8591型A/D转化模块(图5)等。总体结构示意图如图6所示。
图1 树莓派3bFig.1 Raspberry Pi 3b
图2 空气温湿度检测模块Fig.2 Air temperature and humidity detection module
图3微型电机蠕动泵Fig.3 Micro motor peristaltic pump
图4 电机驱动模块Fig.4 Motor drive module
图5 土壤湿度计检测模块与A/D转化模块Fig.5 Soil hygrometer detection module and A/D conversion module
图6 硬件总体结构图Fig.6 Hardware architecture
采用SD Formatte对树莓派所安装的16G内存卡进行格式化,将NOOBS安装程序拷贝至内存卡中,并使内存卡插入树莓派内用NOOBS安装本研究所需的Linux Ubuntu mate系统(见图7)。安装系统之后,以局域网作为计算机与树莓派的连接媒介,使计算机通过putty(见图8)对树莓派进行控制。
图7 NOOBS界面Fig.7 NOOBS Interface
图8 putty界面Fig.8 Puty Interface
本研究的智能灌溉系程序的编写语言为Python3.5.2,选取Flask为Web的程序框架,选择MySQL为数据库。系统软件的整体设计如图9所示。
图9 软件整体结构框图Fig.9 Software block diagram
图9中相关传感器通过获取土壤温度、空气温湿度等数值,将输入存数到数据库中,并通过WEB将其显示,除此之外,控制程序将数据库内的数据送入模糊算法,并将模糊算法的结果存入数据库。WEB程序在整个过程中即可显示相关结果,也可对整个系统进行操作控制。
Raspberry Pi 3b的开发语言主要为C语言与Python语言,因若采用C语言对整个系统进行编程会复杂且不便,从而加长了开发周期,故采用Python进行开发[10-12]。选择B/S(Browser/Server)作为程序结构,Flask作为框架,采用BCM的编码方式。打开Raspberry Pi 3b内 ootconfig.txt 文件,删除文件内的##并保存,之后打开打开etcmodules文件,在文件内输入 i2c_bcm2708和i2c-dev ,最后安装SMBUS文件,从而来完成Raspberry Pi 3b的I2C的载入。
由于本研究中所选取土壤湿度计检测模块的PCF8591型A/D转化模块的引脚均为接地,故地址为0X48,二进制为1001000,通过A0、A1、A2来进行地址的修改。空气温湿度检测模块与Raspberry Pi 3b的GPIO连接,安装Python-GPIO 模块,从而给树莓派传入空气温度与湿度的二进制数值。电机的驱动模块与Raspberry Pi 3b的GPIO20与21连接,通过编程使电机可以达到正反转以及通过PWM的大小来进行变速工作与关闭。
为便于对编写好的程序及时调用,避免重复的编程工作,对所编写好的各模块程序进行封装,类视图如图10所示。
图10 类视图Fig.10 Category view
按照图10所示类视图分别对通过Python编程语言对土壤湿度计检测模块、空气温湿度检测模块、电机的驱动模块的程序进行封装。
采用Html5、Css以及Java Script对灌溉系统的登陆以及控制页面进行设计,通过对css的添加、js的引用、添加泵的控制程序、空气温湿度和灌溉水量等表格生成按钮的添加等来实现系统前端的全部设计。将前文中土壤湿度计检测模块、空气温湿度检测模块、电机的驱动模块的程序导入,并安装My SQL数据库,通过Python在数据库中建立table来对后续的试验数据进行记载。对进入相关界面的账户名称与密码进行设置,最后对空气的温湿度、电机的正反转以及调速相关程序进行设计。
为使灌溉系统通过采集土壤湿度计检测模块与空气温湿度检测模块的数据,从而调整电机的转速,达到智能灌溉的目的,采用模糊算法作为控制系统的方法。
本研究采用的控制器为二维模糊控制器,测控量为土壤湿度与土壤湿度的变化,其中土壤湿度作为被控制量,词集为:{负大,负大低,负中,负中低,负小,负小低,正零,正小低,正小,正中低,正中,正大低,正大},湿度的误差、误差变化以及湿度分别为A、B、C,其模糊集全部为:{FB,FBL,FM,FML,FS,FSL,0,ZSL,ZS,ZML,ZM,ZBL,ZB},对应的论域:{-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6},为使系统尽快到达湿度设定值,建立模糊控制的规则,并对其变量进行赋值。由公式(1)将精确数值转化为模糊值。
(1)
式中:a为精确数值上限;b为精确数值上限;X为精确数值;Y为模糊值;n为模糊值上、下限值(两者对称)。
在对被控制量以及电机的控制进行编程中,电机的控制需要计算其PWM值,计算流程如图11所示。
图11 电机PWM计算流程图Fig.11 PWM flow chart of motor
图11为计算电机PWM值,需将土壤、空气的相关数值乘以权值系数。不同因素的权值系数不同,本研究采用AHP(即层次分析法)来求得各权值系数的大小。通过一致矩阵法建立判断矩阵,以Santy法来求得矩阵内各元素的大小,结果为:
将其列向量归一化、行向量求和以及归一化,分别得到:
通过Aω=λω,求得λ=3.011。通过将ω四舍五入最终得到三因素的权值系数分为:0.69、0.19、0.12。
分别对系统进行服务器功能测试以及种植试验。服务器功能试验图如图12所示,其数值显示、按钮功能等均正常,符合预期设计要求。通过试验设备系统(图13)对单颗黄瓜幼苗进行试验灌溉,试验周期为90 d,黄瓜的移种、叶子的长出、开花如图14所示(因授粉技术的限制,本实验未结出果实)。
图12 服务器前端功能测试图Fig.12 Server front end function test chart
图13 试验设备系统Fig.13 Test equipment system
图14 种植试验Fig.14 Planting test
从图14可以得知黄瓜幼苗到开花的生长过程良好,且通过系统统计得知,一周内黄瓜幼苗的浇水量约为20 mL左右,低于一般的人工浇水量。验证了采用Raspberry Pi 3b研究精准灌溉系统的可行性。
(1)采用Raspberry Pi 3b、卡默尔微型电机蠕动泵等设计了智能灌溉系统的硬件部分。
(2)通过Python语言对智能灌溉系统程序控制与显示等部分进行了编程。
(3)编写模糊算法对智能灌溉系统的电机实现控制,并通过服务器功能测试以及种植试验进行了验证,表明了采用Raspberry Pi 3b研究精准灌溉系统的可行性。