程雪敏
(苏州工业职业技术学院,江苏苏州,215104)
本课题设计的是一种游泳池的智能恒温控制系统,系统主要分为手动调节温度和自动调节温度两个模块,主要功能是通过温度的设定实现智能控制温度大小,采用STM32F103C8T6 微控制器配合其他器件做成最小系统板,水温度传感器负责将实时温度信息采集并进行储存,温湿度传感器同理负责将说采集到的温湿度数据进行储存,单片机通过单总线协议读取传感器所储存的数据后进行计算,从而得到想要的数据。
游泳池用智能恒温系统控制的设计是根据现在人们喜爱这项运动的始点出发,解决了泳池在受到温度影响而无法及时使用的情况下设计的。本智能恒温控制系统在各个领域应用广泛,市场前景较为广阔,能够提高能源利用率。
图1 为系统的框图设计。本设计的核心控制器为一颗STC32F 系列单片机,由一些外围元器件搭建出此核心控制器的简易工作环境,从而提供整个系统所需要的算力及逻辑控制,电源方面采用了双电源设计,单片机通过与温湿度传感器、水温传感器通信获取实时数据,用户操作编码器按键输入预设信息,采集到这三个外设的数据后即可实现离线控制水温,WiFi 模块有接收到数据后会将数据发送到单片机,单片机对信息筛选后写入指定寄存器后开启离线控制模式,此时WiFi 会将离线的数据实时上传到云端。里面控制模式会将所采集到的信息,以及当前离线模式的状态发送到OLED 显示屏上进行显示,供用户阅读。当需要开启加热器时单片机会给陶瓷加热片驱动电路PWM 信号,来控制陶瓷加热片的功率。
图1 系统设计框图
硬件电路的设计要满足是高质量、安全性、简略性等。本系统主要由STM32F103C8T6 主控电路、状态指示电路、LDO 降压电路、温湿度检测电路、加热驱动电路、WiFi 通信模块、OLED 显示电路、DC 降压电路组成。
图2 是STM32F103C8T6 的最小工作系统,图中BOOT0 引脚直接拉低,只因此设计程序无特殊要求,程序代码体积也相对较小,故只需要将主闪存作为启动区域,而无需从系统存储器或者内置的SRAM 中启动系统程序。考虑到本系统需要在高温高湿的环境中运行,晶振采用了外置8MHz 晶振提高系统工作可靠性。芯片复位端口有外接按键,当出现紧急情况可以以最快速度复位芯片增加安全性。此单片机部分引脚可以接受5V 电平输入,当外设电压受干扰产生波动信号电平也会跟随波动,因为可以容忍5V 电平所以不易导致芯片损坏。
图2 STM32F103C8T6 主控电路
如图3 所示,Q2 MOS 采用新节能的NCE01P13K,支持100V 电压13A 的电流,大电流可根据实际情况更换不同功率的陶瓷发热片,从而适应各种泳池大小。MOS 的开关由8050 三极管控制,当三极管基极受电导通后,会拉低MOS 的栅极电压从而使PMOS(Q2)导通,12V 电源经过Q2 与P4 接口的陶瓷加热片接通,加热片即开始工作。电容C7 为铝电解电容,抑制通电瞬间产生的压降,防止压降过大,导致系统缺电复位。
图3 加热驱动电路
在电阻R12 上拉至3.3V 电源防止ESP8266 因干扰复位,LED3 为是否开启加热功能指示灯,当接收到云端的开启数据LE3 点亮,当云端选择关闭加热功能LED3 也会熄灭。当解析完成云端数据后会通过串口将数据发送给主控。底层会将实时温湿度数据通过串口发送给EP8266,解析成功后ESP8266 将数据上传ONENET,在用户操作界面即可看到实时数据。数据解析功能可以避免干扰数据导致上传数据出错。EPS8266 与云端通信采用的JSON 通信格式,便于云端对数据分析处理。如图4 所示。
图4 WiFi 通信模块
图5 DC 降压电路采用的芯片是MP1584EN,其输入电压范围较宽(4.5~28V)所以能接受12V 的电源输入。R15、R16 通过分压给到芯片的使能引脚使能信号,D1 防止电感L1 的反向电动势击穿芯片内部MOS,MP1584EN开关频率可达1.5MHz 电感L1 的反向电动势会很大,D1 可以消耗掉反向电动势保证芯片安全。R9、R10 构成输出电压采样用于反馈输出电压,让芯片实时调整输出电压保证输出电压在设置的范围内。MP1584EN 对于防止EMI 也有良好的效果,对于电流失控及温度过高都有良好的保护,并且其工作频率较高非常适合当前电路。
图5 DC 降压电路
网页端的数据处理采用的是ONENET 平台,底层ESP8266 将数据打包上传至服务器183.230.40.39 的6002端口,依靠ONENET 平台实现远程控制。
如图6 所示,MQTT 协议接入,能看到当前上传数据的总数及七日新增,能够让用户直观判断当前数据是否有效,在面板界面可以看到三组数据,标题分别为TEMP、Temp、Humi 分别对应水温、环境温度、环境湿度,这三组数据都可看到最后更新时间,可以不借助图形界面就可直观的观察当前数据,每一个标题都对应ESP8266 所订阅的标题,标题用于区分不同数据。数据的获取是从通过MQTT协议上传到服务器的JSON 数据中解析的,预先根据指定的数据格式上传数据,ONENET 平台会自动解析数据,并将解析过的数据显示到当前页面。当在ONENET 平台创建产品后,会自动生产产品ID 与产品KEY,在上传数据前需要与服务器握手ID 与KEY 信息,只有这些都正确后才可向服务器传输数据。
图6 MQTT 协议接入
如图7 所示,可视化操作界面是由ONENET 的可视化项目编辑工具来完成的,可视化页面数据可直接对接MQTT协议接入的数据,可视化界面的数据需要自行编写代码解析,环境温湿度与水温是由表盘组价来进行编辑,接入MQTT 数据流后即可接管底层上传对应订阅主题的数据,经过JAVA 程序对接管数据进行有效信息提取后,再将数据发送至表盘数据接口表盘即可自动更新数据,当前设置参数为5s 更新一次参数。
图7 可视化操作页面
设定水温是由ONENET 的旋钮接口组件进行实现,当用户操作结束时此组件会自动往设定的订阅主题下下发一组数据,此组数据包含当前所设置的水温数值。对于按钮的操作也同理,当操作按钮改变状态时,按钮组件也会向对应的订阅主题下发开关数据。开关数据可自行定义,当前所定义的数据为关:0x01,开:0x00。
恒温系统的工作流程图如图8 所示,通过操作系统RT-Thread 对所需要进行的任务进行合理的安排,由于RTThread 是实时线性操作所以任务的安排具有优先级,获取水温任务尤为关键,程序运行后会首先与防水行数字传感器D18B20 进行通信,获取到温度数据后再与温湿度传感器(DHT11)通信,获取环境的温湿度值后用户可以根据环境温湿度调整水温,程序所获取的温湿度都会上传的用户操作界面显示。
图8 恒温系统工作流程图
根据当前所采集到的水温信息,并且通过串口数据获取到的用户所设置的水温信息进行比对,水温控制方面采用了类PID 算法的模糊控制,考虑到水温不均衡,并没有采用PID 算法的精确控制特性,而是在水温即将到达预设值时进行模糊控制,通过简易算法结果STM32 操作硬件IO 口对陶瓷加热驱动电路进行控制,通过PWM 控制驱动器的工作时间,从而有效控制陶瓷加热片的功率,即可实现快速升温与恒温控制,确保水温不会有太大的波动从而提高用户体验感。
ESP8266 通电后会首先自检各功能,当检查无误后会对当前WiFi 进行连接,如果发现连接不成功会启动自动配网模式,此时用户开启手机自动配网APP 即可让ESP8266连接到与手机同一网络。当网络连接成功后会自动与ONENET 服务器进行握手,发送用户ID 与用户Key 后灯带服务器验证后握手,验证成功后会持续检测串口数据,当检测到ESP8266 串口数据不为零时延时100ms 后对串口数据全部读取,后进行解析出有效数据,将数据发送至对应的订阅主题下。当ONENET 服务器下发数据后,MQTT 库函数会调用接收函数,接收函数对ONENET 下发数据进行解析后通过串口发送给STM32F103 单片机,发送成功后会复位并等待下次数据下发。如图9 所示。
图9 ESP8266 程序流程
如图10 所示,图形是示波器测量陶瓷加热片驱动电路的输入信号,示波器保持情况下进行截图所获取的,加热片驱动电路输入信号频率为65kHz,图中0.08 占空比为内部经过计算所得出当前加热片需要开启的比例,此时水温已经接近预设温度程序会自动降低占空比来降低加热片功率来防止水温过冲,导致用户烫伤或其他不可出现意外。
图10 加热器驱动波形
如图11 所示,图中代码为ONENET 图形化界面的数据解析代码,刚开始调试时数据总是出错,经过反复检查后发现代码并没有起作用,所以ONENET 界面一直显示数据解析错误,当调整好配置好代码正常运行,但是显示数据总是60,以为是底层数据上传失败,后经过MQTTx 软件进行数据获取发现数据格式与数据都不曾有错,经过返回数据对比发现当前代码return arr[1];所返回的数据位不同,后改成如图的代码数据即显示成功。
图11 云端数据过滤器代码
本设计是一个基于STM32 微控制器的恒温控制系统,水温温度能根据环境温度保持恒温并且可以调控温度,实现对温度的采集与分析。在本设计的制作过程中,完成了软硬件的设计和实物的制作。
本系统使用嵌入式技术,采用DS18B20 数字温度传感器和DHT11 温湿度传感器,实现了模糊控制下的恒温控制并且实时温度的显示。能够实现智能恒温解决了日常热水器需要手动调节温度的问题,有效的减少了能源的消耗。通过对本设计的研究与实现,我深刻体会到了单片机技术的先进性和诸多优点,在现代和未来的工业发展中单片机技术必定会拥有广阔的应用前景。