1. 项目概述
这个智能衣柜/鞋柜系统是我去年为一个高端家居客户设计的集成解决方案。它不仅仅是个简单的照明装置,而是融合了环境监测、自动控制和健康管理的智能家居终端。在实际使用中,系统能够自动感知用户靠近、监测柜内环境质量,并根据需要启动除湿或消毒功能。
整套方案基于STM32F103C8T6单片机开发,这个型号的选择经过了仔细考量:它具备足够的GPIO接口来连接各类传感器,72MHz的主频足以处理多任务逻辑,而且价格控制在合理范围内。最重要的是,ST的生态完善,开发工具链成熟,非常适合这类中小型嵌入式项目。
2. 核心功能解析
2.1 红外感应照明系统
人体感应模块选用的是HC-SR501红外传感器,这是经过多次实测后的选择。它的探测角度达到120度,探测距离可调(我们设置为1.5米),非常适合衣柜这种狭小空间。传感器输出直接连接单片机的PA0引脚,通过外部中断方式检测信号变化。
照明部分采用LED灯带,通过MOS管驱动。这里有个关键设计点:我们实现了渐亮渐暗效果。不是简单的开关控制,而是通过PWM调光,让灯光在检测到人体后3秒内从0%渐变到100%,离开后15秒内逐渐熄灭。这个细节大大提升了使用体验。
实际调试中发现,直接开关LED会导致视觉不适,特别是夜间使用时。PWM调光方案虽然增加了代码复杂度,但用户体验提升明显。
2.2 空气质量监测系统
柜内环境监测包含三个维度:
- 温湿度:使用DHT22传感器,精度±0.5℃,±2%RH
- 挥发性有机物:采用MQ-135气体传感器
- 颗粒物:使用激光PM2.5传感器(定制小型化版本)
传感器数据通过ADC采集,每10秒采样一次,采用滑动平均滤波算法处理。当检测到湿度超过65%或TVOC超过0.5mg/m³时,系统会自动触发相应处理程序。
2.3 自动除湿系统
除湿模块采用半导体制冷片方案,相比传统压缩机方案,它的优势在于:
- 体积小,适合嵌入安装
- 无机械运动部件,静音且寿命长
- 功耗低(我们用的TEC1-12706最大功耗60W)
除湿逻辑采用PID控制算法:
- 当湿度>65%时启动
- 根据当前湿度与目标湿度(55%)的差值动态调节制冷功率
- 加入防结露保护,当温度接近露点时自动调整工作模式
2.4 紫外线消毒系统
消毒功能使用275nm波长的UVC LED,这是经过特别考虑的:
- 275nm对微生物的灭活效果最佳
- LED体积小,便于安装
- 相比汞灯更安全、寿命更长
安全措施包括:
- 门磁开关:柜门开启时立即关闭UV
- 定时控制:单次消毒不超过15分钟
- 人体检测:感应到人体存在时禁用UV
3. 硬件设计详解
3.1 主控电路设计
STM32最小系统包含:
- 8MHz晶振及负载电容
- 复位电路(10k上拉+0.1uF电容)
- 启动模式选择(BOOT0通过10k电阻接地)
- 稳压电路(AMS1117-3.3)
特别优化了PCB布局:
- 模拟和数字地分割
- 传感器接口集中在板子一侧
- 大电流走线加宽至1mm
3.2 传感器接口设计
各传感器连接方式:
| 传感器 | 接口类型 | 单片机引脚 | 备注 |
|---|---|---|---|
| HC-SR501 | 数字输入 | PA0 | 外部中断触发 |
| DHT22 | 单总线 | PA1 | 需上拉电阻4.7k |
| MQ-135 | ADC输入 | PA4 | 分压电路设计 |
| PM2.5 | UART | PA9/PA10 | 波特率9600 |
3.3 功率驱动设计
大电流设备驱动方案:
- LED灯带:
- 使用IRLZ44N MOSFET驱动
- 栅极串联100Ω电阻
- PWM频率设置为1kHz
- 半导体制冷片:
- 采用继电器控制(欧姆龙G5LE-1)
- 加入续流二极管保护
- 过零检测电路实现软启动
4. 软件架构实现
4.1 主程序流程
c复制void main() {
hardware_init();
timer_init();
adc_init();
pwm_init();
while(1) {
check_sensors();
process_environment_data();
control_actuators();
handle_ui();
}
}
4.2 关键算法实现
环境控制状态机:
c复制typedef enum {
IDLE,
HUMIDITY_HIGH,
AIR_POOR,
DISINFECTING,
ERROR
} SystemState;
void process_environment_data() {
static SystemState state = IDLE;
switch(state) {
case IDLE:
if(humidity > 65) state = HUMIDITY_HIGH;
else if(tvoc > 0.5 || pm25 > 75) state = AIR_POOR;
break;
case HUMIDITY_HIGH:
if(humidity < 55) state = IDLE;
else run_dehumidifier();
break;
// 其他状态处理...
}
}
4.3 低功耗优化
系统在无人体检测时进入低功耗模式:
- 关闭非必要外设
- 主频降至8MHz
- 使用停机模式(STOP mode)
- 通过外部中断唤醒
实测功耗:
- 活跃模式:85mA
- 低功耗模式:2.3mA
- 待机一年仅消耗约20Wh电能
5. 生产与安装要点
5.1 组装注意事项
- 传感器布局:
- 红外传感器避免正对光源
- 气体传感器要预留透气孔
- UV LED需均匀分布
- 线缆管理:
- 信号线与功率线分开走
- 使用屏蔽线连接模拟传感器
- 接插件采用防反插设计
5.2 现场调试步骤
- 传感器校准:
c复制// DHT22校准示例
void calibrate_dht() {
float sum=0;
for(int i=0; i<10; i++) {
sum += read_dht();
delay(1000);
}
offset = REF_VALUE - (sum/10);
}
- 阈值调整:
- 通过上位机工具实时调整
- 保存到EEPROM
- 提供恢复出厂设置功能
6. 常见问题解决
6.1 传感器异常排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 湿度读数不稳定 | 传感器结露 | 降低采样频率,增加通风 |
| 红外误触发 | 环境温度变化大 | 调整传感器灵敏度电位器 |
| PM2.5数值漂移 | 激光头污染 | 用棉签清洁传感器窗口 |
6.2 电磁兼容问题
遇到过的典型干扰案例:
-
继电器动作导致ADC读数异常
- 解决方法:在继电器线圈并联1N4007
- 增加ADC采样后的软件滤波
-
PWM调光引起红外传感器误触发
- 将PWM频率从500Hz调整到1kHz
- 在红外传感器电源端加入LC滤波
7. 扩展与定制建议
7.1 功能扩展方向
- 无线连接:
- 增加ESP-01S WiFi模块
- 实现手机APP控制
- 支持云端数据记录
- 智能联动:
- 通过RFID识别衣物
- 根据衣物材质调整环境参数
- 与家庭中央空调联动
7.2 定制开发要点
不同场景下的调整建议:
- 高湿度地区:
- 增强除湿功率
- 增加防霉程序
- 采用不锈钢外壳
- 高端鞋柜应用:
- 加入香薰模块
- 定制UV照射角度
- 增加鞋型识别
这个项目最让我自豪的是它的可靠性——客户反馈连续运行一年没有出现任何故障。关键在于我们坚持了"简单即可靠"的设计哲学,每个功能都经过至少200小时的老化测试。特别是在湿度控制方面,实际测试表明能将柜内湿度稳定控制在55%±3%的范围内,远超行业平均水平。