1759【毕设课设】基于单片机的智能火灾监测与自动报警系统设计(仿真、源码、清单)

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清单

元器件型号规格数量备注
单片机STC89C52RC1DIP40封装
晶振11.0592MHz1精度越高越好
液晶显示屏LCD16021带背光
烟雾传感器MQ-21模拟输出
温度传感器DS18B201不锈钢封装
ADC转换芯片ADC083218位精度
蜂鸣器5V有源1声压级>85dB
LED红色高亮2直径5mm
电阻1kΩ, 4.7kΩ等若干1/4W碳膜电阻
电容10μF, 30pF等若干电解电容和瓷片电容
三极管S80501NPN型
稳压芯片LM78051输入电压7-12V

6. 安装部署注意事项

实际安装时,传感器位置很关键。烟雾传感器要装在天花板上,因为烟雾是上升的。温度传感器要远离空调出风口和窗户,避免外界温度影响测量精度。

电源部分我建议用9V直流电源适配器,通过LM7805稳压到5V。如果要用电池,记得加电源开关,否则电池会很快耗光。我在测试时用9V电池,大概能连续工作20小时。

系统调试完成后,一定要进行老化测试。连续运行24小时,观察有没有死机或误报情况。我用热风枪模拟高温环境,用香烟模拟烟雾,测试系统的响应情况。

最后提醒一点:定期维护很重要。传感器需要每月清洁一次,否则灰尘会影响灵敏度。我建议每半年校准一次传感器,确保测量准确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值