本文介绍了一种基于STM32单片机的智能加湿器。该加湿器配备了DHT11温湿度传感器、水位传感器和浊度传感器,数据通过单片机处理并显示在OLED屏幕上。用户可通过按键模块设置阈值,并在检测值与设定值不符时自动关断或报警。设备支持手动、自动、定时和远程四种控制模式。系统程序在MKD5软件上开发并经过调试,现已稳定运行,提升了用户体验,并有进一步改进的潜力。
1系统硬件设计 1.1总体设计
本系统采用模块化设计由stm32单片机控制单元、温湿度传感器、水位传感器、浊度传感器、蜂鸣器、按键模块、OLED显示、WIFI模块、雾化模块、电机驱动模块组成。其中单片机做核心与其他模块互相配合实现各类功能。雾化模块开关通过直流电机驱动模块直接控制单片机间接控制。本系统方案整体框图如图1所示。
图1 系统整体框图
1.2控制单元
因为单片机具有高集成度、实时控制能力强、性价比高、易于扩展与开发且性能稳定等优点,所以本设计采用stm32f103c8t6作为核心控制枢纽[3],在芯片的输入和输出端均并联稳压电容以输出和输入稳定的3.3 V电压。
1.3传感器模块和可调电位器
该设计使用单总线协议的DHT11温湿度传感器模块,拥有成本低、性能稳定、响应超快、抗干扰能力强、数字信号输出、精确校准等优点[4]。DHT11温湿度传感器模块的串行数据线接4.7 KΩ上拉电阻后与单片机的PB14引脚相连。测量水位采用水位/水滴传感器,该传感器通过一排平行裸露导线线迹测量水滴/水量大小,实现水量到模拟信号的转换。在本设计中水位传感器与stm32单片机的PA6引脚相连。
采用浊度传感器型号为TSW-30,其内部是一个红外线对管,根据水中悬浮固体总量变化对透光率产生影响来测量透光率,并把透过光强转换为电流,透过的光多电流就大,反之则小。此设计应用该模块的模拟量输出接口AO,与单片机PA5引脚相连。采用2 K可调电位器,通过手动调节轴改变动触点在电阻体上位置改变电阻值,从而改变电压与电流的大小,以此实现手动控制。在本设计中其顶部引脚接3.3 V,中间引脚接单片机PA4,底部引脚接地。
1.4蜂鸣器报警电路
蜂鸣器采用无源蜂鸣器,在设计中加入了一个NPN型三极管,用以放大电流驱动蜂鸣器,三极管做开关用,由stm32单片机判断水位和浊度数据后对三极管基极发送脉冲信号,拉低或拉高基极电压,拉低时蜂鸣器断电拉高时通电[5]。这样即可实现阈值报警功能,蜂鸣器电路如图2所示。
图2 无源蜂鸣器电路
本设计采用内置完整TCP/IP协议栈的ESP8266WIFI模块,支持标准的IEEE802.11b/g/n协议,可将单片机与机智云服务器连接,进行数据传输。模块的LRXD引脚和UTXD引脚分别与单片机串口TX(PB10)和RX(PB11)相连,实现两者之间的数据通信。
01.6按键与显示模块
按键模块采用四位独立按键。显示模块采用0.96英寸OLED显示屏,其驱动芯片为SSD1306,由I2C总线驱动,该模块不需背光显示,每个像素可独立发光,且具有可视角度大,功耗低、反应快、适用温度范围广等特点,广泛应用于移动设备,本设计中为其提供3.3V电压用以显示检测到的温湿度等信息。
1.7电机驱动与雾化模块
雾化片采用超声波雾化片,本质是一片压电陶瓷,工作时产生高频震荡使其接触到的水分子结构被打散,形成自然飘逸的水雾,使空气湿润并含有丰富的负氧离子。在本设计中雾化片由L298N电机驱动模块驱动,该模块是双桥电路设计,通过控制H桥上电流方向实现对电机的控制,在本设计中用到IN1和IN2引脚,IN2引脚接地IN1引脚接单片机PA2,IN1输入高电平雾化片启动进行加湿,输入低电平雾化片停止加湿,通过改变IN1高电平占空比实现对加湿器工作功率的控制。
2软件设计 2.1主程序设计
本系统编程使用MDK5软件。编程主要实现外部设备初始化、温湿度检测、水位检测、水浊度检测、OLED显示、Wi Fi通信等功能。系统上电初始化后读取按键值、温湿等数据,并在OLED屏上显示,选择手动/自动/定时/远程模式后,单片机对各设定值与当前值进行数比对,根据目标设定输出PWM占空比,并根据水位和浊度数据比对结果判断是否进行蜂鸣器报警关断加湿。其中在远程控制模式下,单片机通过串口通信接收云端数据,并根据该数据设定目标输出值,系统运行流程如图3所示。
2.2按键与OLED显示模块程序设计
OLED屏幕每个像素与SSD1306显存点阵一一对应,所以单片机对SSD1306芯片写入数据或命令即可实现屏幕在相应点的显示。显示的汉字通过字模生成软件生成,把文字生成的代码放入OLED的字库里,因为汉字是16位长度,而SSD1306显存1页是8位长度,所以汉字分上下两部分,分别写入显存第一页和第二页,以此在主屏幕上拼出一个完整汉字。需要显示几个汉字就在字库中循环检索几次。此外OLED程序函数中需包含初始化、坐标设置、清屏等基础操作函数。通过调用这些函数完成屏幕对数据的显示。 图3 系统运行流程
按键模块主要设计是,通过按键扫描函数KEY_Scan(),判断有无按键按下,当有按键按下延时10 ms去除抖动,之后识别哪个键按下,采集按键值保存于key_value中,根据key_value值寻找程序入口,执行程序,完成该次按键操作。按键设置支持连续按设置优先级k0>k1>k2>k3,所有按键设置弹起时为高电平,按下时为低电平。
按键功能如下: (1) k0配网按键: 系统初始化后按下k0,ESP8266进入待连接状态。
(2) k1模式切换按键: K1按下按键值为2模式切换,按压一次sys_mode值(模式值)加1,可切换四种模式(手动、自动、定时、远程模式,分别对应sys_mode的0、1、2、3超出范围后归0)。
(3) k2浊度与水位显示按键: 此页面可查看传感器采集到的浊度数据和水位数据。
(4) k3阈值等设置按键: 在浊度与水位按键k2按下后,再按下此按键进入时间与定时设定和阈值与单次按键增量设定选择界面,此时k2与k3分别为上换行键和下换行键,翻页到要选择的设置位置后k1为确认键,进入进行相应设置界面或退出此界面。
2.3数据采集与报警程序
DHT11温湿度传感器代码设计包括初始化、延时越过不稳定状态、读取数据、校验数据等步骤。水位传感器代码设计涉及设置阈值、读取水位信号、判断水位状态等。浊度传感代码包括光电信号采集、数据处理和浊度值计算等。在主程序中通过对该部分外设函数的调用,可实现相应传感器采集数据的显示和超出预设安全范围的报警。也可通过数据值对输出占空比进行设置。
2.5机智云程序
注册登录机智云账号,进入开发者中心创建产品,本设计所选用Wi Fi/移动网络方案,通信方式为WIFI,数据定长功耗低。创建好项目后根据设计需要创建数据点,选择读写类型和数据类型。本设计的数据点如图4所示。包含远程开关、温度、湿度、加湿器,和浊度数据标识符及数据类型。
图4 IOT云平台产品功能的数据点
在设计时用机智云自动生成MCU开发中必要代码。设备接入云端服务器后,接收云端和APP端发来的数据点等信息,通过协议帧格式发送到MCU端,MCU端将数据存到缓冲区,每隔一段时间对缓冲区抓包,抓包正确进行解析,推送到数据事件处理,并根据数据点事件执行相应逻辑。同样,单片机也通过协议栈帧格式将数据传给ESP8266模块后传至云端服务器,最后处理控制事件的相关代码。在本设计中创建了ctrol写等类型数据,根据这些类型数据完成相应的控制。
最后把gizwits串口协议移植到stm32单片机上,并通过固件烧录工具把固件库烧写入ESP8266模块中。移植烧写完成后验证设备端与Demo APP能否正常工作,将设备与手机处于同一局域网下,进入app选择一键配网(使用2.4 G频道WiFi网络配网),选择乐鑫模组,按下配网按键,配网完成后可通过手机看到测得的各数据,可选择远程控制的打开与关闭,打开时可滑动加湿器滑块控制加湿器功率。
结束语
本款基于STM32单片机的智能加湿器经过多环境测试,能够自由切换工作模式,并通过传感器可靠采集温湿度和水位信息。其WIFI模块支持信息云端上传,用户可通过手机实现实时监控和远程控制。水位和浊度传感器配合蜂鸣器实现缺水和水污浊报警,避免了干烧、过度加湿及喷出污浊水汽的问题,提升了安全性。该加湿器性价比高,功能丰富,市场前景广阔。
|