1. 项目背景与需求分析
每次洗完澡想照镜子,总要先擦半天水雾?浴室灯光太暗看不清面部细节?这些困扰我多年的问题,促使我动手开发了这款智能防雾镜。作为电子工程专业的学生,我决定用STC89C52单片机为核心,打造一个集防雾、照明、音乐功能于一体的智能镜面系统。
传统防雾方案主要有三种:化学涂层容易失效,需要定期维护;通风除雾效果受环境限制;电热膜方案能耗较高。经过实测对比,我选择了PTC加热片方案,配合温湿度传感器实现按需加热,既保证效果又节能。系统主要解决三大痛点:
- 镜面起雾影响使用(通过DHT11检测湿度自动加热)
- 浴室光照不足(光敏电阻+人体感应自动补光)
- 使用过程单调(DFPlayer模块提供背景音乐)
2. 硬件设计方案
2.1 核心器件选型
主控芯片对比:
- STC89C52RC(最终选择)
- 优势:8位51内核,12MHz主频,8KB Flash,成本仅6元
- 劣势:无硬件I2C,需模拟时序
- STM32F103C8T6(备选)
- 优势:72MHz Cortex-M3,硬件资源丰富
- 超预算(约15元)
温湿度检测方案:
- DHT11 vs SHT30实测对比
- DHT11:±5%湿度精度,2s响应,3元成本
- SHT30:±3%湿度精度,0.5s响应,18元成本
- 选择依据:浴室环境变化缓慢,DHT11性价比更高
加热模块选型:
| 类型 | 功率 | 升温速度 | 安全性 | 成本 |
|---|---|---|---|---|
| 电热膜 | 15W/m² | 较慢 | 优 | 高 |
| PTC加热片 | 25W | 快 | 良 | 中 |
| 电阻丝 | 30W | 最快 | 差 | 低 |
最终选用25W PTC加热片,配合MOS管(IRF540N)进行PWM控温,实测可在90秒内消除标准浴室镜(40×60cm)的雾气。
2.2 电路设计要点
主控电路:
- 添加AMS1117-3.3V为传感器供电
- 复位电路采用10kΩ电阻+10μF电容组合
- 晶振选用12MHz+22pF负载电容
加热驱动电路:
c复制// PWM控制代码示例
void PWM_Init(uint freq) {
TMOD &= 0xF0; // 定时器0模式1
TH0 = (65536 - (12000000/12)/freq) >> 8;
TL0 = (65536 - (12000000/12)/freq) & 0xFF;
TR0 = 1;
ET0 = 1;
EA = 1;
}
重要提示:加热片必须与镜面保持5mm以上间距,避免局部过热导致玻璃破裂。我在初期测试中就因贴合过紧损坏过一面镜子。
3. 软件实现细节
3.1 主程序流程图
plaintext复制开始
↓
初始化外设(I/O、定时器、UART)
↓
读取DHT11数据 → [湿度>阈值?] → 启动加热
↓
读取光敏电阻 → [光照<阈值且有人?] → 开启LED
↓
检测触摸按键 → [有操作?] → 执行音乐控制
↓
(循环)
3.2 关键算法实现
防雾控制策略:
- 当湿度>75%RH时启动加热
- 采用PID算法动态调整PWM占空比
- 温度上限设定为45℃(防止烫伤)
c复制// 简化版PID控制
uint8_t PID_Control(float current, float target) {
static float errSum = 0, lastErr = 0;
float err = target - current;
errSum += err;
float dErr = err - lastErr;
lastErr = err;
float output = Kp*err + Ki*errSum + Kd*dErr;
return (uint8_t)(output > 100 ? 100 : output);
}
音乐播放实现:
- 使用DFPlayer Mini模块
- 通过串口发送控制指令:
- 0x7E 0xFF 0x06 0x12 0x00 0x00 0xFE 0xE6 (播放指令)
- 支持文件夹管理(01/音乐文件.mp3)
4. 实测效果与优化
4.1 性能测试数据
防雾效果测试(室温26℃):
| 初始湿度 | 加热时间 | 最终温度 | 功耗 |
|---|---|---|---|
| 80%RH | 72s | 42℃ | 18Wh |
| 85%RH | 94s | 45℃ | 23Wh |
| 90%RH | 118s | 45℃ | 28Wh |
光照触发测试:
- 触发阈值:<50 Lux
- 响应延迟:<0.5s
- LED亮度:300lm(相当于5W LED灯泡)
4.2 常见问题解决
-
DHT11读数不稳定
- 对策:增加10kΩ上拉电阻
- 修改为每次读取3次取中值
-
MP3模块无响应
- 检查要点:
- 供电是否≥3.6V
- 串口波特率是否为9600
- 音频文件是否为MP3格式
- 检查要点:
-
加热片温度不均
- 解决方案:
- 改用蛇形走线布局
- 增加铝基板导热
- 解决方案:
5. 进阶改进方向
-
低功耗优化
- 改用STM32L系列MCU
- 增加人体存在检测(毫米波雷达)
-
智能联动
- 通过ESP8266接入HomeAssistant
- 实现手机APP控制
-
结构优化
- 3D打印防水外壳
- 采用超薄导光板
这个项目从构思到完成历时两个月,期间最大的收获是认识到硬件开发中"细节决定成败"。比如最初没考虑加热片的热膨胀系数,导致镜子产生细微裂纹。建议后来者在类似项目中一定要做足环境测试,浴室环境对电子设备的考验远超实验室条件。