基于STM32与FreeRTOS的物联网鱼缸
2023-02-08陈建钢
陈建钢
(重庆科技学院 电气工程学院,重庆 401331)
0 引 言
随着人们生活水平的逐步提高,很多人将养鱼作为日常生活的消遣与放松方式,鱼缸是很多人养鱼时必不可少的工具。然而,市面上的大多产品是半自动化产品,普遍存在功能单一、自动化程度低等问题[1-3]。近年来。随着物联网技术的发展与成熟,它已成为解决上述问题的重要途径。刘治成[4]设计了集多种功能于一体的智能鱼缸,该智能鱼缸以单片机为控制中枢,围绕日常养护鱼缸的基本操作对鱼缸进行设计;结合传感器技术,对鱼缸内的环境进行自动化调节。但是单片机内存小,系统的响应速度慢。郭宇豪等人[5]提出基于STM32的家用智慧鱼缸设计,该系统具有智能进行鱼缸内外水循环、自动喂食调温、系统应急供电等功能,可以有效帮助用户轻松科学地饲养观赏鱼,但未考虑移动端优化显示。本文采用嵌入式实时操作系统并结合无线通信WiFi模块组成智能鱼缸系统,具有抗干扰性高、实用性强等优点,为用户提供了更好的体验,满足了用户智能养鱼的需求。
1 系统总体设计
本系统选用STM32F103C8T6单片机作为主控芯片,通过传感器采集鱼缸的环境数据,实现自动光照控制和对鱼缸内温度、pH值等环境因素的监测,通过ESP8266连接阿里云服务器并通过手机APP显示环境数据。智能鱼缸监测系统整体架构如图1所示,主要包括主控芯片模块、温度检测模块、光强度检测模块、pH值监测模块、无线通信模块。
图1 智能鱼缸监测系统整体架构
2 系统硬件设计
2.1 数据采集电路设计
2.1.1 温度检测与光照检测电路设计
本文采用DS18B20温度传感器,将DS18B20的T1数据口接到了单片机的PA5端口,采用的是单总线时序与主机通信,并且接了一个10 kΩ的上拉电阻。
光照传感器采用BH1750模块,模块引出了时钟线(SCL)和数据线(SDA),将模块的时钟线(SCL)连接到单片机的I2C时钟接口(PB6),模块的数据线(SDA)连接到单片机的I2C数据接口(PB7)。单片机通过I2C通信协议与BH1750模块通信完成数据采集。温度检测与光照检测电路如图2所示。
图2 温度检测与光照检测电路
2.1.2 水质检测电路设计
本文采用pH传感器探头,由于pH复合电极输出的电压信号微弱,为毫伏级[6]。因此设计了信号调理电路,采用2.5 V供电的运算放大器构成二级电路:第一级将pH电极输出与电压跟随器相连,目的是提高测量电路的输入阻抗和隔离前后级电路的影响;第二级将pH电极输出信号滤波放大[7]。PH_OUT信号为信号调理电路放大后的电压信号,将PH_OUT与单片机的ADC通道(PA0)相连进行ADC采集,其中ROSIN为pH探头的航空接口。水质检测信号调理电路如图3所示。
图3 水质检测信号调理电路
2.2 WiFi模块电路设计
本设计的WiFi模块采用ESP8266,该模块支持串口透明数据传输,内置TCP/IP协议栈和IEEE802.11协议栈[8]。本设计将ESP8266模块的TXD和RXD脚分别接STM32芯片的PA3/RX口和PA2/TX口,PA3作为数据回传口,PA2作为数据接收口,单片机就可以通过串口发送AT指令使ESP8266进行组网通信并接入互联网。电路中还对模块的供电电源进行了电容滤波,并将EN端口始终置于高电平工作状态。WiFi模块电路如图4所示。
图4 WiFi模块电路
2.3 控制板设计
本文为智能鱼缸系统设计了基于STM32F103C8T6的控制板,控制板搭载了STM32单片机最小系统、电源转换电路、传感器驱动电路和执行机构的继电器驱动电路。智能鱼缸控制板如图5所示。
图5 智能鱼缸控制板
3 系统软件设计
3.1 软件系统总体设计
本系统将STM32作为主控芯片对温度、光照强度、pH值进行数据采集。为了更好地进行任务调度,本文引进了FreeRTOS嵌入式实时操作系统。采用RTOS线程方式的并发任务处理,解决模块化问题,同时保证实时性与可靠性[9],使智能鱼缸系统更稳定、高效。软件系统整体流程如图6所示。
图6 软件系统整体流程
3.2 系统硬件初始化与任务创建
在系统启动时需要将系统所使用到的外设进行初始化,才能在任务中进行调用。本系统需要对I2C、ADC、USART、GPIO等外设进行初始化。硬件初始化程序如下:
在系统上电运行后需要对系统所需执行的任务进行创建,系统才会对所创建的任务进行任务调度。任务创建程序如下:
3.3 传感器采集任务
传感器采集任务用于搭建环境检测框架。传感器驱动系统是通过温度传感器、光照传感器、pH值传感器采集周围的环境数据并进行处理。当温度、光强度、pH值超出预设值,将会开启增氧、净水等功能。
3.4 MQTT通信任务
MQTT任务用于驱动WiFi模块和连接服务器。首先向模块发送AT指令连接无线局域网,连接成功后通过MQTT网络协议进行发布和订阅,并连接阿里云物联网平台。接入服务器后将传感器数据进行上报,云端接收到上报数据后转发至APP实现远程检测。
3.5 执行机构控制任务
执行机构控制任务用于电机、净水、增氧设备的逻辑控制,能结合传感器任务进行自动调节,也可以进行远程控制调节。当系统处于手动模式,接收到云端下发给单片机的指令后便执行相应的增氧、投食、净水操作。当系统处于自动模式,对传感器进行阈值设定,当超出阈值范围便进行自动控制。
3.6 线程调度切换
在任务执行过程中可以利用FreeRTOS的任务管理机制进行任务调度,调用vTaskDelay()函数挂起任务,使CPU处于空闲状态,操作系统内核将时间分配给其他任务,并在某个时间点将该任务唤醒。进行高优先级任务死循环执行时,设置任务睡眠,以执行低优先级的任务。提高系统实时性,让系统处于高并发状态,有利于提升系统性能[10]。任务调度流程如图7所示。
图7 任务调度流程
3.7 移动应用开发
本文APP采用阿里云的可视化界面开发,此应用兼容Android系统与IOS系统,适用于90%的用户。移动应用界面具有温度数据显示、光强度数据显示、pH水质值显示控件,以及投食按钮、增氧按钮、净水按钮控件。显示控件与按钮控件组成用户界面。移动应用用户界面设计如图8所示。
图8 移动应用用户界面设计
4 系统运行测试
4.1 系统安装调试
将智能鱼缸系统的STM32主控板、环境传感器、控制机构等设备进行安装调试。测试系统通信及功能是否正常,并对系统进行长时间的稳定性测试。智能鱼缸装配实物如图9所示。
图9 智能鱼缸装配
4.2 温度传感器数据测试
将温度传感器置于水中,记录温度数据并截取100个时间点的数据。分析得到温度波动在27~28.5℃之间,传感器性能稳定、波动较小。温度传感器数据分析如图10所示。
图10 温度传感器数据分析
4.3 光照传感器数据测试
将光照传感器安装在鱼缸表面,记录光照数据并截取100个时间点的数据。分析得到光照强度数据波动在145~160 lux之间,这是由于环境光线会受外界因素干扰,造成照度变化,并且数值波动较大。但传感器的性能稳定,能准确反映照度变化。光照传感器数据分析如图11所示。
图11 光照传感器数据分析
4.4 水质传感器数据测试
将pH水质传感器探头部分置于水中,避免将整个传感器泡入水中。安装完毕记录pH数据并截取100个时间点的数据。分析得到pH数据波动在7.3~7.6之间,传感器性能稳定、波动较小。水质传感器数据分析如图12所示。
图12 水质传感器数据分析
4.5 系统工作模式测试
系统手动工作模式测试采用黑盒测试。将系统切换到手动模式下,分别按下投食按键、增氧按键、净水按键,观察到投食电机、水泵、增氧泵正常开启、关闭。测试结果见表1所列。
表1 手动控制测试结果
在自动模式下通过设定阈值来控制投食物、增氧、净水机构的自动运行。通过人为照射光照传感器来模拟阳光照射,使光强度超出阈值,观察到增氧泵工作。将pH试液加入水中使pH值增高超出阈值上限,观察到净水水泵工作。设置投食物电机的开关时间,观察到投食口在设置时间内开启,其他时间关闭。测试结果见表2所列。
表2 自动控制测试结果
5 结 语
本文以智能鱼缸系统实时远程监测与管理为目的,以为用户提供便利、降低养鱼难度为起点,提出智能鱼缸远程监测控制系统。经测试表明,该系统安装在各种场所都能正常工作,可以实时对鱼缸环境状态进行检测上报,用户可通过移动端进行远程查看,也可以进行远程投食、净水、增氧。用户也可通过设置自动化场景让鱼缸进行自动管理。该系统可以使用户养鱼更加简单、便捷、高效。