基于STM32的智能消毒柜控制系统设计
若该文为原创文章,转载请注明原文出处。
若该文为原创文章,转载请注明原文出处。
一、引言
随着人们对健康生活的日益重视,消毒柜已成为家庭和商业场所的必备电器。传统的消毒柜功能单一,缺乏智能化和远程控制能力。本设计旨在开发一款基于STM32微控制器的智能消毒柜控制系统,集成了自动感应、定时控制、语音交互、远程监控等多种智能化功能,旨在提升用户体验和消毒管理的便捷性与安全性。
二、系统总体设计
(一)系统架构
系统采用“状态感知-智能决策-多模控制-云端互联”的架构。
-
感知层:由红外传感器(检测门状态)、DS1302(提供精确时间)组成,负责采集系统状态信息。
-
决策层:以STM32F103C8T6为核心,处理传感器数据,执行核心控制逻辑(如安全互锁)。
-
执行层:包括SG90舵机(模拟门开关)、继电器模块(控制紫外灯)、语音合成模块(状态播报),执行控制器指令。
-
交互层:包括OLED显示屏、按键、语音识别模块(LD3320/ASRPRO),提供丰富的人机交互方式。
-
云平台层:通过ESP8266 WiFi模块连接至云平台,实现手机APP的远程监控与控制。
(二)功能模块划分
-
安全控制模块:红外传感器状态监测与消毒安全互锁逻辑。
-
定时任务模块:基于DS1302的定时消毒功能管理。
-
多模态控制模块:响应按键、语音、APP三种控制指令。
-
状态显示与播报模块:OLED状态信息显示与语音播报。
-
通信模块:管理WiFi连接,实现与云平台的数据同步。
三、硬件设计与实现
(一)系统硬件框架图

系统硬件配置与功能说明表
1. 主控单元
| 器件名称 | 推荐型号 | 接口 | 功能说明 |
|---|---|---|---|
| STM32单片机 | STM32F103C8T6 | - | 作为系统核心,负责处理所有传感器输入、执行逻辑判断、控制各执行器、以及与云平台和语音模块通信。 |
2. 传感器与输入单元
| 器件名称 | 推荐型号 | 接口 | 功能说明 |
|---|---|---|---|
| 红外传感器 | E18-D80NK | GPIO | 检测消毒柜门的开关状态。当有物体(门)遮挡时输出信号变化,STM32通过检测该GPIO电平判断门是处于打开还是关闭状态。核心安全功能:消毒时门若被打开,立即关闭紫外灯。 |
| 时钟模块 | DS1302 | SPI | 提供精确的实时时间,用于实现定时消毒功能(例如:设定每晚10点自动消毒)。带后备电池,断电后时间不丢失。 |
| 语音识别模块 | LD3320 | UART/GPIO | 接收语音指令(如“打开柜门”、“开始消毒”),通过串口或并口将识别结果(预设的特定编号)传递给STM32,STM32执行相应动作。 |
| 按键模块 | 轻触开关 | GPIO | 用于本地手动控制:开关门、强制启动/停止消毒、设置时间、选择模式等。 |
3. 执行器与输出单元
| 器件名称 | 推荐型号 | 接口 | 功能说明 |
|---|---|---|---|
| 舵机 | SG90 | PWM | 模拟柜门的开关动作。STM32通过输出不同占空比的PWM信号控制舵机旋转到0°(关门)、90°(开门) 等角度。 |
| 继电器模块 | 5V 1路继电器 | GPIO | 安全驱动紫外灯。STM32输出高/低电平控制继电器的通断,从而间接控制220V紫外灯的电源。重要提示:强电部分必须隔离,注意操作安全! |
| OLED显示屏 | SSD1306 | I²C | 显示系统状态(当前时间、消毒剩余时间、门状态)、工作模式(定时/手动/语音)、网络连接状态及报警信息等,提供清晰的人机交互界面。 |
4. 通信单元
| 器件名称 | 推荐型号 | 接口 | 功能说明 |
|---|---|---|---|
| WiFi模块 | ESP-01S | UART | 通过AT指令与STM32通信,将系统状态(门状态、消毒状态)上传到云平台,并接收从手机APP下发的所有控制指令(远程开关门、远程消毒、设置定时时间)。 |
5. 电源单元
| 器件名称 | 推荐规格 | 接口 | 功能说明 |
|---|---|---|---|
| 电源模块 | 5V/3A 开关电源 | DC接口 | 为整个控制系统(STM32、模块、舵机)提供稳定的5V电源。紫外灯部分的220V电源由继电器控制,强弱电必须物理隔离并做好绝缘保护。 |
核心控制逻辑说明
-
安全互锁逻辑(最重要):
-
条件:
if (消毒状态 == 正在进行) && (红外传感器 == 检测到开门) -
动作: STM32立即控制继电器断开(关闭紫外灯),并通过语音和OLED提示“消毒中断,门已打开”。
-
-
消毒流程逻辑:
-
启动条件: 收到来自按键、APP或语音的“开始消毒”指令,且门状态为关闭。
-
动作: STM32控制继电器吸合,开启紫外灯,并在OLED上显示倒计时。
-
结束条件: 定时时间到 / 收到停止指令 / 门被打开(安全互锁)。
-
动作: STM32控制继电器断开,关闭紫外灯,并发送“消毒完成”提示。
-
-
门控制逻辑:
-
开门条件: 收到开门指令(按键/APP/语音),且消毒未进行。
-
动作: STM32输出PWM驱动舵机旋转至开门角度。
-
关门条件: 收到关门指令或消毒启动指令(会自动先检查门是否关好)。
-
关键设计注意事项
-
强弱电隔离: 控制220V紫外灯的电路必须与低压的MCU控制电路通过继电器进行完全隔离。布线时强弱电要分开,裸露部分必须做好绝缘处理,防止触电危险。
-
紫外灯安全: 务必确保安全互锁功能的绝对可靠,防止紫外线泄漏对人体造成伤害。可以考虑增加冗余传感器(如两个红外传感器)提高可靠性。
-
语音识别优化: LD3320等模块需在安静环境下使用,识别关键词要选择吐字清晰、不易混淆的词语,如“小杜小杜,打开消毒柜”。
-
功耗考虑: 紫外灯功率较大,系统设计时需考虑电源的带载能力。如果采用电池供电,需做低功耗设计,但通常消毒柜为插电设备。
四、软件设计与实现
(一)开发环境搭建
-
IDE:STM32CubeIDE。
-
库:使用HAL库。需自行添加OLED、DS1302、LD3320/ASRPRO、SYN6288的驱动代码库。
-
云平台:选择阿里云物联网平台,使用MQTT协议接入。
(二)系统软件流程图

(三)代码片段(关键逻辑)
主循环核心逻辑与安全互锁
// main.c
// 定义系统状态变量
typedef enum {
STATE_IDLE_DOOR_CLOSED,
STATE_IDLE_DOOR_OPEN,
STATE_UV_CLEANING,
STATE_TIMER_SET
} SystemState_t;
SystemState_t current_state = STATE_IDLE_DOOR_CLOSED;
while (1) {
// 1. 读取传感器和时钟
door_status = HAL_GPIO_ReadPin(DOOR_SENSOR_GPIO_Port, DOOR_SENSOR_Pin);
DS1302_GetTime(¤t_time);
// 2. 核心安全逻辑:如果正在消毒且门被打开,立即停止
if (current_state == STATE_UV_CLEANING && door_status == DOOR_OPEN) {
HAL_GPIO_WritePin(UV_RELAY_GPIO_Port, UV_RELAY_Pin, GPIO_PIN_RESET); // 关闭紫外灯
current_state = STATE_IDLE_DOOR_OPEN;
SYN6288_Speak("警告,消毒过程中门已打开,已停止消毒!"); // 语音报警
}
// 3. 检查是否到达定时消毒时间
if (IsTimerUp(¤t_time, &set_time)) {
if (door_status == DOOR_CLOSED) { // 定时消毒必须门是关的
StartCleaning(); // 开始消毒
}
}
// 4. 处理各种控制指令
Process_Key(); // 按键处理
Process_Voice(); // 语音指令处理
Process_Cloud_Cmd(); // 云指令处理
// 5. 更新显示和上传状态
Update_OLED_Display(current_state, current_time, remaining_time);
Upload_Status_To_Cloud(current_state);
HAL_Delay(200);
}
控制指令处理函数示例
void Process_Voice(void) {
uint8_t voice_cmd = LD3320_GetResult(); // 获取识别到的关键词编号
switch(voice_cmd) {
case CMD_OPEN_DOOR:
if(current_state != STATE_UV_CLEANING) { // 消毒时不能开门
Servo_Open();
current_state = STATE_IDLE_DOOR_OPEN;
SYN6288_Speak("门已打开");
} else {
SYN6288_Speak("正在消毒,无法开门");
}
break;
case CMD_START_CLEAN:
if(door_status == DOOR_CLOSED) {
StartCleaning();
SYN6288_Speak("开始消毒");
} else {
SYN6288_Speak("请关门后再消毒");
}
break;
// ... 其他命令
}
}
void StartCleaning(void) {
current_state = STATE_UV_CLEANING;
remaining_time = CLEANING_DURATION; // 设置消毒倒计时
HAL_GPIO_WritePin(UV_RELAY_GPIO_Port, UV_RELAY_Pin, GPIO_PIN_SET); // 打开紫外灯
// 启动一个定时器中断,用于倒计时
}
五、系统测试与优化
(一)测试方案
-
功能测试:
-
安全互锁测试:在消毒过程中强行模拟开门,测试紫外灯是否立即关闭并报警。
-
多模式控制测试:分别使用按键、语音、APP进行开门、关门、开始消毒、设置定时的操作,验证功能正确性。
-
定时功能测试:设置一个不久的将来时间,观察是否准时启动消毒。
-
显示与播报测试:观察所有状态下的OLED显示内容和语音提示是否正确。
-
-
性能与安全测试:
-
压力测试:模拟频繁的开关门和控制指令,测试系统稳定性。
-
紫外灯安全测试:确保在任何异常情况下(如断电后重启),紫外灯都处于默认关闭状态,且门打开时绝不启动。
-
优化方向:
-
功耗优化:在空闲时,让STM32和部分模块进入睡眠模式。
-
OTA远程升级:通过云平台实现固件的远程无线升级,方便功能迭代。
-
消毒日志:增加EEPROM存储消毒记录(时间、时长),便于用户查看历史。
-
多重安全保护:增加电流检测模块,监测紫外灯工作是否正常;设计物理防紫外泄漏结构。
六、结论与展望
(一)未来展望
本系统成功设计了一个安全、智能、交互方式丰富的消毒柜控制系统原型。未来可从以下方面进行深化:
-
多功能集成:集成臭氧发生器或高温消毒模式,形成多种消毒方式组合,并通过传感器反馈实现闭环控制,保证消毒效果。
-
智能感应消毒:增加重量传感器或RFID标签识别,实现“放入待消毒物品后自动建议消毒”或“识别餐具类型自动匹配消毒程序”的功能。
-
家居互联:通过云平台或本地协议(如蓝牙Mesh)与其他智能家居设备联动,如与智能碗柜联动,消毒完成后自动打开碗柜通风。
-
产品化设计:优化工业设计,将控制系统完美嵌入消毒柜产品中,完成安规认证,推向市场。
如有侵权,或需要完整代码,请及时联系博主。
更多推荐



所有评论(0)