1. 项目概述
去年冬天帮朋友改造老式加湿器的经历让我意识到,市面上大多数基础型加湿器存在三个通病:湿度检测精度差、功耗控制不智能、缺乏远程控制能力。于是我用STM32F103C8T6开发板为核心,配合常见的温湿度传感器和继电器模块,搭建了一套可联网的智能加湿系统。这个方案最吸引人的地方在于,整套硬件成本可以控制在50元以内,却实现了商业级产品300元档位的核心功能。
2. 硬件选型与电路设计
2.1 核心控制器选型
选择STM32F103C8T6(俗称"蓝莓板")主要基于三点考量:
- 72MHz主频足够处理传感器数据并运行轻量级控制算法
- 内置12位ADC可满足SHT20传感器的精度需求
- 丰富的GPIO接口方便扩展WiFi模块和继电器
注意:市面上有些STM32开发板省略了外部晶振电路,建议选择带有8MHz外部晶振的版本,确保RTC时钟精度。
2.2 传感器模块对比测试
实测对比了三种常见传感器在加湿环境下的表现:
| 传感器型号 | 精度范围 | 响应时间 | 价格 | 防水性能 |
|---|---|---|---|---|
| DHT11 | ±5%RH | 2s | 5元 | 差 |
| SHT20 | ±3%RH | 1s | 15元 | 良好 |
| AM2302 | ±2%RH | 0.5s | 25元 | 优秀 |
最终选择SHT20作为折中方案,其I2C接口占用资源少,且自带防结露设计。实际接线时需要注意:
- SDA/SCL需接4.7kΩ上拉电阻
- VCC引脚建议通过LDO稳压到3.3V
- 传感器应远离超声波雾化片至少10cm
2.3 雾化驱动电路设计
采用5V继电器控制220V雾化片的设计,关键点在于:
- 光耦隔离:PC817隔离MCU与继电器线圈
- 续流二极管:在继电器线圈并联1N4007
- 安全间距:强电部分与其他电路保持3mm以上间距
实测电路工作时,继电器切换瞬间会产生约50mA的电流尖峰,建议在STM32的5V电源端并联100μF电解电容。
3. 软件系统实现
3.1 湿度控制算法
采用增量式PID算法实现湿度精准控制,核心代码片段:
c复制#define KP 0.8
#define KI 0.2
#define KD 0.1
float PID_Control(float target, float current) {
static float err_last = 0;
static float integral = 0;
float err = target - current;
integral += err;
float derivative = err - err_last;
err_last = err;
return KP*err + KI*integral + KD*derivative;
}
参数整定技巧:
- 先设KI=KD=0,增大KP直到出现小幅振荡
- 取振荡时KP值的60%作为最终KP
- KI值设为KP/10,KD值设为KP*2
3.2 低功耗模式实现
通过以下措施使待机功耗降至3mA以下:
- 关闭未用外设时钟
- 使用RTC唤醒替代定时器
- 传感器采样间隔从1s改为10s
c复制void Enter_StopMode(void) {
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 10, RTC_WAKEUPCLOCK_CK_SPRE_16BITS);
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
SystemClock_Config(); // 唤醒后需重新配置时钟
}
3.3 WiFi远程控制
选用ESP-01S模块通过AT指令与STM32通信,关键配置:
- 波特率统一为115200
- 启用TCP长连接心跳包
- 实现简单的JSON协议:
json复制{
"cmd": "set_humidity",
"value": 55
}
4. 系统集成与调试
4.1 结构设计要点
使用3D打印的外壳需要注意:
- 出雾口直径应大于雾化片直径的1.5倍
- 内部需设计导流槽避免结露
- 电子仓与水箱完全隔离
- 预留足够的散热孔(特别是继电器位置)
4.2 典型问题排查
-
雾化量小:
- 检查雾化片表面是否结垢(用白醋清洗)
- 测量驱动电压是否达到24V
- 确认水位高度在15-20mm之间
-
WiFi频繁断开:
- 在ESP模块电源端并联470μF电容
- 将天线远离金属部件
- 修改AT+CIPRECVMODE=1
-
湿度读数异常:
- 执行传感器复位命令(SHT20的软复位指令0xFE)
- 检查I2C线缆长度(建议<20cm)
- 避免阳光直射传感器
5. 功能扩展方向
已验证可行的升级方案:
- 增加PM2.5检测联动(使用攀藤PMS5003)
- 接入HomeAssistant实现语音控制
- 添加水位检测电路(光电式优于浮球式)
- 实现基于天气预报的预调节功能
实际使用中发现,将目标湿度设置在50-60%区间时,人体舒适度最佳,且能有效避免窗户结露。系统连续运行三个月后,雾化片可能出现性能下降,建议定期用柠檬酸清洗。
