1. 项目概述
这个基于STM32F103C8T6单片机的环境监测系统是我在指导学生完成的一个典型嵌入式课程设计项目。作为一个从事嵌入式开发十余年的工程师,我认为这类系统最能锻炼学生的硬件选型、电路设计和软件编程的综合能力。
系统通过集成多种传感器实现了对环境参数的实时监测和智能控制,主要包括:
- 温湿度监测(DHT11)
- 有害气体检测(MQ-135)
- 光照强度检测(BH1750)
- 水位监测(水位传感器)
- 实时时钟(DS1302)
提示:STM32F103C8T6是一款性价比极高的Cortex-M3内核MCU,具有72MHz主频、64KB Flash和20KB RAM,非常适合这类中等复杂度的嵌入式应用。
2. 硬件设计详解
2.1 主控芯片选型
我们选择STM32F103C8T6作为主控芯片主要基于以下考虑:
- 性能足够:72MHz主频可以流畅处理多传感器数据
- 外设丰富:内置ADC、定时器、USART等必要外设
- 开发便捷:有成熟的HAL库和丰富的中文资料
- 成本低廉:价格约10-15元,适合学生项目
2.2 传感器模块电路设计
2.2.1 DHT11温湿度传感器
- 采用单总线协议,仅需一个GPIO口
- 典型电路:VCC(3.3V)、DATA(接10K上拉电阻)、GND
- 采样周期建议≥2秒(传感器需要时间恢复)
2.2.2 MQ-135有害气体传感器
- 需要ADC采集模拟电压值
- 加热电阻需要预热3-5分钟才能稳定工作
- 典型电路:VCC(5V)、AOUT(接MCU ADC)、DOUT(可接中断)、GND
注意:MQ-135的灵敏度会随使用时间下降,建议每3个月校准一次。
2.3 外围电路设计
2.3.1 继电器驱动电路
- 采用光耦隔离(如PC817)保护MCU
- 三极管驱动(如S8050)
- 续流二极管防止继电器线圈反电动势
2.3.2 OLED显示接口
- 选用0.96寸I2C接口OLED
- 仅需SCL、SDA两根线
- 工作电压3.3V,与STM32直接兼容
3. 软件架构设计
3.1 主程序流程图
c复制void main() {
hardware_init(); // 硬件初始化
sensor_calibration(); // 传感器校准
while(1) {
read_sensors(); // 读取所有传感器
process_data(); // 数据处理
control_actuators(); // 执行器控制
update_display(); // 刷新显示
handle_communication(); // 处理通信
delay_ms(500); // 适当延时
}
}
3.2 关键算法实现
3.2.1 温湿度控制算法
c复制if(temp > temp_high_threshold || humidity > humidity_high_threshold) {
turn_on_fan();
} else if(temp < temp_low_threshold && humidity < humidity_low_threshold) {
turn_off_fan();
}
3.2.2 气体浓度报警算法
c复制#define GAS_WARNING_LEVEL 300
#define GAS_DANGER_LEVEL 500
if(gas_concentration > GAS_DANGER_LEVEL) {
turn_on_fan();
trigger_alarm(ALARM_HIGH);
} else if(gas_concentration > GAS_WARNING_LEVEL) {
trigger_alarm(ALARM_LOW);
}
4. 系统调试经验
4.1 常见问题排查
-
DHT11无响应
- 检查上拉电阻(建议4.7K-10K)
- 确认时序符合规格书要求
- 测量VCC电压是否稳定
-
MQ-135读数不稳定
- 确保预热时间足够
- 检查ADC参考电压
- 尝试软件滤波(移动平均或中值滤波)
-
WiFi模块连接失败
- 检查AT指令序列
- 确认波特率设置一致
- 测试模块单独工作情况
4.2 性能优化技巧
-
降低功耗
- 适当延长采样间隔
- 使用STM32的低功耗模式
- 关闭不必要的外设时钟
-
提高稳定性
- 增加看门狗定时器
- 关键数据增加CRC校验
- 实现掉电保护功能
5. 项目扩展建议
-
增加数据记录功能
- 添加SD卡模块存储历史数据
- 实现FATFS文件系统
-
改进用户界面
- 采用触摸屏替代按键
- 增加多级菜单系统
-
云端接入
- 对接物联网平台(如阿里云IoT)
- 实现微信小程序监控
这个项目最让我欣慰的是看到学生从最初的电路都不认识,到最后能独立完成整个系统的调试。嵌入式开发就是这样,理论结合实践才能出真知。建议初学者一定要亲手焊接电路、调试代码,这些经验是看视频学不来的。
