1. 系统设计思路与核心功能
做火灾报警系统最怕的就是误报和漏报,我当年做第一个版本时就踩过这个坑。要么是炒个菜烟雾大了就乱叫,要么是真有火情了反应迟钝。后来经过多次实测,发现双传感器协同判断才是王道。
这个系统我用的是STC89C52单片机作为大脑,搭配MQ-2烟雾传感器和DS18B20温度传感器。为什么选这两个?MQ-2对烟雾和可燃气体都很敏感,而DS18B20的温度测量精度能达到0.5°C,关键是它只需要一根线就能通信,接线简单不容易出错。
实际测试中发现,单独用烟雾传感器时,厨房炒菜、有人抽烟都会触发误报。而加上温度判断后就靠谱多了——我设定的逻辑是:当温度超过55°C且烟雾浓度持续升高时,才会触发报警。这样既避免了误报,又不会漏掉真正的火情。
显示部分我用的是LCD1602液晶屏,能同时显示温度和烟雾浓度值。你别小看这个显示,在调试阶段特别有用,能实时看到传感器读数,方便设置合适的报警阈值。
2. 硬件设计详解
2.1 核心控制器选型
我选STC89C52是因为它便宜又好用,8KB的Flash完全够存程序,32个IO口也足够连接所有外设。最重要的是,STC系列单片机烧写程序特别方便,直接用USB转TTL就能下载,对学生党特别友好。
记得第一次用的时候,我犯了个低级错误:没接复位电路。结果程序跑着跑着就死机了,排查了半天才发现问题。所以一定要记得,单片机的最小系统必须包含复位电路和晶振电路,11.0592MHz的晶振最适合串口通信。
2.2 传感器电路设计
MQ-2烟雾传感器需要加热电压,工作电压5V,加热电压最好用5V±0.1V。我在PCB上专门给它做了个稳压电路,确保测量稳定。它的输出是模拟信号,但51单片机没有ADC,所以我加了ADC0832模数转换芯片。
DS18B20温度传感器接线就简单多了,但要注意上拉电阻。数据线要接一个4.7kΩ的上拉电阻到VCC,否则读取温度会失败。我建议用金属封装的DS18B20,比塑料封装的响应更快。
2.3 报警模块设计
报警模块用了蜂鸣器和LED灯,光报警还不够,必须声光结合。蜂鸣器我选的是有源蜂鸣器,驱动简单,只需要给高电平就会响。LED用了红光高亮型号,在黑暗中特别显眼。
在实际安装时,蜂鸣器不要直接接在单片机IO口上,要加个三极管驱动,因为单片机IO口的驱动能力有限。我用的是S8050三极管,基极通过1k电阻接IO口,集电极接蜂鸣器,发射极接地。
3. 软件程序设计
3.1 主程序流程
程序初始化后,先读取一次温度和烟雾的报警阈值,这些值存在单片机的EEPROM里,断电也不会丢失。然后进入主循环,每隔500ms采集一次传感器数据。
采集到的数据先进行软件滤波,我用的是滑动平均滤波法,取10次测量值求平均。这样可以避免偶然干扰导致的误报。处理后的数据送LCD显示,然后与阈值比较,判断是否需要报警。
void main() {
sys_init(); // 系统初始化
while(1) {
read_sensors(); // 读取传感器
process_data(); // 数据处理
lcd_display(); // LCD显示
check_alarm(); // 报警判断
delay_ms(500); // 延时500ms
}
}
3.2 温度读取程序
DS18B20的读写需要严格的时序,我花了整整两天才调试成功。关键是延时要精确,写0和写1的时序不同,读数据时也要在准确的时间点采样。
float read_temperature() {
unsigned char LSB, MSB;
init_ds18b20(); // 初始化
write_byte(0xCC); // 跳过ROM
write_byte(0x44); // 开始转换
delay_ms(750); // 等待转换完成
init_ds18b20();
write_byte(0xCC);
write_byte(0xBE); // 读取暂存器
LSB = read_byte();
MSB = read_byte();
return (float)((MSB << 8) | LSB) * 0.0625;
}
3.3 报警判断逻辑
单纯的阈值判断太容易误报,我加了几个条件:温度必须持续5秒超过阈值,且烟雾浓度也在持续上升。这样就能区分出是瞬间干扰还是真实火情。
void check_alarm() {
if (temperature > temp_threshold && smoke > smoke_threshold) {
alarm_count++;
if (alarm_count >= 10) { // 持续5秒(10×500ms)
trigger_alarm();
}
} else {
alarm_count = 0;
stop_alarm();
}
}
4. 仿真与调试技巧
4.1 Proteus仿真设置
用Proteus仿真时,MQ-2传感器可以用模拟电压源代替,调节电压从0到5V模拟烟雾浓度变化。DS18B20在Proteus里有现成的模型,直接搜索添加就行。
仿真时我发现一个问题:实际电路中ADC0832的参考电压是5V,但Proteus里默认是2.5V。需要双击ADC0832元件,把参考电压改为5V,否则转换结果会不对。
4.2 实际调试经验
硬件焊接完成后,先别急着写程序,用万用表检查所有电源引脚电压是否正确。我遇到过因为一个虚焊的接地引脚,导致整个系统不稳定的情况。
程序调试时,先用串口打印传感器数据,确认读数正常再接LCD显示。串口调试可以用STC-ISP软件自带的串口助手,设置波特率为9600,数据位8,停止位1。
5. 元器件选择与BOM清单
5.1 关键元器件选型建议
单片机用STC89C52或AT89S51都可以,但STC的下载更方便。LCD1602要选带背光的,晚上也能看清显示。蜂鸣器选5V有源型,声音够响亮。
传感器方面,MQ-2有几个版本,建议选MQ-2而不是MQ-2S,因为MQ-2的灵敏度更适中。DS18B20建议买不锈钢封装的,防水防腐蚀,使用寿命更长。
5.2 完整BOM清单
| 元器件 | 型号规格 | 数量 | 备注 |
|---|---|---|---|
| 单片机 | STC89C52RC | 1 | DIP40封装 |
| 晶振 | 11.0592MHz | 1 | 精度越高越好 |
| 液晶显示屏 | LCD1602 | 1 | 带背光 |
| 烟雾传感器 | MQ-2 | 1 | 模拟输出 |
| 温度传感器 | DS18B20 | 1 | 不锈钢封装 |
| ADC转换芯片 | ADC0832 | 1 | 8位精度 |
| 蜂鸣器 | 5V有源 | 1 | 声压级>85dB |
| LED | 红色高亮 | 2 | 直径5mm |
| 电阻 | 1kΩ, 4.7kΩ等 | 若干 | 1/4W碳膜电阻 |
| 电容 | 10μF, 30pF等 | 若干 | 电解电容和瓷片电容 |
| 三极管 | S8050 | 1 | NPN型 |
| 稳压芯片 | LM7805 | 1 | 输入电压7-12V |
6. 安装部署注意事项
实际安装时,传感器位置很关键。烟雾传感器要装在天花板上,因为烟雾是上升的。温度传感器要远离空调出风口和窗户,避免外界温度影响测量精度。
电源部分我建议用9V直流电源适配器,通过LM7805稳压到5V。如果要用电池,记得加电源开关,否则电池会很快耗光。我在测试时用9V电池,大概能连续工作20小时。
系统调试完成后,一定要进行老化测试。连续运行24小时,观察有没有死机或误报情况。我用热风枪模拟高温环境,用香烟模拟烟雾,测试系统的响应情况。
最后提醒一点:定期维护很重要。传感器需要每月清洁一次,否则灰尘会影响灵敏度。我建议每半年校准一次传感器,确保测量准确。
&spm=1001.2101.3001.5002&articleId=155843009&d=1&t=3&u=3b0ca950d4694a199c3a80f70bd411c1)
1068

被折叠的 条评论
为什么被折叠?



