施凤鸣,骆旭坤
我国是农业生产大国,当前大部分农田灌溉还是以粗放式管理为主,农田灌溉用水的有效利用系数只有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控制程序,使系统成为一个集实时查看和控制为一体的“云”平台,为智能灌溉系统的组建提供了一种新思路,具有一定的参考意义和推广价值.