1. 项目概述:当STM32遇上空气净化
去年冬天雾霾严重时,我决定自己动手做一个智能空气净化器。市面上成品要么太贵,要么功能单一,而用STM32开发板配合几个传感器就能实现高度定制化的方案。这个系统核心在于实时监测PM2.5、温湿度等参数,通过PID算法自动调节风扇转速,还能通过WiFi模块实现手机远程控制。相比商业产品,成本能控制在200元以内,净化效果却能达到千元机的80%以上。
2. 硬件设计与选型解析
2.1 主控芯片选型对比
STM32F103C8T6(蓝色药丸板)是我的首选,72MHz主频完全够用,且具备:
- 3个USART(连接WiFi模块、传感器和调试接口)
- 12位ADC(处理传感器模拟信号)
- 16个PWM通道(控制风扇和无刷电机)
注意:STM32F030系列虽然便宜,但缺少硬件浮点运算单元,处理PID算法时会增加20%的CPU负载
2.2 传感器阵列配置方案
我采用多传感器数据融合方案:
- PMS5003激光粉尘传感器(精度±10%)
- 需注意:必须加装海绵防尘罩
- 实测数据:每30秒采样一次,连续工作电流80mA
- SHT30温湿度传感器
- I2C接口,需上拉4.7K电阻
- CCS811 VOC传感器
- 需要每24小时校准一次
传感器布局要点:
- 距离风扇进风口至少15cm
- 避免阳光直射位置
- 各传感器间距>5cm防止干扰
3. 核心算法实现细节
3.1 自适应PID控制算法
风扇转速控制采用增量式PID:
c复制typedef struct {
float Kp, Ki, Kd;
float err, last_err, prev_err;
} PID_Controller;
float PID_Update(PID_Controller* pid, float setpoint, float actual) {
pid->err = setpoint - actual;
float delta = pid->Kp * (pid->err - pid->last_err)
+ pid->Ki * pid->err
+ pid->Kd * (pid->err - 2*pid->last_err + pid->prev_err);
pid->prev_err = pid->last_err;
pid->last_err = pid->err;
return delta;
}
参数整定经验:
- 初始值:Kp=0.8, Ki=0.05, Kd=0.1
- 调整规则:
- 振荡大 → 减小Kp
- 响应慢 → 增大Ki
- 超调大 → 增大Kd
3.2 传感器数据滤波处理
采用复合滤波算法:
- 滑动平均滤波(窗口大小=5)
- 一阶滞后滤波(系数α=0.3)
- 异常值剔除(3σ原则)
4. 电路设计关键要点
4.1 风扇驱动电路设计
使用MOSFET IRF540N驱动12V风扇:
code复制 +12V
|
FAN
|
MOSFET (D极)
|
STM32 -- GPIO --| 1K电阻 |-- MOSFET (G极)
|-------|
10K下拉电阻
警告:必须加装续流二极管(1N4007),否则反电动势会击穿MOSFET
4.2 电源管理方案
采用两级稳压:
- 220V→12V开关电源(给风扇供电)
- LM2596降压到5V(给传感器供电)
- AMS1117-3.3V(给STM32供电)
实测功耗:
- 待机状态:2.1W
- 最大风量:18.7W
5. 软件架构与实现
5.1 多任务调度设计
使用FreeRTOS创建三个任务:
- 传感器采集任务(优先级3,周期1s)
- 控制算法任务(优先级2,周期500ms)
- 通信任务(优先级1,事件触发)
关键配置:
c复制#define configTICK_RATE_HZ 1000
#define configMINIMAL_STACK_SIZE 128
5.2 WiFi通信协议
采用AT指令与ESP8266交互:
- 初始化流程:
code复制AT+CWMODE=3 // 设置STA+AP模式 AT+CWJAP="SSID","password" // 连接路由器 AT+CIPSTART="TCP","192.168.1.100",8080 // 连接服务器 - 数据包格式:
code复制[PM2.5:35][VOC:120][Temp:25.6][Humi:52%]
6. 制作与调试实录
6.1 机箱改造要点
我用旧电脑机箱改造的教训:
- 进风口面积 ≥ 出风口面积×1.5
- 内部风道要形成"U型"路径
- 滤芯安装要保证四周密封(我用发泡胶填补缝隙)
6.2 实测性能对比
在15㎡房间测试:
| 指标 | 自制净化器 | 小米Pro H |
|---|---|---|
| PM2.5净化率 | 98%/30min | 99%/25min |
| 噪音(dB) | 48@最大档 | 45@最大档 |
| 功耗(W) | 18.7 | 22.5 |
7. 常见问题排查指南
7.1 传感器数据异常
现象:PM2.5数值突然归零
可能原因:
- 激光传感器被灰尘覆盖(清洁透镜)
- 5V电源不稳定(测量电压波动应<±0.1V)
- UART波特率漂移(重新初始化传感器)
7.2 WiFi频繁断开
解决方案:
- 在ESP8266的VCC引脚并联100μF电容
- 修改AT指令:
code复制AT+CIPRECONNCFG=3000,10 // 设置重连参数 - 添加看门狗定时器
8. 升级优化方向
- 增加OLED显示屏(SSD1306驱动)
- 改用FOC算法控制无刷电机
- 添加甲醛传感器(建议使用ZE08-CH2O)
- 实现多设备组网联动
这个项目最让我意外的是PID参数对噪音的影响——通过反复调试,发现当Kp值控制在0.6-0.8之间时,风扇转速变化更平滑,夜间模式下的嗡嗡声能降低40%左右。建议大家在调参时不仅要看净化效率,还要用手机APP测测噪音频谱。
