1. 引言
厨房作为家庭生活中频繁使用的空间,其安全问题一直备受关注。由于烹饪过程中容易出现明火、烟雾以及高温等情况,厨房成为了家庭中安全隐患发生率较高的区域。传统的厨房安全防护措施往往依赖于人工监管,存在实时性差、响应不及时等不足[1]。随着物联网技术的快速发展,借助智能硬件实现厨房环境的实时监控和远程管理,已成为提升家庭安全水平的有效途径。
针对厨房安全监测需求,本文设计并实现了一套基于STM32单片机的智能监控系统[2]。系统集成了MQ-2烟雾传感器和DHT11温湿度传感器,用于精准感知厨房环境中的烟雾浓度与温湿度变化。同时,借助ESP8266 WiFi模块实现数据的无线传输,将采集到的环境数据上传至阿里云平台,并通过MQTT协议进行高效的数据通信。用户可通过配套的IoTStudio平台与手机终端实时查看厨房状况,及时掌握安全动态,实现对潜在风险的提前预警与干预。
本文集成了感知、传输、处理与可视化多层功能模块,充分发挥了物联网在家庭安全中的应用优势,为构建智能、安全的厨房环境提供了可行性解决方案。
2. 硬件设计
2.1. 总体硬件设计
本文选用STM32F103C8T6型号微处理器作为主控芯片,实现各功能模块的协调控制与数据处理。具体硬件连接设计如下:主控芯片的PA5引脚与MQ-2烟雾浓度传感器模块的DATA引脚相连,用于接收甲烷浓度(以PPM为单位)相关数据;PA1引脚与DHT11温湿度传感器的DO引脚连接,实现温湿度信息的采集;无线通信方面,WIFI模块通过单片机的USART1接口实现连接,PA9和PA10引脚分别对应ESP8266模块的RX和TX引脚,完成串口通信功能。系统总体硬件连接关系如图1所示。
2.2. 系统框架构建
“基于STM32的智能厨房检测系统”主要由温湿度检测模块、烟雾检测模块、ESP8266无线通信模块、蜂鸣器模块等组成。整体架构采用感知层、网络层与应用层相结合的三层结构设计。其中,温湿度检测模块与烟雾检测模块构成系统的感知层,负责环境数据的采集;ESP8266模块作为系统的网络层,承担数据传输与网络通信功能;阿里云平台则作为系统的应用层,实现数据的远程存储与管理。具体系统三层架构如图2所示。
Figure 1. System overall hardware connection diagram
图1. 系统总体硬件连接图
Figure 2. System framework diagram
图2. 系统框架图
各模块功能具体描述如下:
温湿度检测模块:通过DHT11传感器采集环境温度与湿度数据,并采用特定电平时序将数字信号传输至MCU进行处理。
烟雾检测模块:利用MQ-2传感器检测空气中烟雾或甲烷浓度,其输出为模拟电压信号,经单片机内置的ADC模块采样并转换为数字信号后传输至MCU。
蜂鸣器模块:系统在检测到甲烷浓度(PPM值)超过设定阈值时,驱动蜂鸣器发出声响,实现超标报警功能。
ESP8266无线通信模块:MCU对采集到的环境数据进行处理后,通过ESP8266模块采用串口通信方式将数据上传至阿里云物联网平台。
MQTT服务器:部署于阿里云平台,用于接收来自MCU的环境监测数据,并将数据推送至移动端应用,实现远程监控。
2.3. 通信模块硬件设计
通信模块选用ESP8266,该模块内部含有CH340电路(如图3所示)可提供串口烧录固件包。ESP8266将其内部电路设计完成后预留出RX、TX、VCC和GND等引脚来与其他各种模块进行连接。ESP8266模块的信息如表1所示:
Table 1. ESP8266 parameter indicators
表1. ESP8266参数指标
参数指标 |
介绍 |
价格 |
价格低,成本小,对每个开发人员十分友好。 |
处理器 |
本模块使用了32位处理器,与本次所选芯片字长相等。 |
传输距离 |
搭载PCB天线,经过匹配距离做到空旷400米左右简单易用 |
模式 |
既可以设置为AP模式,也可以用作SAT站点,还可以两种模式共存 |
首先单片机通过串口向ESP8266发送AT + MQTTCLEAN = 0和AT + CWQAP指令进行初始化;其次再发送AT指令开始连接家庭或个人热点;然后再发送AT + MQTTUSERCFG指令进行本地配置,其次通过AT + MQTTCONN指令连接阿里云服务器;最后通过AT + MQTTSUB指令订阅主题后便可以通过AT + MQTTPUB指令发布信息。通信流程如图4所示。
Figure 3. CH340 download circuit inside ESP8266 module
图3. ESP8266模块内部CH340下载电路
Figure 4. Communication framework
图4. 通信框架
2.4. 主控芯片介绍
STM32f103c8t6芯片的内存采用64 KB或128 KB闪存程序内存,最高20 KB静态随机存取存储器,CPU主频最高可工作在72 MHz [3]。此外,其指令格式采用RISC架构,其每条指令长度相等,控制器采用硬布线控制,指令字长与系统字长相等以便快速取址,该芯片基本参数如表2所示。
除此之外,该型号芯片有40个引脚,包括,晶振的输入/输出引脚OSCIN/OSCOUT、复位引脚RESET、多组电源引脚以及三组通用输入/输出引脚PA_x,PB_x,PC_x(其中x为0~15任意整数)等。芯片的原理图如图5所示。
Table 2. Basic parameters of STM32F103C8T6
表2. STM32F103C8T6基本参数
参数指标 |
介绍 |
内核 |
ARM Cortex-M3 |
SRAM存储器容量 |
20 KB |
外设接口 |
USB、SPI、I2C、CAN、USART等 |
工作电压 |
2 V至3.6 V |
工作温度 |
−40℃至85℃ |
系统时钟 |
内部8 MHz时钟HSI最高可达64 MHz 外部8 MHz时钟HSE最高可达72 MHz |
Figure 5. STM32F103C8T6 chip schematic
图5. STM32F103C8T6芯片原理图
2.5. 传感器硬件设计
1) 气体传感器设计
MQ-2烟雾浓度传感器的工作原理基于气体分子与传感器表面敏感材料的化学反应。当空气中一氧化碳、甲烷、氟利昂等有害气体浓度上升时,这些气体分子会与传感器内部的半导体材料(如氧化锡,SnO2)发生反应,导致表面电子密度变化[4]。这些反应引起传感器表面电导率的变化,从而改变传感器的电阻值。
具体来说,传感器的加热元件使得敏感层处于高温状态,当有害气体分子接触到敏感层时,气体分子与表面吸附的氧发生反应,产生电子迁移,进而引起电阻的变化。该电阻变化通过传感器内部电路转换为电压信号[5]。电压信号通过预留引脚传输给单片机,单片机根据接收到的电压变化值,判断空气中有害气体的浓度,并进行相应的报警或监测(如图6所示)。
通过这一工作原理,MQ-2传感器能够灵敏地响应空气中的多种有害气体浓度变化,为气体泄漏监测、空气质量检测等应用提供有效的数据支持。
Figure 6. Internal circuit diagram of smoke sensor
图6. 烟雾传感器内部电路图
MQ-2烟雾浓度传感器模块拥有4个引脚,如图7中标注的1、2、3、4所示。该模块的1端口对应的是STM32的PA5引脚,内部接的是ADC1/ADC2 (ADC1和ADC2共用一个通道)通道,本项目使用的是ADC1通道,所以要提前启用PA5端口和ADC1时钟,将PA5端口设置为模拟输入,使能ADC的时钟,设置PA5的输入方式,ADC1在此需要复位,最后初始化ADC1。烟雾传感器的引脚接线图如图7所示:
Figure 7. Smoke sensor pin wiring diagram
图7. 烟雾传感器引脚接线图
2) 温湿度传感器设计
温湿度传感器采用DHT11模块。该模块有模拟/数字两种输出信号,采集温湿度所需要的是传输其数字信号。DHT11规定当电平拉高实现小于28 ms时为比特0,电平拉高20 ms~70 ms时为比特1 [5]。当MCU需要其数据时,它会通过其特定的电平时序来完成数据的传输[6],如图8所示。
Figure 8. DHT11 timing diagram
图8. DHT11时序图
DHT11模块拥有3个引脚,在图9中标注为1、2、3,分别对应为DATA、VCC、GND。该模块的DATA引脚与单片机的PA1引脚相连接,传输数字信号。值得注意的是,在使用该模块时,要十分注意该模块的时序,每一步的时序必须与模块说明一一对应,一旦发生时序错误将导致不可预料的错误。
Figure 9. DHT11 connection diagram
图9. DHT11连线图
3. 系统软件设计
3.1. 整体软件设计
本文采用模块化编程设计,将温湿度模块的软件代码单独封装在DHT11.c的文件里面,对外有DHT11.h的接口文件;MQ-2温湿度传感器封装ADC.c文件里,ESP8266.c文件用来封装实现一些WIFI模块初始化和联网、AT测试等功能。aliyun.c文件则用来实现一些连接MQTT服务器以及数据流动的功能。软件程序执行流程图如图10所示,软件配置连接阿里云平台核心代码如下:
Figure 10. Software program execution flow chart
图10. 软件程序执行流程图
memset(&Ali_Buf,0,sizeof(_AliIOT_Connect)); sprintf(Ali_Buf.ClientID,"%s|securemode=3,signmethod=hmacsha1|",Ali_DeviceName); Ali_Buf.ClientID_len = strlen(Ali_Buf.ClientID); //获取ClientID sprintf(Ali_Buf.UserName,"%s&%s",Ali_DeviceName,Ali_ProductKey); / Ali_Buf.UserName_len = strlen(Ali_Buf.UserName); /获取UserName /*********获取PassWord*****************************/ char Temp_buf[128] = "\0"; sprintf(Temp_buf,"clientId%sdeviceName%sproductKey%s",Ali_DeviceName,Ali_DeviceName,Ali_ProductKey); utils_hmac_sha1(Temp_buf,strlen(Temp_buf),Ali_Buf.PassWord,Ali_DeviceSecret,strlen(Ali_DeviceSecret)); Ali_Buf.PassWord_len = strlen(Ali_Buf.PassWord); //获取服务器IP地址、端口号 sprintf(Ali_Buf.ServerIP,"%s.iot-as-mqtt.cn-shanghai.aliyuncs.com",Ali_ProductKey); //构建服务器域名 Ali_Buf.ServerPort = 1883; //Topic列表 sprintf(Ali_Buf.topic_post,"/sys/%s/%s/thing/event/property/post",Ali_ProductKey,Ali_DeviceName); sprintf(Ali_Buf.topic_post_reply,"/sys/%s/%s/thing/event/property/post_reply",Ali_ProductKey,Ali_DeviceName); sprintf(Ali_Buf.topic_set,"/sys/%s/%s/thing/service/property/set",Ali_ProductKey,Ali_DeviceName); |
3.2. 传感器软件设计
1) 温湿度传感器软件设计
DHT11温湿度传感器在上电完成初始化后,便会开始采集当前环境的温度与湿度数据。其采用单总线协议与单片机(MCU)进行数据通信,通信过程依赖严格定义的电平时序来确保数据的正确传输[7] [8]。由于DHT11仅有一根数据线(DATA),每次仅传输1位数据,单片机通过检测数据线高电平持续的时间来判定接收的是逻辑‘0’还是逻辑‘1’。
具体的通信时序流程如下:
(1) 起始信号
MCU首先将DATA引脚拉低,保持低电平时间不小于18 ms,以通知DHT11传感器准备传输数据。
(2) 主机释放总线
MCU随后将DATA引脚拉高,并保持20 μs至40 μs,等待DHT11响应。
(3) 传感器响应
DHT11检测到MCU的起始信号后,会先将DATA引脚拉低80 μs,然后拉高80 μs,以回应MCU,表明传感器已准备好发送数据。
(4) 数据传输开始
接下来,DHT11再次将DATA引脚拉低50 μs,作为数据传输的开始标志。
(5) 数据位传输
DHT11逐位发送40位数据(包含湿度整数、湿度小数、温度整数、温度小数和校验和)。每一位数据的传输均以50 μs低电平起始。若紧随其后的高电平持续时间为26 μs~28 μs,则该位为逻辑‘0’;若高电平持续时间大于70 μs,则判定该位为逻辑‘1’。
(6) 通信结束
数据传输完毕后,DHT11释放总线,MCU可完成数据解析与校验。
2) 气体传感器软件设计
MQ-2型气敏元件对不同种类、不同浓度的气体有不同的电阻值[9]。因此厂商在不同情况下给出了一氧化碳、酒精、空气等不同情况下的PPM和Rs/R0的函数关系曲线,如图11所示:
Figure 11. Functional relationship between PPM of some particles in MQ-2 air and Rs/R0
图11. MQ-2空气中部分颗粒PPM与Rs/R0的函数关系
由于本文主要是对于空气中的甲烷浓度的检测,故只需选用甲烷的PPM和其电阻Rs/R0的关系曲线图做出大致函数映射关系;根据上面图片的信息可得出甲烷的PPM与Rs/R0的映射关系如表3所示:
Table 3. Functional relationship between methane PPM and Rs/R0
表3. 甲烷PPM与Rs/R0的函数关系
PPM |
200 |
500 |
800 |
1000 |
1600 |
2000 |
5000 |
10,000 |
Rs/R0 |
5 |
4 |
3.5 |
3.2 |
2.8 |
2.5 |
1.8 |
1.5 |
Rs:MQ-2模块在不同的浓度和空气环境下的电阻值。
R0:MQ-2在纯净的空气中的电阻值。
根据甲烷PPM与Rs/R0的函数关系,再由最小二乘法拟合得出适合的计算PPM与Rs/R0的数学模型。
最后将拟合出来的结果通过程序表现出来,执行流程如图12所示。
Figure 12. Smoke sensor execution flow chart
图12. 烟雾传感器执行流程图
4. MQTT通信测试
首先通过AT + CWJAP指令连接手机热点,在电脑端串口测试如图13所示:
Figure 13. WIFI module networking test
图13. WIFI模块联网测试
其次通过提前烧录好的MQTT固件包,进行连接MQTT服务器之前的本地配置;由于逗号在通过串口发送时不能被识别,故需要添加转义字符‘\’来实现透明传输。本地配置如图14所示:
Figure 14. MQTT communication connection local configuration test
图14. MQTT通信连接本地配置测试
当进行完本地配置之后,便可以给ESP8266设置MQTT服务器端URL以及端口号,通过之前的本地配置来连接服务器,从而完成服务器与本地的映射。如图15所示:
Figure 15. Connection server command test
图15. 连接服务器指令测试
当通过串口发送AT指令后服务器端界面显示当前在线设备为1,此时便与服务器完成连接。如图16所示:
Figure 16. MQTT server interface
图16. MQTT服务器端界面
与服务器建立连接之后,通过MQTT通信协议的发布–订阅模式向服务器端订阅一个发送消息的主题,当订阅主题的消息通过ESP8266发送之后,单片机便可以接收到任何一个用户或服务器端在这个主题上面发布的消息。如图17所示:
Figure 17. MQTT subscription topic
图17. MQTT订阅主题
这里通过之前订阅的消息向服务器端发送了‘hello’的信息,在串口界面显示发送成功返回OK。而在服务器端的日志文件也可以查看到刚刚从串口发送过来的数据。如图18本地端和图19服务器端所示:
Figure 18. Sending data test
图18. 发送数据测试
Figure 19. Server receiving data test
图19. 服务器端接收数据测试
5. 总结
本文围绕家庭厨房安全监控的实际需求,设计并实现了一套基于STM32单片机的智能监控系统。通过集成MQ-2烟雾传感器和DHT11温湿度传感器,系统能够实时采集厨房环境中的关键数据,并借助ESP8266模块实现无线数据传输。利用阿里云MQTT服务器和IoTStudio平台,完成了数据的云端处理与可视化展示,使用户能够通过手机终端随时掌握厨房安全状况。
实验结果表明,该系统具有数据传输稳定、响应速度快、监测准确等优点,能够有效提升厨房安全监控的智能化水平。未来,系统可进一步扩展更多传感器模块与控制功能,实现对厨房用电、燃气泄漏等更多安全因素的全面监控,提升家庭整体安全保障能力。
附 录
STM32最小系统电路图
Figure S1. Download circuit
图S1. 下载电路
Figure S2. Boot circuit
图S2. Boot电路
Figure S3. Reset circuit
图S3. 复位电路
Figure S4. Clock circuit
图S4. 时钟电路
NOTES
*通讯作者。