基于单片机的火焰与温度联动检测及声光灭火控制系统

1、基于单片机的火焰与温度联动检测及声光灭火控制系统

点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/91956675

1.1、项目背景与研究意义

火灾是建筑场景中最具破坏性的突发灾害之一,尤其在宿舍、办公室、实验室、小型仓库以及家庭住宅等室内场所,火灾往往起因于电气短路、设备过热、明火遗留、违规用电等,具有"蔓延快、烟气毒、人员逃生窗口短"的特点。传统的火灾预警方式通常依赖单点烟雾报警器或温度报警器,这类装置在实际应用中存在一定局限:

1、单一传感器误报率高:烟雾报警器易受水蒸气、油烟影响;温度报警器可能对初期明火不敏感。

2、无法快速定位:很多传统报警器只会发出声音,无法准确提示具体房间位置,尤其在多房间结构中容易延误判断。

3、缺乏联动灭火:报警后仍依赖人员手动处理,若火势在无人值守时发生,可能发展成重大事故。

4、监控信息不直观:若没有集中显示界面,难以同时掌握多个房间的状态,维护与管理效率低。

因此,设计一套"火焰 + 温度多点联动检测 + 声光报警 + 自动灭火控制"的智能系统,可以显著提高火灾初期发现效率、定位效率与处置效率。本设计针对"1个大房间 + 2个小房间"的结构,构建多点监测与联动灭火方案:

  • 每个房间配置火焰传感器(大房间2个,小房间各1个),对明火信号进行快速捕捉
  • 大房间配置温度传感器,对环境升温进行辅助判断与监测
  • 当检测到火焰,立即通过LED数码管显示异常房号,实现快速定位
  • 若报警持续超过10秒仍未解除,则自动触发声光报警,并驱动继电器启动对应房间灭火装置,实现联动灭火
  • 提供报警消除按钮、系统启动键与手动灭火按钮,增强安全性与灵活性
  • 进阶功能增加LCD显示温度与房间状态,提升监控可视化

该系统适用于小型建筑消防联动、智能宿舍安全、实验室防火、微型仓储消防等场景,具有明确的工程应用价值与教学实践意义。


1.2、系统总体目标与功能概述

本系统围绕"火焰检测快速定位 + 延时确认 + 联动灭火 + 人工控制与可视化显示"进行功能设计,主要实现:

1、多点火情监测

系统覆盖1个大房间与2个小房间,分别安装火焰传感器和温度传感器,构建多点监测网络。

2、传感器配置方案

  • 大房间:2个火焰传感器 + 1个温度传感器
  • 小房间1:1个火焰传感器
  • 小房间2:1个火焰传感器
    通过多点火焰检测可增强探测覆盖范围与可靠性,尤其大房间面积较大,配置2个火焰传感器可降低盲区风险。

3、异常房号显示

当任一火焰传感器检测到火焰信号,系统立即通过LED数码管显示异常房号(如1号=大房间,2号=小房间1,3号=小房间2),便于快速定位火灾发生区域。

4、10秒持续报警联动灭火

若火焰报警持续超过10秒且未解除,系统自动启动声光报警(蜂鸣器 + 警示灯),并驱动继电器启动对应房间灭火装置(如电磁阀、喷淋泵、干粉装置等),实现自动联动灭火。延时10秒的设计能够有效减少瞬时误报造成的不必要喷淋与损耗,同时保证火势持续存在时能快速响应。

5、报警消除按钮

设置报警消除按钮,用于人工解除报警状态。适用于误报处理、灭火后复位或现场确认安全后解除。

6、进阶功能:LCD状态显示

增加LCD显示功能,实现:

  • 实时显示大房间温度(可扩展小房间温度)
  • 显示三个房间火焰状态(正常/异常)
  • 显示联动状态(报警中/灭火中/已解除)
    增强可视化与系统管理效率。

7、系统启动键与手动灭火按钮

  • 启动键控制系统整体运行:方便维护时关闭系统或上电后手动进入监控状态
  • 手动灭火按钮:可在人工确认火情时直接启动灭火装置,提高应急效率,亦可用于测试灭火装置与继电器动作可靠性。

2、系统总体方案与工作流程

2.1、系统总体结构

本系统总体结构采用"传感器检测层---逻辑控制层---执行联动层---显示交互层"的分层设计思想:

1、检测层:火焰传感器与温度传感器采集环境信息

2、控制层:单片机执行采集、滤波、判断、延时确认与状态机管理

3、执行层:声光报警与继电器控制灭火装置

4、交互层:数码管显示房号、LCD显示状态、按键控制启动/消除/手动灭火

这种结构清晰、可靠、易扩展,适合多房间联动控制系统的设计。


2.2、系统工作流程说明

系统运行流程可描述为以下步骤:

1、系统上电后进入待机状态

系统默认处于停止或待机状态,等待启动键操作。显示模块可显示"待机"或"0"。

2、按下启动键进入监测状态

系统开始周期采样火焰传感器信号,同时读取温度传感器数据并更新显示。

3、火焰触发快速定位

若任一火焰传感器触发:

  • 立即记录触发房间编号
  • 数码管显示该房间号
  • 系统进入火焰预警状态,同时开始10秒计时

4、持续10秒确认

如果火焰信号在10秒内消失,则认为可能是瞬时干扰或误报:

  • 清除计时
  • 恢复正常监测
    如果火焰持续存在超过10秒:
  • 系统进入正式报警状态
  • 开启声光报警
  • 驱动对应房间灭火装置继电器启动

5、报警与灭火持续

系统保持报警与灭火动作运行,直到:

  • 火焰信号解除并人工按下报警消除按钮复位
  • 运维人员按消除按钮强制解除(实际工程中建议必须确认火焰解除才允许解除,防止误操作)

6、解除后恢复监测

报警解除后:

  • 关闭蜂鸣器与警示灯
  • 关闭灭火继电器
  • 数码管恢复正常显示
  • 系统回到监测状态

2.3、系统状态机设计(核心逻辑)

为了避免逻辑混乱与重复触发,本系统建议采用状态机实现,典型状态如下:

1、ST_STOP(停止)

系统未启动,不采样、不报警、不灭火。

2、ST_MONITOR(监测)

周期检测火焰与温度。无异常则保持此状态。

3、ST_PREALARM(预警)

检测到火焰信号,开始10秒计时,并显示房号,但不启动灭火。

4、ST_ALARM(报警与灭火)

火焰持续超过10秒,开启声光报警并启动对应房间灭火装置。

5、ST_RESET(复位)

人工按消除按钮后复位,关闭执行装置,回到监测状态。

状态机的优势:

  • 清晰表达"预警延时确认"的策略
  • 便于区分"显示定位"与"灭火联动"的动作阶段
  • 防止同一房间的火焰传感器抖动导致多次启动继电器
  • 便于扩展更多房间或更多传感器

3、电路设计

3.1、电路设计总体说明

本系统属于典型的"弱信号检测 + 强电执行"系统:

  • 火焰传感器与温度传感器输出为弱信号,需要稳定采集并抗干扰
  • 声光报警与灭火装置通常为较大电流或高压执行设备,需要继电器隔离驱动

因此电路设计必须重点考虑:

1、传感器信号可靠采集:输入端防抖、滤波与稳压

2、执行部分隔离:继电器驱动采用三极管/MOSFET并加续流二极管

3、电源分区与滤波:逻辑电源与继电器线圈/执行电源分开,减少干扰导致单片机复位

4、可维护性:模块化接口便于更换传感器或扩展


3.2、51单片机最小系统模块

3.2.1、单片机选型

可采用STC89C52或AT89S52等51单片机,原因包括:

  • I/O口充足,可连接多路火焰输入、按键、显示、继电器控制等
  • 定时器资源支持1秒计时与数码管扫描显示
  • 串口可扩展上位机通讯与联网功能

3.2.2、最小系统组成

  • 晶振电路:11.0592MHz/12MHz晶振 + 两个电容
  • 复位电路:RC上电复位 + 按键复位
  • 去耦电容:单片机供电端放置0.1uF去耦电容
    保证系统稳定启动与可靠运行。

3.2.3、I/O口规划建议

  • 火焰传感器输入:4路(大房间2路,小房间2路)
  • 温度传感器:1路(DS18B20单总线或热敏电阻+ADC扩展)
  • 数码管:段选8路 + 位选1~2路(可动态扫描)
  • LCD1602:RS、EN、D4~D7(4位方式6路)
  • 蜂鸣器:1路
  • 警示灯LED:1路
  • 继电器控制:3路(大房间、小房间1、小房间2)
  • 按键:启动、消除、手动灭火至少3路

3.3、火焰传感器检测模块

3.3.1、火焰传感器原理与信号特点

火焰传感器通常使用红外光敏元件或火焰专用红外接收头,对火焰产生的红外波段敏感。常见火焰模块输出两种信号:

  • DO数字输出:比较器输出,达到阈值则输出高/低电平
  • AO模拟输出:输出随火焰强度变化的电压信号

本系统主要用于火情触发与定位,推荐使用DO数字输出,接入单片机IO口即可判断是否有火焰信号,硬件简单且响应快。

3.3.2、大房间双火焰传感器设计意义

大房间面积大且火源可能分散,设置2个火焰传感器有三大优势:

1、扩大探测覆盖范围,减少盲区

2、提高可靠性,避免单一传感器故障导致漏报

3、可实现简单的冗余确认策略(扩展:2选1或2选2)

本设计采用"任一触发即报警定位"的策略,保证响应迅速;在工程扩展中也可采用"任一触发进入预警,两者均触发进入报警"以降低误报。

3.3.3、信号抗干扰与防抖

火焰传感器可能受到强光、焊接火花、红外干扰等影响。为减少误触发,建议:

  • 输入端加软件防抖:连续检测N次为火焰才认定有效
  • 设置预警延时10秒确认:可过滤短时干扰
  • 传感器模块电源端增加滤波电容,提高稳定性

3.4、温度传感器检测模块

3.4.1、温度检测意义

火焰传感器响应快但可能误报,而温度变化通常更稳定。将温度检测纳入系统可实现:

  • 实时监测大房间环境温度,用于辅助判断火灾风险
  • 当温度持续升高但火焰未触发时,提前提示隐患(扩展)
  • 提升系统可视化与管理能力

3.4.2、温度传感器选型

常见温度传感器包括:

  • DS18B20:数字温度传感器,单总线,精度高,抗干扰强
  • 热敏电阻:成本低,但需要ADC与标定
    本系统推荐DS18B20,便于采集与显示。

3.4.3、电路接口要点

DS18B20数据线需上拉电阻(4.7k),并尽量缩短连线。室内多点系统中建议采用屏蔽线并在靠近单片机处加去耦电容,避免通信失败。


3.5、LED数码管显示模块

3.5.1、显示需求说明

数码管用于快速显示异常房号,实现"火情定位"。通常使用1位或2位数码管即可:

  • 正常监测显示0或空白
  • 检测到火焰显示房号1/2/3
  • 报警状态可闪烁显示房号增强提示

3.5.2、驱动方式

数码管可采用:

  • 直接静态驱动(占用IO多)
  • 动态扫描驱动(节省IO,常用)
    为了节省I/O并兼顾扩展,建议动态扫描方式,段选使用8条线,位选使用1~2条线。若单片机驱动能力不足,可使用74HC573锁存器或ULN2803驱动。

3.6、LCD显示模块(进阶功能)

3.6.1、显示内容规划

LCD用于显示所有房间状态信息,典型显示内容包括:

  • 大房间:火焰1状态、火焰2状态、温度值
  • 小房间1:火焰状态
  • 小房间2:火焰状态
  • 系统状态:监测/预警/报警/灭火/解除
    例如:
    第一行:R1:F1 F2 T=28C
    第二行:R2:OK R3:ALM

3.6.2、接口方式

LCD1602可采用4位数据方式,节省IO。控制线包括RS、EN,数据线D4~D7,RW接地仅写模式。

3.6.3、刷新策略

LCD刷新不宜过快,以免闪烁与占用CPU。建议每500ms或1秒刷新一次,并在状态变化时立即刷新。


3.7、声光报警模块(蜂鸣器+警示灯)

3.7.1、声光报警作用

报警是消防系统的重要提醒手段:

  • 蜂鸣器提供声音提示,提醒人员迅速撤离或处理
  • 警示灯提供视觉提示,适合嘈杂环境或夜间提示
    报警可以采用间歇模式降低噪声,同时提高辨识度。

3.7.2、驱动设计

蜂鸣器建议使用有源蜂鸣器,IO控制即可。若使用无源蜂鸣器则需PWM驱动产生音频。警示灯可使用高亮LED或警示灯模块,通过三极管驱动可增强亮度。


3.8、继电器驱动与灭火执行机构模块

3.8.1、灭火装置类型

灭火装置可根据场景选择:

  • 喷淋电磁阀控制喷水
  • 干粉灭火装置启动电机或电磁阀
  • 二氧化碳灭火装置控制阀门
    本系统使用继电器控制对应房间灭火装置,保证电气隔离与安全性。

3.8.2、继电器驱动电路要点

继电器线圈电流一般较大,不能直接由单片机IO驱动,需使用:

  • NPN三极管/MOSFET放大驱动
  • 线圈两端并联续流二极管抑制反向电动势
  • 继电器供电端加滤波电容防止电源波动
    此外建议继电器控制输出加指示灯,便于观察哪个房间灭火动作已启动。

3.9、按键控制模块(启动/消除/手动灭火)

3.9.1、按键功能说明

  • 启动键:系统进入监测状态或停止
  • 消除键:解除报警状态并复位系统
  • 手动灭火键:人工触发灭火继电器(可设为对当前报警房间或指定房间)

3.9.2、消抖与优先级设计

按键必须软件消抖,防止误触发。优先级建议:

1、消除键优先级最高(用于紧急停止报警与灭火)

2、手动灭火优先级次之(应急启动)

3、启动键用于模式切换

同时可增加"手动灭火需长按2秒"策略,降低误触发风险。


4、程序设计

4.1、软件总体架构设计

系统软件采用"定时器中断+主循环任务调度+状态机控制"的结构:

1、定时器中断(1ms/2ms)

  • 数码管动态扫描
  • 系统节拍计数(形成10秒延时计时基准)
    2、主循环任务
  • 火焰传感器采集与防抖判断
  • 温度采集与LCD刷新
  • 状态机切换与联动控制
  • 按键扫描与事件处理
    3、状态机模块
  • 管理监测、预警、报警灭火、解除复位等状态
  • 统一执行声光报警与继电器输出策略
    4、扩展模块
  • 可扩展通信上传、历史报警记录等

4.2、传感器采集模块设计

4.2.1、火焰采集与定位

火焰传感器采集采用数字输入读取即可。系统需建立房间编号映射:

  • Room1(大房间):Flame1、Flame2
  • Room2(小房间1):Flame3
  • Room3(小房间2):Flame4

当任一火焰触发时:

  • 优先级策略:若多个房间同时触发,建议优先显示大房间或按触发先后记录
  • 记录当前报警房间号alarmRoom
  • 数码管显示alarmRoom

4.2.2、温度采集与显示

温度采用DS18B20读取。读取周期可设为1秒,读取后更新LCD显示。若温度超限(可扩展阈值),也可触发预警提示。


4.3、10秒延时确认与报警触发模块

4.3.1、延时确认的必要性

实际环境中火焰传感器可能受到干扰,例如阳光直射、强光灯、反射光等,短暂信号不应立即启动灭火装置,否则会造成误喷淋、设备损耗甚至影响正常生产生活。

因此系统采用"火焰触发→预警计时10秒→持续存在才灭火"的策略:

  • 预警阶段显示房号、可选轻微提示
  • 10秒内信号消失则复位
  • 超过10秒则进入报警并联动灭火

4.3.2、计时实现

使用定时器中断累计秒数:

  • 1ms中断计数1000次=1秒
  • 预警状态下秒计数递增
  • 达到10秒触发报警动作

4.4、声光报警与继电器联动控制模块

4.4.1、报警输出逻辑

当进入报警状态:

  • 蜂鸣器间歇鸣叫(例如100ms响/400ms停)
  • 警示灯闪烁(与蜂鸣器同频或交错)
  • 继电器输出对应房间开启灭火装置
    灭火启动后可以持续一段时间(例如30秒)或持续到人工解除,实际可根据灭火装置类型确定。

4.4.2、继电器控制策略

由于有多个房间对应不同灭火装置,继电器应独立控制:

  • RELAY_R1:大房间灭火装置
  • RELAY_R2:小房间1灭火装置
  • RELAY_R3:小房间2灭火装置
    系统根据alarmRoom选择对应继电器打开,其他保持关闭,避免误喷淋。

4.5、按键处理与人工控制模块

4.5.1、启动键逻辑

  • 停止状态按启动 → 进入监测
  • 监测状态长按启动 → 停止(扩展)
    通过启动键可以方便维护时暂停系统。

4.5.2、消除键逻辑

消除键用于解除报警并复位:

  • 关闭蜂鸣器与警示灯
  • 关闭所有继电器输出
  • 清除报警房号与计时
  • 回到监测状态
    为安全起见可加入条件:只有火焰信号解除后才允许消除,否则提示"火焰仍存在"并拒绝解除(扩展)。

4.5.3、手动灭火逻辑

手动灭火可设计为:

  • 若当前有报警房间,则启动该房间灭火继电器
  • 若无报警房间,可默认启动大房间或通过按键组合选择房间(扩展)
    手动灭火按键建议长按触发防误触。

4.6、显示模块程序设计(数码管+LCD)

4.6.1、数码管显示逻辑

  • 正常监测:显示0或空
  • 火焰触发预警:显示房号1/2/3
  • 报警状态:房号闪烁显示,提高警示效果
    数码管动态扫描在中断中完成,避免主循环延时影响显示稳定。

4.6.2、LCD显示逻辑

LCD主要显示:

  • 各房间火焰状态:OK/ALM
  • 大房间温度:T=xx℃
  • 系统状态:MON/PRE/ALARM
    刷新周期建议500ms~1000ms,避免频繁刷新造成闪烁。

5、关键程序代码示例(模块化实现示例)

5.1、硬件定义与全局变量

c 复制代码
#include <reg52.h>

typedef unsigned char u8;
typedef unsigned int  u16;

// ====== 火焰传感器输入(低电平表示检测到火焰,视模块而定)=====
sbit FLAME_R1_A = P3^0; // 大房间火焰1
sbit FLAME_R1_B = P3^1; // 大房间火焰2
sbit FLAME_R2   = P3^2; // 小房间1火焰
sbit FLAME_R3   = P3^3; // 小房间2火焰

// ====== 按键(低电平有效)=====
sbit KEY_START  = P3^4;
sbit KEY_CLEAR  = P3^5;
sbit KEY_MANUAL = P3^6;

// ====== 声光报警 ======
sbit BEEP = P1^6;
sbit WARN_LED = P1^7;

// ====== 继电器输出 ======
sbit RELAY_R1 = P2^0;
sbit RELAY_R2 = P2^1;
sbit RELAY_R3 = P2^2;

// ====== 系统状态 ======
typedef enum{
    ST_STOP = 0,
    ST_MONITOR,
    ST_PREALARM,
    ST_ALARM
}SysState;

volatile SysState sysState = ST_STOP;

// ====== 报警房间编号(1大房间,2小房间1,3小房间2)=====
volatile u8 alarmRoom = 0;

// ====== 预警计时(单位:秒)=====
volatile u8 preAlarmSec = 0;

// ====== 定时标志 ======
volatile bit flag_1ms = 0;
volatile bit flag_10ms = 0;
volatile bit flag_1s = 0;

5.2、定时器初始化(1ms节拍、生成10ms与1秒标志)

c 复制代码
void Timer0_Init_1ms(void)
{
    TMOD &= 0xF0;
    TMOD |= 0x01;

    // 11.0592MHz,1ms:0xFC67
    TH0 = 0xFC;
    TL0 = 0x67;

    ET0 = 1;
    EA  = 1;
    TR0 = 1;
}

void Timer0_ISR(void) interrupt 1
{
    static u16 cnt10 = 0;
    static u16 cnt1s = 0;

    TH0 = 0xFC;
    TL0 = 0x67;

    flag_1ms = 1;

    cnt10++;
    if(cnt10 >= 10)
    {
        cnt10 = 0;
        flag_10ms = 1;
    }

    cnt1s++;
    if(cnt1s >= 1000)
    {
        cnt1s = 0;
        flag_1s = 1;
    }
}

5.3、火焰检测与房间定位模块

c 复制代码
bit Flame_Detected_Room1(void)
{
    return (FLAME_R1_A == 0) || (FLAME_R1_B == 0);
}

bit Flame_Detected_Room2(void)
{
    return (FLAME_R2 == 0);
}

bit Flame_Detected_Room3(void)
{
    return (FLAME_R3 == 0);
}

u8 Get_AlarmRoom(void)
{
    // 优先级:大房间 > 小房间1 > 小房间2
    if(Flame_Detected_Room1()) return 1;
    if(Flame_Detected_Room2()) return 2;
    if(Flame_Detected_Room3()) return 3;
    return 0;
}

5.4、继电器与声光报警控制模块

c 复制代码
void Relay_AllOff(void)
{
    RELAY_R1 = 0;
    RELAY_R2 = 0;
    RELAY_R3 = 0;
}

void Relay_OnByRoom(u8 room)
{
    Relay_AllOff();
    if(room == 1) RELAY_R1 = 1;
    else if(room == 2) RELAY_R2 = 1;
    else if(room == 3) RELAY_R3 = 1;
}

void Alarm_Output_10ms(void)
{
    static u8 step = 0;

    if(sysState != ST_ALARM)
    {
        BEEP = 0;
        WARN_LED = 0;
        return;
    }

    // 间歇报警:每500ms周期,前100ms鸣叫亮灯
    step++;
    if(step >= 50) step = 0;

    if(step < 10)
    {
        BEEP = 1;
        WARN_LED = 1;
    }
    else
    {
        BEEP = 0;
        WARN_LED = 0;
    }
}

5.5、按键扫描与消抖模块

c 复制代码
bit Key_Scan(sbit key)
{
    if(key == 0)
    {
        u16 i;
        for(i = 0; i < 500; i++); // 简易延时消抖
        if(key == 0)
        {
            while(key == 0);
            return 1;
        }
    }
    return 0;
}

5.6、状态机主逻辑(10秒延时确认+联动灭火)

c 复制代码
void System_Process_1s(void)
{
    u8 roomNow;

    if(sysState == ST_STOP) return;

    roomNow = Get_AlarmRoom();

    if(sysState == ST_MONITOR)
    {
        if(roomNow != 0)
        {
            alarmRoom = roomNow;
            preAlarmSec = 0;
            sysState = ST_PREALARM;
        }
    }
    else if(sysState == ST_PREALARM)
    {
        // 若火焰消失,恢复监测
        if(roomNow == 0)
        {
            alarmRoom = 0;
            preAlarmSec = 0;
            sysState = ST_MONITOR;
            return;
        }

        // 火焰持续存在则计时
        preAlarmSec++;
        alarmRoom = roomNow;

        if(preAlarmSec >= 10)
        {
            sysState = ST_ALARM;
            Relay_OnByRoom(alarmRoom); // 启动对应房间灭火
        }
    }
    else if(sysState == ST_ALARM)
    {
        // 报警状态可根据策略决定是否自动解除
        // 这里保持报警直到人工清除
        // 若需要:roomNow==0且持续N秒可自动解除
    }
}

void Key_Process(void)
{
    // 启动键
    if(Key_Scan(KEY_START))
    {
        if(sysState == ST_STOP)
        {
            sysState = ST_MONITOR;
            alarmRoom = 0;
            preAlarmSec = 0;
            Relay_AllOff();
        }
        else
        {
            // 再次按下可停止系统(可选)
            sysState = ST_STOP;
            alarmRoom = 0;
            preAlarmSec = 0;
            Relay_AllOff();
            BEEP = 0;
            WARN_LED = 0;
        }
    }

    // 消除键(优先级高)
    if(Key_Scan(KEY_CLEAR))
    {
        if(sysState == ST_ALARM || sysState == ST_PREALARM)
        {
            sysState = ST_MONITOR;
            alarmRoom = 0;
            preAlarmSec = 0;
            Relay_AllOff();
            BEEP = 0;
            WARN_LED = 0;
        }
    }

    // 手动灭火键
    if(Key_Scan(KEY_MANUAL))
    {
        // 若已有报警房间,则对其启动;否则默认大房间
        if(sysState == ST_MONITOR)
        {
            alarmRoom = 1;
            sysState = ST_ALARM;
            Relay_OnByRoom(alarmRoom);
        }
        else if(sysState == ST_PREALARM || sysState == ST_ALARM)
        {
            if(alarmRoom == 0) alarmRoom = 1;
            sysState = ST_ALARM;
            Relay_OnByRoom(alarmRoom);
        }
    }
}

5.7、主循环框架(任务调度)

c 复制代码
void main(void)
{
    Timer0_Init_1ms();

    // 初始安全状态
    Relay_AllOff();
    BEEP = 0;
    WARN_LED = 0;

    sysState = ST_STOP;

    while(1)
    {
        if(flag_10ms)
        {
            flag_10ms = 0;
            Alarm_Output_10ms(); // 声光报警节奏
            // 数码管扫描显示可放在此处或1ms中断中(根据实现)
        }

        if(flag_1s)
        {
            flag_1s = 0;
            System_Process_1s(); // 状态机与10秒确认
            // 温度采集与LCD刷新建议放在此处(扩展)
        }

        // 按键扫描建议放在主循环中
        Key_Process();
    }
}

6、系统设计关键点与工程优化建议

6.1、误报控制与可靠性提升

由于火焰传感器可能受光源干扰,系统采用"10秒持续确认"策略能显著减少误喷淋。为了进一步提升可靠性,可增加:

1、火焰信号软件滤波:连续检测3次为火焰才认定有效。

2、火焰+温度联合判定(扩展):若火焰触发且温度上升更快,则提高报警等级;若火焰触发但温度无变化,可延长确认时间或提示人工确认。

3、传感器冗余策略:大房间可采用"双火焰均触发才进入报警"策略,降低误报。


6.2、灭火联动安全策略

灭火装置启动可能带来水损、设备损耗甚至对人员造成影响,因此应考虑:

1、灭火启动后持续时间可控:例如喷淋持续30秒后停止,避免长时间喷水。

2、消除按钮应有防误触:可采用长按2秒才生效。

3、报警解除应检查火焰是否解除:避免火焰仍存在却被解除。

4、继电器输出建议加入状态反馈:比如继电器指示灯或电流检测,保证执行可靠。


6.3、显示与可视化增强

数码管用于快速定位房号非常直观,但只能显示单一信息。进阶LCD显示可实现更全面监控:

  • 各房间火焰状态
  • 大房间温度值
  • 系统当前状态(监测/预警/报警/灭火)
  • 灭火继电器开启状态
    若需要进一步工程化,可加入:
  • RTC时钟记录报警时间
  • EEPROM记录报警次数与历史日志
  • 无线通信上传至手机或平台

6.4、电源与抗干扰设计要点

继电器动作会带来较大干扰,可能导致单片机复位或显示异常,应重点优化:

1、继电器线圈供电与单片机供电尽量分开或分支滤波。

2、继电器线圈加续流二极管。

3、控制板加大电解电容与去耦电容。

4、传感器信号线与继电器驱动线分开布线。

5、增加看门狗机制(若单片机支持)提高抗干扰能力。


7、总结

基于单片机的火焰与温度联动检测及声光灭火控制系统面向多房间火灾监测与自动处置需求,采用"1个大房间 + 2个小房间"的多点布局,配置4个火焰传感器与温度传感器,实现火焰与温度的实时监测。系统在检测到火焰信号后通过LED数码管快速显示异常房号,实现火灾位置快速定位;当火焰报警持续超过10秒仍未解除时,自动启动声光报警并驱动继电器启动对应房间灭火装置,实现可靠的联动灭火控制。同时系统提供报警消除按钮、启动键与手动灭火按钮,兼顾自动化与人工干预能力。进阶功能通过LCD实时显示温度与房间状态信息,使监控更加直观可视。

在电路设计方面,系统采用模块化结构,将传感器采集、显示、报警与继电器驱动分区设计,并通过驱动隔离与抗干扰措施保证稳定运行;在程序设计方面,系统采用定时器节拍调度与状态机控制,实现火焰定位、延时确认、声光报警节奏控制、继电器联动以及按键交互等核心功能,逻辑清晰且易扩展。该系统具有较强的实用价值和推广意义,可作为多房间消防联动控制的基础方案,并可进一步扩展为联网型智能消防监控系统。

相关推荐
蓝斯4978 小时前
从.到实现一个Windows上的虚拟hid键盘设备
windows·单片机·计算机外设
熙芯XiChip9 小时前
硬实时与软实时RTOS核心区别
嵌入式硬件
伟大的前程9 小时前
unsigned int 定义的变量 在 电脑的 64 位系统中 和 32 位 cortex-m0 和 8 位的 51 单片机
单片机·嵌入式硬件
小渔村的拉线工9 小时前
1.HPM6E80 解析芯片整体工作原理和存储架构
单片机·嵌入式硬件·mcu·架构·hpm6e80
熙芯XiChip10 小时前
CAN与CANopen的本质区别
单片机
lilihewo10 小时前
Altium Designer 封装库的创建(分享pcb 3D封装库)
嵌入式硬件·51单片机
神罚天下ET11 小时前
典型arm位单片机启动流程(从上电到main.c)
c语言·arm开发·单片机
碧海银沙音频科技研究院12 小时前
蓝牙耳机使用WSDF5361锂保芯片进入船运模式实现方法
嵌入式硬件·算法
Zevalin爱灰灰13 小时前
模拟信号链电路——基于TL431的电压基准电路
单片机·嵌入式硬件
2601_9638701713 小时前
【计算机毕业设计】基于小程序的房屋租赁管理系统设计与实现
课程设计