陆洋,陶杰
(苏州农业职业技术学院,江苏苏州,215008)
水培生菜产量高,品质好,安全美味,易于管理。目前一般的小型室内种植设备逐渐出现,但功能相对简单。如图1所示的麦佳氧菜源M3型号的智能蔬菜种植机,只具有循环灌溉、自动补光等功能。为更好的控制生菜生长,提升设备的自动化水平。在原有基础上,增加了营养液远程监测功能。本文针对此需求设计了控制单元,检测种植机中营养液箱营养液的电导率、液位、PH计的数值,通过手机APP上远程监测数值的变化。
图1 蔬菜种植机装置图
系统由控制单元,上位机和监控终端组成,控制单元由控制器和硬件外设组成,控制单元包含单片机,单片机连接OLED显示屏、传感器、水泵和ESP8266模块。上位机采用了物联网平台ONENET智能云与ESP8266无线连接,用来存储数据,监控终端使用的手机APPONENET设备云来制作图形界面,来远程监测数据的变化。
控制单元采用STM32F103ZET6作为核心控制器,通过SPI连接OLED显示屏,通过两个串口与液位、电导率、PH计传感器和wif i模块通信。控制单元电路图如图3所示。
图3 控制单元电路图
OLED显示屏采用中景园1.8彩色TFT LCD,型号为OLED128160,分辨率为128×160,使用SPI串口,采用5V供电。显示屏的SDA接在PF115,SCL接在PF13,RES接在PF11,DC接在PF10,CS接线PF12,BL接在PF1上。
电导率、液位、PH值传感器与单片机采用Modbus协议通信,采用485总线连接。 单片机串口2 使用TTL转485模块CP2102实现总线转换。 单片机USART2的RX(PD6)接在模块的RX上,TX(PD5)接在模块的TX上,传感器的RS485A接在模块的A上,传感器的RS485B接在模块的B上,传感器外接12V电源。
WIFI模块采用ESP8266-01,通过串口转换与单片机连接,该模块支持TCP透传模式,使用3.3V供电。单片机的USART3串口的RX(PD9)接在ESP8266模块的TX上,TX(PD8)接在模块的RX上。
WiFi和传感器出现故障时需要报警,两个LED报警灯一个负责WIFI连接失败报警,另一个LED报警灯负责传感器读取失败报警,LED使用3.3V供电。L1接在PC0上,L2接在PC1上。
控制单元程序主要由主程序和串口接收中断子程序组成。主程序与主程序之间通过几个全局变量实现程序之间的数据操作。
定义全局变量f loat型数组canshu[4],数组元素依次作为电导率、液位、PH值当前参数值及传感器累积的未复位报警次数;其中电导率和PH值1位整数2位小数,液位值是1位整数2位小数。
主程序中通过串口发送各传感器检测modbus协议指令,并将传感器按照modbus协议返回的检测值处理,之后将各检测值显示在OLED上,并发送至ONENET智能云。串口接收过程由中断子程序处理。串口接收数据及状态由主程序处理。定义全局变量char型数组RS485_RX_BUF[8],作为串口接收缓存区。
根据控制单元和ONENET智能云的数据流输送需要,定义一char型数组shangchuan[15]。
在shangchuan[15]中第0到11个元素表示三个传感器读取电导率、液位、PH值转换后的四位字符;第12至14元素值表示三个传感器的状态,“0”表示正常,“1”表示报警。
充分考虑传感器的检测及通信时间延迟,项目中设计各传感器每隔300ms读取一次,每隔100ms轮流读取3个传感器的参数值。定义char型全局变量f lag,作为单片机串口接收一次传感器检测数值的完成标记。
进入主程序后,先执行初始化程序,根据硬件连接指定各相关引脚号和数据方向,控制器采用串口2进行MODBUS通信,设置串口2的波特率为9600;控制器采用串口3进行ESP8266串口通信,设置串口3波特率为115200,发送AT指令来配置ESP8266使其连接到ONENET智能云,AT指令接收成功则显示OK,配置失败则显示ERROR,如果没有连接到,就重新发送配置,在连接不成功重试了三次之后,WiFi报警灯LED开始闪烁。连接到ONENET智能云之后,控制器通过发送Modbus协议检测命令给传感器,轮询读取三个传感器的参数检测值。每个传感器每隔300ms读取一次测量值。
在主程序中,根据传感器的参数读取指令的modbus协议,定义三个char型数组TX_diandao[8]、TX_water[8]、TX_ph[8],分 别 为电导率读取数组、液位读取数组、PH值参数的读取指令帧。主程序每次发送读取指令帧前,先清空串口接收缓冲区数组RS485_RX_BUF[8],并将串口接收检测数值的完成标记f lag复位。
图4 主程序流程图
程序中设计一int型变量s作为传感器序号,当s=0时,发送电导率传感器modbus指令,当s=1时,发送液位传感器modbus接收指令,当s=2时,发送PH值传感器modbus接收指令;每次发送modbus指令后对应的s加1。延时100ms后,通过检查全局变量f lag,如未正确收到检测值,则将s减1,再次发送对应传感器的检测指令。
如果发送正确接收到数值,先把canshu[0]、canshu[1]、canshu[2]显示到OLED显示屏中,并转换成shangchuan[15]中格子对应的字符值;如3次发送未能收到检测数值,在shangchuan[15]中将对应传感器的状态刷新;最后将shangchuan[15]值上传至智能云。
传感器通信的modbus协议规定,传感器的测量响应帧为8个字节。串口接收数据后调用中断子程序,中断子程序流程图如图5所示。
图5 子程序流程图
串口每接收一个字节进入中断,将接收数据存放进数组RS485_RX_BUF[8]中。并检查是否收到8个字节后检测数据是否符合协议要求,如正确,则按照IEEE754标准将接收的数值转换为浮点数,并存入对应的全局变量canshu[4]中,并将接收标记f lag置1。如错误,则直接退出,由主程序在100ms的定时后检查f lag值后处理报警。
在ONENET智能云数据流模板中添加diandao、yew ei、p h、baojing1、baojing2、baojing3数 据流,分别在图形界面中显示电导率、液位、PH值和三个传感器的状态。在设备列表中采用LUA建立关联脚本,使用函数device_data_analyze ()从接收的上行数据分离出对应值赋值 给diaodao、yewei、ph、baojing1、baojing2、baojing3数据流。
图形界面的设计使用了ONENET设备云APP进行设计。图形界面由图6所示,数据查看区域使用仪表图和报警灯,分别对应各自数据流,通过APP可以查看传感器运行状态和测量值。
图6 远程监测图形界面
本文使用STM32F103ZET6单片机实现电导率、液位、PH值的检测控制单元,通过WIFI的TCP透传方式实现与ONENET智能云的通信,在ONENET上控制台设置数据流并设计监视图形界面,较好地实现了水培生菜生长环境远程监测功能。