若该文为原创文章,转载请注明原文出处。

一、引言

随着人们对健康生活的日益重视,消毒柜已成为家庭和商业场所的必备电器。传统的消毒柜功能单一,缺乏智能化和远程控制能力。本设计旨在开发一款基于STM32微控制器的智能消毒柜控制系统,集成了自动感应、定时控制、语音交互、远程监控等多种智能化功能,旨在提升用户体验和消毒管理的便捷性与安全性。

二、系统总体设计

(一)系统架构

系统采用“状态感知-智能决策-多模控制-云端互联”的架构。

  1. 感知层:由红外传感器(检测门状态)、DS1302(提供精确时间)组成,负责采集系统状态信息。

  2. 决策层:以STM32F103C8T6为核心,处理传感器数据,执行核心控制逻辑(如安全互锁)。

  3. 执行层:包括SG90舵机(模拟门开关)、继电器模块(控制紫外灯)、语音合成模块(状态播报),执行控制器指令。

  4. 交互层:包括OLED显示屏、按键、语音识别模块(LD3320/ASRPRO),提供丰富的人机交互方式。

  5. 云平台层:通过ESP8266 WiFi模块连接至云平台,实现手机APP的远程监控与控制。

(二)功能模块划分

  1. 安全控制模块:红外传感器状态监测与消毒安全互锁逻辑。

  2. 定时任务模块:基于DS1302的定时消毒功能管理。

  3. 多模态控制模块:响应按键、语音、APP三种控制指令。

  4. 状态显示与播报模块:OLED状态信息显示与语音播报。

  5. 通信模块:管理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电源由继电器控制,强弱电必须物理隔离并做好绝缘保护

核心控制逻辑说明

  1. 安全互锁逻辑(最重要)

    • 条件: if (消毒状态 == 正在进行) && (红外传感器 == 检测到开门)

    • 动作: STM32立即控制继电器断开(关闭紫外灯),并通过语音和OLED提示“消毒中断,门已打开”。

  2. 消毒流程逻辑

    • 启动条件: 收到来自按键、APP或语音的“开始消毒”指令,且门状态为关闭

    • 动作: STM32控制继电器吸合,开启紫外灯,并在OLED上显示倒计时。

    • 结束条件: 定时时间到 / 收到停止指令 / 门被打开(安全互锁)。

    • 动作: STM32控制继电器断开,关闭紫外灯,并发送“消毒完成”提示。

  3. 门控制逻辑

    • 开门条件: 收到开门指令(按键/APP/语音),且消毒未进行

    • 动作: STM32输出PWM驱动舵机旋转至开门角度。

    • 关门条件: 收到关门指令或消毒启动指令(会自动先检查门是否关好)。

关键设计注意事项

  1. 强弱电隔离: 控制220V紫外灯的电路必须与低压的MCU控制电路通过继电器进行完全隔离。布线时强弱电要分开,裸露部分必须做好绝缘处理,防止触电危险。

  2. 紫外灯安全: 务必确保安全互锁功能的绝对可靠,防止紫外线泄漏对人体造成伤害。可以考虑增加冗余传感器(如两个红外传感器)提高可靠性。

  3. 语音识别优化: LD3320等模块需在安静环境下使用,识别关键词要选择吐字清晰、不易混淆的词语,如“小杜小杜,打开消毒柜”。

  4. 功耗考虑: 紫外灯功率较大,系统设计时需考虑电源的带载能力。如果采用电池供电,需做低功耗设计,但通常消毒柜为插电设备。

四、软件设计与实现

(一)开发环境搭建

  1. IDE:STM32CubeIDE。

  2. :使用HAL库。需自行添加OLED、DS1302、LD3320/ASRPRO、SYN6288的驱动代码库。

  3. 云平台:选择阿里云物联网平台,使用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(&current_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(&current_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); // 打开紫外灯
    // 启动一个定时器中断,用于倒计时
}

五、系统测试与优化

(一)测试方案

  1. 功能测试

    • 安全互锁测试:在消毒过程中强行模拟开门,测试紫外灯是否立即关闭并报警。

    • 多模式控制测试:分别使用按键、语音、APP进行开门、关门、开始消毒、设置定时的操作,验证功能正确性。

    • 定时功能测试:设置一个不久的将来时间,观察是否准时启动消毒。

    • 显示与播报测试:观察所有状态下的OLED显示内容和语音提示是否正确。

  2. 性能与安全测试

    • 压力测试:模拟频繁的开关门和控制指令,测试系统稳定性。

    • 紫外灯安全测试:确保在任何异常情况下(如断电后重启),紫外灯都处于默认关闭状态,且门打开时绝不启动。

优化方向

  • 功耗优化:在空闲时,让STM32和部分模块进入睡眠模式。

  • OTA远程升级:通过云平台实现固件的远程无线升级,方便功能迭代。

  • 消毒日志:增加EEPROM存储消毒记录(时间、时长),便于用户查看历史。

  • 多重安全保护:增加电流检测模块,监测紫外灯工作是否正常;设计物理防紫外泄漏结构。

六、结论与展望

(一)未来展望

本系统成功设计了一个安全、智能、交互方式丰富的消毒柜控制系统原型。未来可从以下方面进行深化:

  1. 多功能集成:集成臭氧发生器或高温消毒模式,形成多种消毒方式组合,并通过传感器反馈实现闭环控制,保证消毒效果。

  2. 智能感应消毒:增加重量传感器或RFID标签识别,实现“放入待消毒物品后自动建议消毒”或“识别餐具类型自动匹配消毒程序”的功能。

  3. 家居互联:通过云平台或本地协议(如蓝牙Mesh)与其他智能家居设备联动,如与智能碗柜联动,消毒完成后自动打开碗柜通风。

  4. 产品化设计:优化工业设计,将控制系统完美嵌入消毒柜产品中,完成安规认证,推向市场。

如有侵权,或需要完整代码,请及时联系博主。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐