1. 项目背景与核心需求
去年帮朋友改造老房子通风系统时,发现市面上大多数换气设备要么是纯机械控制,要么是价格高昂的商用解决方案。这促使我开始思考如何用常见的STM32开发板打造一个高性价比的智能换气系统。经过三个月的迭代开发,最终实现的这套系统成本不到300元,却能精准监测5种空气质量参数,响应延迟控制在2秒以内。
传统换气系统存在三个明显痛点:一是依赖人工开关,无法实时响应空气质量变化;二是缺乏数据记录功能,难以分析长期趋势;三是控制策略单一,无法适应不同场景需求。本系统针对这些问题,通过多传感器融合和自适应算法,实现了真正意义上的智能控制。
2. 硬件架构设计解析
2.1 核心控制器选型
对比STM32F1/F4/H7三个系列后,最终选择STM32F103C8T6(蓝色pill开发板)作为主控,主要基于以下考量:
- 72MHz主频足够处理传感器数据(实测占用率<40%)
- 内置12位ADC可直连模拟传感器
- 3个USART接口分别用于调试、WiFi和备用扩展
- 市场价格仅15元左右,性价比极高
注意:C8T6的Flash只有64KB,开发时需特别注意优化代码体积。建议关闭标准库的printf重定向,可节省约8KB空间。
2.2 传感器模块配置
系统采用多传感器冗余设计,确保数据可靠性:
- 气体检测:
- 二氧化碳:MH-Z19C(NDIR原理,±50ppm精度)
- 甲醛:ZE08-CH2O(电化学式,±0.05mg/m³)
- TVOC:SGP30(金属氧化物半导体,需定期校准)
- 环境参数:
- 温湿度:SHT31(I2C接口,±2%RH湿度精度)
- PM2.5:攀藤PMS5003(激光散射原理)
传感器供电统一采用3.3V LDO稳压,数字信号线均添加10K上拉电阻。特别要注意MH-Z19C的UART接口需要5V TTL电平,需通过TXS0108E进行电平转换。
2.3 执行机构设计
换气设备控制采用三级驱动方案:
- 小功率风扇:直接通过ULN2003驱动(<500mA)
- 中型换气扇:使用SRD-05VDC-SL-C继电器控制
- 中央新风系统:通过光耦隔离控制交流接触器
实测发现继电器在频繁开关时(>10次/分钟)容易粘连,解决方案是:
- 在继电器线圈并联1N4007续流二极管
- 软件上增加最小间隔时间保护(默认设置30秒)
3. 软件系统实现细节
3.1 实时数据采集框架
采用RT-Thread Nano实时操作系统,创建三个关键线程:
- 传感器采集线程(优先级最高)
- 定时读取各传感器数据
- 进行中值滤波和温度补偿
- 更新共享内存数据区
- 控制决策线程
- 每2秒评估一次空气质量指数(AQI)
- 根据模式选择控制策略
- 通信线程
- 处理WiFi/蓝牙数据收发
- 支持Modbus RTU协议
c复制// 数据采集示例代码
void sensor_thread_entry(void *parameter)
{
while(1) {
mhz19_read(&co2_val); // CO2传感器
sht31_read(&temp, &hum); // 温湿度
pms5003_read(&pm25); // PM2.5
rt_thread_mdelay(1000); // 1秒间隔
}
}
3.2 智能控制算法
核心控制逻辑采用模糊PID算法,主要考虑以下因素:
- 污染物浓度变化率(dC/dt)
- 室内外温差(ΔT)
- 设备运行历史(累计工作时间)
具体实现时做了两点优化:
- 引入"学习模式":前7天记录用户手动调节记录,自动生成个性化控制曲线
- 动态阈值调整:夜间自动提高CO2阈值(800ppm→1200ppm),减少不必要的换气
3.3 人机交互设计
OLED显示屏采用分层显示策略:
- 主界面:实时显示AQI指数和主要参数
- 二级菜单:历史曲线查看(存储最近7天数据)
- 设置界面:支持阈值调整和模式选择
旋转编码器作为主要输入设备,配合蜂鸣器提供触觉反馈。特别优化了菜单响应速度,任何操作都能在0.5秒内完成界面刷新。
4. 系统测试与优化
4.1 实验室环境测试
使用标准气体发生器进行定量测试:
| 测试项目 | 标准值 | 测量值 | 误差 |
|---|---|---|---|
| CO2 (1000ppm) | 1000ppm | 983ppm | -1.7% |
| 甲醛 (0.1mg/m³) | 0.1mg/m³ | 0.103mg/m³ | +3% |
| 温度 (25℃) | 25.0℃ | 24.8℃ | -0.8% |
发现SGP30传感器在高温高湿环境下读数漂移严重,后期增加了温湿度补偿算法,将误差控制在±5%以内。
4.2 实际场景测试
在30㎡卧室进行72小时连续监测,记录到典型数据:

系统成功识别出多个污染事件:
- 早晨7:30 CO2峰值(人员起床活动)
- 中午12:15 PM2.5升高(烹饪油烟)
- 晚上20:00 TVOC上升(使用化妆品)
换气设备平均每天运行4.2小时,相比定时换气方案节能37%。
4.3 常见问题排查
-
传感器数据异常:
- 检查电源电压(3.3V±0.1V)
- 重新拔插接口(接触不良常见于DIY项目)
- 运行校准程序(尤其电化学传感器)
-
WiFi频繁断开:
- 修改ESP8266固件为ATv1.7.0
- 在STA模式下添加ping保活(每30秒)
- 硬件上增加10μF去耦电容
-
控制响应延迟:
- 优化RT-Thread线程优先级
- 关闭调试printf输出
- 将控制算法移出中断服务例程
5. 生产级改进建议
经过半年实际使用后,总结出以下升级方案:
-
PCB优化:
- 改用4层板设计,单独划分传感器电源域
- 添加TVS二极管防护(尤其RS485接口)
- 预留JTAG调试接口
-
软件增强:
- 实现OTA远程升级功能
- 增加MQTT协议支持
- 开发iOS/Android配套APP
-
安装规范:
- 气体传感器应远离通风口(避免测量失真)
- 控制箱做好防尘处理(工业环境必备)
- 保留20%的IO余量用于后期扩展
这套系统目前已经稳定运行超过2000小时,最让我意外的是收到了不少老年用户的积极反馈——他们特别欣赏系统自动生成的"空气质量日报"功能,这提醒我在技术开发中不能忽视人文关怀。