1. 项目概述:当传统衣柜遇上STM32
潮湿的衣柜总是让人头疼——发霉的皮衣、变味的羊毛衫、锈迹斑斑的金属配件。去年梅雨季,我收藏的一套西装就因此报废,这促使我开发了这套基于STM32F103的智能除湿防霉系统。核心思路很简单:实时监测衣柜内部环境,当湿度超标时自动启动除湿装置,并通过手机APP远程查看状态。
选择STM32F103C8T6作为主控,不仅因为其72MHz主频足够处理传感器数据,更看重其丰富的外设接口:ADC采集温湿度、PWM控制风扇转速、UART连接WiFi模块,一颗芯片就能搞定所有功能需求。实测下来,系统可将衣柜湿度稳定控制在55%RH以下,霉菌滋生问题得到根本解决。
2. 硬件设计:从传感器到执行机构
2.1 传感器选型与电路设计
DHT22是项目的"感知器官",相比DHT11精度更高(湿度±2%RH,温度±0.5℃),虽然价格贵3倍但物有所值。其单总线协议只需一个GPIO口,硬件连接非常简单:
c复制// 引脚定义
#define DHT22_PIN GPIO_PIN_0
#define DHT22_PORT GPIOA
// 初始化代码
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = DHT22_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(DHT22_PORT, &GPIO_InitStruct);
注意:DHT22每次读取间隔需≥2秒,否则数据可能异常。我在代码中加入了时间戳校验,避免频繁请求导致传感器发热。
2.2 除湿执行机构
采用半导体制冷片(TEC1-12706)作为除湿核心,其工作原理是帕尔帖效应——通电后一面制冷一面发热,潮湿空气接触冷面会凝结成水珠。搭配5015离心风扇(PWM调速)和铝合金散热片,构成完整的除湿模组。
驱动电路需要特别注意:
- 制冷片工作电流高达6A,普通三极管无法承受,选用IRF3205 MOS管
- 反并联续流二极管防止断电时的反向电动势
- 散热风扇与制冷片联动控制,避免冷面结冰
c复制// PWM控制代码示例
TIM_OC_InitTypeDef sConfigOC = {0};
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 50; // 初始占空比50%
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
3. 软件架构:状态机与阈值控制
3.1 主程序流程图
系统采用有限状态机(FSM)设计,包含5个主要状态:
- 初始化状态:外设自检
- 监测状态:每3秒读取一次传感器
- 除湿状态:湿度>60%RH启动制冷片
- 报警状态:持续高湿度触发手机推送
- 休眠状态:夜间模式降低功耗
mermaid复制stateDiagram-v2
[*] --> 初始化
初始化 --> 监测: 自检通过
监测 --> 除湿: 湿度>60%
除湿 --> 监测: 湿度<55%
监测 --> 报警: 湿度>70%持续10min
报警 --> 监测: 用户确认
监测 --> 休眠: 23:00-6:00
休眠 --> 监测: 定时唤醒
3.2 自适应阈值算法
固定阈值在季节交替时效果不佳,我设计了动态调整算法:
- 基准值 = 过去24小时湿度平均值
- 触发阈值 = 基准值 + 15%RH(夏季) / +10%RH(冬季)
- 回差范围 = 5%RH
c复制// 动态阈值计算代码
float calculate_threshold(float history_avg) {
uint8_t season = get_current_season(); // 获取季节
float offset = (season == SUMMER) ? 0.15f : 0.10f;
return history_avg * (1 + offset);
}
4. 通信模块:让衣柜接入物联网
4.1 ESP8266 WiFi连接
选用ESP-01S模块,通过AT指令与STM32通信。关键配置步骤:
- 设置STA模式:AT+CWMODE=1
- 连接路由器:AT+CWJAP="SSID","password"
- 启用多连接:AT+CIPMUX=1
- 建立TCP连接:AT+CIPSTART=0,"TCP","api.thingspeak.com",80
踩坑记录:早期使用ESP8266的透传模式,发现数据包容易粘包。后来改用固定长度帧头+CRC校验的方案,可靠性大幅提升。
4.2 微信小程序开发
通过Thingspeak平台中转数据,小程序主要功能:
- 实时显示温湿度曲线
- 手动控制除湿开关
- 湿度阈值设置
- 异常推送通知
javascript复制// 小程序请求示例
wx.request({
url: 'https://api.thingspeak.com/channels/1234/feeds.json',
data: { results: 10 },
success(res) {
this.setData({ humidity: res.data.feeds[0].field1 })
}
})
5. 电源管理与低功耗优化
5.1 两级供电设计
系统包含两种供电方案:
- 主电路:12V/2A适配器给制冷片供电
- 控制电路:AMS1117-3.3稳压芯片为STM32供电
加入电流检测电路(INA219芯片)实时监控功耗,当检测到异常电流时立即切断MOS管。
5.2 休眠模式实践
夜间启用STM32的Stop模式,关键配置:
- 关闭所有外设时钟
- 保持RTC运行
- 配置WKUP引脚唤醒
- 唤醒后重建外设初始化
c复制// 进入Stop模式代码
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
// 唤醒后需要重新初始化时钟
SystemClock_Config();
实测功耗从正常工作的120mA降至35μA,电池续航延长20倍。
6. 制作工艺与安装要点
6.1 防冷凝处理
制冷片冷面温度可能低于露点,需采取以下措施:
- 冷面安装疏水涂层铝板
- 30度倾斜放置促进冷凝水下流
- 接水槽配备浮子开关,水满自动停机
6.2 衣柜内部布局
根据流体力学优化器件位置:
- 传感器安装在衣柜中部,远离门缝
- 进气口在下方,出气口在上方形成对流
- 制冷片与衣物保持10cm以上距离
- 控制盒固定在侧板外侧方便操作
7. 常见问题排查手册
7.1 传感器读数异常
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 湿度显示99% | 传感器接触不良 | 检查连接线,重焊引脚 |
| 温度值固定 | 时序不符合要求 | 调整延时应答时间 |
| 数据全零 | 电源电压不足 | 确认3.3V供电稳定 |
7.2 制冷片不工作
- 检查MOS管栅极电压是否>4V
- 测量制冷片两端电阻(正常约2Ω)
- 确认散热风扇正常运转
- 排查H桥驱动电路二极管是否击穿
8. 项目优化方向
在实际使用三个月后,发现几个待改进点:
- 增加甲醛传感器监测新家具挥发
- 改用PID算法精确控制制冷功率
- 添加离线语音控制功能
- 太阳能供电方案可行性研究
这套系统材料成本约200元,但相比市面动辄上千的电子防潮箱,不仅性价比突出,更关键的是可以根据具体衣柜尺寸定制风道设计。最近帮朋友改造了他的古董衣柜,加入湿度记录功能后,终于找到了他珍藏邮票发霉的真正原因——每天早上的热水蒸汽通过衣柜背板缝隙渗入。
