APP下载

基于STM32F103ZET6的水培生菜生长环境远程检测系统设计

2021-09-06陆洋陶杰

电子制作 2021年17期
关键词:液位电导率pH值

陆洋,陶杰

(苏州农业职业技术学院,江苏苏州,215008)

水培生菜产量高,品质好,安全美味,易于管理。目前一般的小型室内种植设备逐渐出现,但功能相对简单。如图1所示的麦佳氧菜源M3型号的智能蔬菜种植机,只具有循环灌溉、自动补光等功能。为更好的控制生菜生长,提升设备的自动化水平。在原有基础上,增加了营养液远程监测功能。本文针对此需求设计了控制单元,检测种植机中营养液箱营养液的电导率、液位、PH计的数值,通过手机APP上远程监测数值的变化。

图1 蔬菜种植机装置图

1 方案设计

系统由控制单元,上位机和监控终端组成,控制单元由控制器和硬件外设组成,控制单元包含单片机,单片机连接OLED显示屏、传感器、水泵和ESP8266模块。上位机采用了物联网平台ONENET智能云与ESP8266无线连接,用来存储数据,监控终端使用的手机APPONENET设备云来制作图形界面,来远程监测数据的变化。

2 控制单元电路设计

控制单元采用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上。

3 控制单元的软件设计与实现

控制单元程序主要由主程序和串口接收中断子程序组成。主程序与主程序之间通过几个全局变量实现程序之间的数据操作。

定义全局变量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,作为单片机串口接收一次传感器检测数值的完成标记。

■3.1 控制单元的主程序实现

进入主程序后,先执行初始化程序,根据硬件连接指定各相关引脚号和数据方向,控制器采用串口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]值上传至智能云。

■3.2 串口接收中断子程序实现

传感器通信的modbus协议规定,传感器的测量响应帧为8个字节。串口接收数据后调用中断子程序,中断子程序流程图如图5所示。

图5 子程序流程图

串口每接收一个字节进入中断,将接收数据存放进数组RS485_RX_BUF[8]中。并检查是否收到8个字节后检测数据是否符合协议要求,如正确,则按照IEEE754标准将接收的数值转换为浮点数,并存入对应的全局变量canshu[4]中,并将接收标记f lag置1。如错误,则直接退出,由主程序在100ms的定时后检查f lag值后处理报警。

4 ONENET中控制台及监视界面设置

在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 远程监测图形界面

5 总结

本文使用STM32F103ZET6单片机实现电导率、液位、PH值的检测控制单元,通过WIFI的TCP透传方式实现与ONENET智能云的通信,在ONENET上控制台设置数据流并设计监视图形界面,较好地实现了水培生菜生长环境远程监测功能。

猜你喜欢

液位电导率pH值
降低粗选石灰PH值在沙溪铜矿的运用
除氧器液位控制器切换异常原因分析及应对措施
天然气车辆液位测量系统相关性的研究
不同低温处理对桃1年生枝相对电导率的影响
基于电导率法的地沟油含量测定
粉末树脂过滤器优化案例
TEP除气装置液位控制及故障分析
2265FS土壤原位电导仪测定结果与土壤含盐量的关系
时效制度对7075合金电导率的影响
水的酸碱性与健康无关