1. 项目背景与核心需求
空气质量问题已经成为现代城市居民最关注的日常环境指标之一。传统商用检测设备往往价格昂贵且功能单一,而基于单片机的自制检测方案不仅成本可控,还能根据个人需求灵活定制功能模块。这个项目正是为了解决家庭、办公室等小型场所的实时空气质量监测需求而设计的。
整套系统需要实现PM2.5、温湿度、甲醛等关键指标的实时采集,并通过LCD屏直观显示数据。当检测值超过安全阈值时,系统会自动触发声光报警。考虑到实际使用场景,设备还需要具备数据存储和简单分析功能,方便用户追踪空气质量变化趋势。
2. 硬件系统设计
2.1 核心控制器选型
STM32F103C8T6作为主控芯片具有明显优势:
- 72MHz主频满足多传感器数据处理需求
- 64KB Flash存储空间足够存放程序代码
- 丰富的外设接口(I2C、SPI、USART)便于扩展
- 市面上开发板资源丰富,最小系统板价格仅15元左右
实际采购时要注意区分正版和兼容版芯片,部分国产兼容芯片在ADC精度上可能存在差异
2.2 传感器模块配置
2.2.1 颗粒物检测
采用攀藤PMS5003激光粉尘传感器:
- 检测范围0.3-10μm颗粒物
- 串口输出标准格式数据
- 自带风扇气流系统
- 实测响应时间<10秒
2.2.2 温湿度检测
DHT22数字温湿度传感器:
- 温度测量范围-40~80℃
- 湿度测量范围0-100%RH
- 单总线通信协议
- 成本约25元
2.2.3 甲醛检测
炜盛科技ZE08-CH2O电化学传感器:
- 检测范围0-5ppm
- 分辨率0.01ppm
- 预热时间约3分钟
- 需要定期校准
2.3 外围电路设计
电源部分采用AMS1117-3.3V稳压芯片,为整个系统提供稳定供电。显示模块选用1.3寸OLED屏(SSD1306驱动),相比LCD屏具有更宽的视角和更低的功耗。报警电路由有源蜂鸣器和RGB LED组成,通过PWM调光实现多级警报提示。
3. 软件系统实现
3.1 开发环境搭建
使用Keil MDK作为主要开发环境:
- 安装STM32标准外设库
- 配置工程包含路径
- 设置正确的芯片型号和调试工具
- 优化编译器选项(-O2优化等级)
新手常见错误是忘记勾选"Use MicroLIB",会导致printf重定向失败
3.2 传感器驱动开发
3.2.1 PMS5003数据解析
c复制void PMS_GetData(uint8_t *buf)
{
if(buf[0]==0x42 && buf[1]==0x4d){ // 帧头校验
pm1_0 = (buf[10]<<8)|buf[11];
pm2_5 = (buf[12]<<8)|buf[13];
pm10 = (buf[14]<<8)|buf[15];
}
}
3.2.2 DHT22温湿度读取
采用单总线时序控制,关键是要精确控制微秒级延时。实测发现当连续读取间隔小于2秒时,数据容易出错。
3.3 主程序逻辑架构
采用时间片轮询架构:
c复制while(1){
if(tick_1s){
Sensor_Update();
Display_Refresh();
Check_Alarm();
tick_1s = 0;
}
if(tick_1min){
Data_SaveToFlash();
tick_1min = 0;
}
}
这种设计避免了RTOS的系统开销,同时保证了各任务的及时执行。
4. 系统调试与优化
4.1 传感器数据校准
PM2.5传感器需要定期用标准设备进行对比校准。我们采用线性补偿公式:
code复制实际值 = 原始读数 × 0.92 + 5.6
甲醛传感器每3个月需要用标准气体校准一次,校准过程:
- 通电预热30分钟
- 暴露在0.5ppm标准气体中
- 记录稳定读数
- 调整校准系数
4.2 功耗优化技巧
- 将OLED屏刷新率从60Hz降至10Hz
- 传感器采用间歇工作模式(每分钟激活30秒)
- 关闭未使用的GPIO时钟
- 启用STM32的睡眠模式
实测优化后系统平均电流从85mA降至32mA,使用2000mAh锂电池可连续工作约60小时。
4.3 抗干扰设计
- 在传感器电源端增加100μF电解电容
- 信号线采用双绞线布线
- 数字地和模拟地单点连接
- 外壳采用ABS塑料避免金属屏蔽
5. 成品测试与数据分析
5.1 典型环境测试数据
| 环境类型 | PM2.5(μg/m³) | 温度(℃) | 湿度(%RH) | 甲醛(ppm) |
|---|---|---|---|---|
| 新装修客厅 | 35 | 26.5 | 62 | 0.18 |
| 封闭卧室 | 28 | 24.3 | 55 | 0.12 |
| 办公室 | 15 | 22.1 | 45 | 0.08 |
| 室外阳台 | 65 | 30.2 | 70 | 0.02 |
5.2 常见问题排查
-
传感器无响应
- 检查电源电压是否稳定
- 确认通信线序连接正确
- 测试单独供电时是否正常工作
-
数据显示异常跳动
- 检查接地是否良好
- 尝试增加软件滤波算法
- 隔离可能的电磁干扰源
-
OLED屏显示残影
- 降低刷新频率
- 增加清屏操作
- 检查排线接触
6. 项目扩展方向
实际使用中发现可以增加以下实用功能:
- 通过ESP8266模块实现WiFi数据传输
- 添加SD卡存储扩展历史数据记录
- 开发手机APP可视化数据趋势
- 联动智能家居自动开启空气净化器
硬件上可以考虑升级为STM32F4系列芯片,其内置浮点运算单元能更高效地处理传感器数据融合算法。外壳设计建议采用3D打印定制,预留传感器通风孔和安装支架位。