1. 项目概述
这个温度烟雾控制系统是我去年给本地一家小型食品加工厂做的安防项目。老板反映他们烘干车间经常因为温度失控导致原料报废,更危险的是有一次排烟系统故障差点引发火灾。传统的人工巡检方式既费时又不可靠,于是我设计了这个基于单片机的自动化监控方案。
系统核心功能很简单但非常实用:实时监测环境温度和烟雾浓度,当数值超过安全阈值时自动触发声光报警并启动排风装置。别看原理简单,在实际工业环境中要稳定可靠地运行可没那么容易。下面我就把这个项目的完整设计过程和踩过的坑都分享出来,特别适合刚接触工业控制的电子爱好者参考。
2. 核心硬件设计
2.1 主控芯片选型
我对比了三款主流单片机:
- STM32F103C8T6(72MHz Cortex-M3)
- ATmega328P(16MHz AVR)
- STC89C52(12MHz 8051)
最终选择了STC89C52,原因很实际:
- 车间环境电磁干扰强,STC芯片的抗干扰能力经过验证
- 程序逻辑简单不需要高性能
- 老板要求成本控制在200元以内
- 我有现成的烧录器和开发板
注意:工业环境一定要选宽温型号(-40℃~85℃),普通商用芯片在高温车间容易死机。
2.2 传感器选型与电路设计
温度检测用了DS18B20数字传感器,优势是:
- 一线总线节省IO口
- 防水封装可直接接触被测物体
- ±0.5℃精度足够用
烟雾检测采用MQ-2模拟传感器,需要特别注意:
- 预热电路要单独设计(我加了5分钟延时)
- 必须做温度补偿(用NTC热敏电阻)
- 信号调理电路要带低通滤波
传感器电路原理图如下:
c复制// DS18B20接线
VCC -- 4.7K上拉电阻 -- DATA -- STC P1.0
GND -- GND
// MQ-2电路
VCC -- 加热器 -- 5V
│
└-- 10K分压 -- 100nF电容 -- STC P1.1(ADC)
GND -- GND
2.3 执行机构驱动设计
报警输出用了最可靠的方案:
- 蜂鸣器:有源型(直接IO驱动)
- LED:红绿双色共阳
- 继电器:宏发HF32F控制排风扇
关键经验:
- 继电器线圈一定要加续流二极管
- 大功率负载要单独供电
- 所有输出口都加光耦隔离
3. 软件系统实现
3.1 主程序架构
采用状态机设计模式,核心逻辑流程:
- 上电初始化(传感器预热)
- 进入主循环:
- 读取温度(每10秒)
- 读取烟雾(每2秒)
- 状态判断
- 执行控制
- 中断处理:
- 看门狗复位
- 紧急停止按钮
c复制void main() {
init_all();
while(1) {
if(timer_10s) read_temp();
if(timer_2s) read_smoke();
check_status();
output_control();
}
}
3.2 关键算法实现
温度报警采用滞回比较算法:
- 正常范围:20℃~65℃
- 超过70℃立即报警
- 降到63℃才解除报警
烟雾检测做了滑动平均滤波:
c复制#define FILTER_LEN 5
uint16_t smoke_buf[FILTER_LEN];
uint16_t get_smoke_value() {
static uint8_t index = 0;
smoke_buf[index] = read_adc();
index = (index+1)%FILTER_LEN;
uint32_t sum = 0;
for(uint8_t i=0; i<FILTER_LEN; i++) {
sum += smoke_buf[i];
}
return sum/FILTER_LEN;
}
3.3 抗干扰设计
工业环境必须做的防护措施:
- 所有数字信号线加100Ω电阻串联
- ADC输入接0.1μF电容到地
- 程序加入软件看门狗
- 关键变量使用volatile声明
- 重要参数存储在EEPROM
4. 现场安装与调试
4.1 设备布局要点
根据车间实际情况:
- 温度传感器安装在热源上方30cm
- 烟雾传感器避开通风口
- 控制箱远离电机等干扰源
- 报警器安装在人员活动区域
4.2 参数校准方法
温度校准:
- 用标准温度计测量实际温度T1
- 读取传感器值T2
- 计算偏移量ΔT=T1-T2
- 写入EEPROM
烟雾校准更复杂:
- 使用标准烟雾发生器
- 记录不同浓度下的ADC值
- 制作查找表
- 分段线性插值
4.3 常见故障排查
我整理的故障速查表:
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 温度显示-127℃ | DS18B20接触不良 | 检查接线和防水胶 |
| 烟雾值跳动大 | 预热不足或电压不稳 | 延长预热至10分钟 |
| 误报警 | 电磁干扰 | 加磁环和屏蔽层 |
| 死机 | 电源波动 | 改用开关电源 |
5. 项目优化方向
实际运行半年后,我又做了这些改进:
- 增加Modbus RTU通信功能
- 添加4G模块远程报警
- 设计双传感器冗余方案
- 开发PC端监控软件
最实用的其实是加了个手动测试按钮,方便日常检查系统是否正常。这个小改动帮工人养成了交接班时测试设备的习惯,避免传感器失效而不知情的情况。