1. 项目背景与核心价值
去年夏天在电子设计实验室调试电路板时,我注意到一个有趣的现象:实验室的壁挂风扇永远以固定转速运转,不管工位上有1个人还是10个人。这种"无差别送风"不仅浪费电能,还经常导致靠近风扇的同学被吹得瑟瑟发抖,而角落里的同事依然汗流浃背。这促使我开始思考——能否用嵌入式技术实现"看人下菜碟"的智能送风方案?
这个基于STM32的智能风扇系统,本质上解决的是环境舒适度与能源效率的动态平衡问题。通过热释电红外传感器阵列检测人员分布,配合自适应PID算法实时调整风扇转速和角度,最终实现:
- 有人区域精准送风(风速随人数增加阶梯式提升)
- 无人区域自动停转(节能率实测可达60%以上)
- 多档位无级变速(避免传统档位切换的突兀感)
2. 硬件架构设计解析
2.1 传感器选型与阵列布局
经过对比测试,最终选用RE200B热释电红外传感器,其优势在于:
- 探测距离5米(覆盖标准房间对角线)
- 120°探测角度(减少传感器数量)
- 0.3-3Hz人体移动频率响应(过滤宠物干扰)
实际部署采用"田字格"拓扑:
code复制[天花板俯视图]
┌───┬───┬───┐
│ │ │ │
├─●─┼─●─┼─●─┤ ●传感器
│ │ │ │
├─●─┼─●─┼─●─┤
│ │ │ │
└───┴───┴───┘
每个传感器对应一个0.5m×0.5m的监测网格,通过STM32的ADC采集模拟量输出(非简单的高低电平判断),实现人员存在概率估算。
2.2 电机驱动方案
传统PWM调速电机存在启停抖动问题,本项目采用更平滑的:
- 直流无刷电机(BLDC)驱动
- 三相全桥驱动电路(DRV8313芯片)
- 霍尔传感器反馈闭环控制
关键参数计算示例:
c复制// 目标转速2000RPM时的PWM占空比
#define POLE_PAIRS 4 // 电机极对数
Target_Speed = 2000; // RPM
Electrical_Freq = (Target_Speed * POLE_PAIRS) / 120 = 66.67Hz
PWM_Period = 1 / (Electrical_Freq * 3) ≈ 5ms // 三相驱动
3. 核心算法实现
3.1 人员定位算法
传感器数据融合采用加权质心法:
python复制# 伪代码示例
def calculate_center(sensors):
total_weight = 0
x_sum = y_sum = 0
for s in sensors:
weight = s.value * (1 - s.distance/MAX_DIST)
x_sum += s.x * weight
y_sum += s.y * weight
total_weight += weight
return (x_sum/total_weight, y_sum/total_weight) if total_weight>0 else None
3.2 自适应PID调速
区别于固定参数PID,本系统采用模糊控制动态调整:
- Kp随人数增加而增大(响应速度优先)
- Ki在稳态时自动降低(避免积分饱和)
- Kd根据温度变化率调整(抑制振荡)
实测参数调整规则表:
| 人数区间 | ΔKp(%) | ΔKi(%) | ΔKd(%) |
|---|---|---|---|
| 1-2人 | +0 | +0 | +10 |
| 3-5人 | +15 | -20 | +5 |
| >5人 | +30 | -30 | +0 |
4. 软件实现关键点
4.1 状态机设计
系统主循环采用事件驱动型状态机:
mermaid复制stateDiagram-v2
[*] --> 初始化
初始化 --> 环境校准: 完成
环境校准 --> 待机: 无人员
环境校准 --> 追踪模式: 检测到人
追踪模式 --> 动态调速: 位置变化>阈值
动态调速 --> 追踪模式: 速度稳定
追踪模式 --> 待机: 超时无人
4.2 中断处理优化
为避免传感器数据丢失,设计双缓冲机制:
- ADC DMA循环填充BufferA
- 当BufferA满时触发中断,切换至BufferB
- 主程序处理BufferA数据期间,DMA继续填充BufferB
关键代码片段:
c复制volatile uint8_t active_buffer = 0;
void DMA1_Channel1_IRQHandler() {
if(DMA_GetITStatus(DMA1_IT_TC1)) {
active_buffer ^= 1; // 切换缓冲区
DMA_ClearITPendingBit(DMA1_IT_TC1);
}
}
5. 实测效果与调优
5.1 性能指标对比
实验室环境测试数据(28℃基准温度):
| 场景 | 传统风扇耗能 | 智能系统耗能 | 舒适度评分 |
|---|---|---|---|
| 单人静止 | 45W | 18W | 4.8/5 |
| 三人活动 | 45W | 32W | 4.5/5 |
| 五人密集 | 45W | 39W | 4.2/5 |
| 空房状态(8小时) | 360Wh | 2Wh(待机) | - |
5.2 常见问题排查
-
误触发问题:
- 现象:无人时偶尔自动启动
- 解决方案:增加环境温度补偿算法,夏季调高触发阈值10%
-
响应延迟:
- 现象:人员移动后约3秒才响应
- 优化:将传感器采样率从1Hz提升到2Hz,代价是功耗增加15mA
-
电机啸叫:
- 现象:低速运转时发出高频噪音
- 解决:修改PWM载波频率从20kHz调整到16kHz
6. 项目进阶方向
当前系统已实现基础功能,后续可扩展:
- 多设备组网:通过ESP8266模块实现多个风扇的协同工作,构建分布式送风系统
- 机器学习优化:记录历史数据训练LSTM网络,预测人员移动规律
- 太阳能供电:增加MPPT充电模块,适合户外场景应用
(完整工程源码已托管至GitHub,包含详细注释和Eagle设计文件)
