- 基于单片机的温度烟雾与漏电综合火灾报警系统设计
点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/91956678
-
系统总体概述
2.1 设计背景与安全需求分析
火灾事故的发生往往具有突发性和破坏性,尤其在家庭、宿舍、办公室、仓库、机房以及小型工厂等环境中,火灾可能在短时间内迅速蔓延并造成严重人员伤亡和财产损失。从火灾发展的机理来看,火灾并不是"突然出现的大火",而是由一系列征兆逐步演变而来:早期可能出现温度异常升高、电气设备漏电或过载、电线发热、可燃物热解产生烟雾等。若能在火灾早期阶段及时检测这些异常征兆并迅速报警,就能大幅提升人员疏散与处置效率,将事故控制在萌芽状态。
传统单一参数火灾报警器(例如单温度报警、单烟雾报警)虽然成本低、结构简单,但在复杂环境中存在不足:
- 单温度报警可能对厨房、机房等高温环境误报;
- 单烟雾报警在粉尘较大或油烟场景容易误触发;
- 电气火灾早期往往以漏电、异常电流变化为主要特征,单温度或烟雾报警无法提前发现;
- 不同场景需要不同阈值,固定阈值难以兼顾准确性与灵敏度。
因此,本设计提出一种温度 + 烟雾 + 漏电电流多参数联合监测的综合火灾报警系统。系统以单片机为核心,实时采集温度传感器、烟雾传感器和ACS712电流传感器数据,通过数码管显示温度、烟雾浓度与电流值;用户可通过按键自定义报警阈值;当任一参数超过阈值时自动启动声光报警,同时具备漏电保护预警功能,从而有效提升火灾监测的准确性、响应速度与整体安全性。
2.2 系统设计目标与功能要求
本系统需要实现以下功能目标:
1)单片机实时采集温度传感器、烟雾传感器与ACS712电流传感器信号,实现多参数联合监测。
2)通过数码管动态显示当前温度、烟雾浓度和电流值,直观反映环境安全状态。
3)设有按键接口,用户可自定义设置温度、烟雾浓度及漏电电流的报警阈值。
4)当任一检测参数超过设定阈值时,系统自动启动声光报警,及时提醒用户。
5)集成漏电保护功能,实时监测电流变化,有效防止电气火灾隐患。
6)系统具备稳定的数据采集与处理能力,保证报警准确性与响应速度。
2.3 系统总体结构与工作流程
系统总体结构可划分为:
- 传感器采集层:温度传感器、烟雾传感器、ACS712电流传感器
- 数据处理层:A/D采样、滤波、参数换算、阈值比较
- 显示与交互层:数码管动态显示、按键设置阈值
- 报警与安全层:声光报警、漏电预警策略(可扩展外部断电控制)
工作流程如下:
1)系统上电初始化:配置IO、ADC、定时器、数码管、按键与报警输出。
2)周期采样:定时读取温度、烟雾、电流传感器数据。
3)数据处理:滤波、换算单位并存入显示缓冲区。
4)数码管动态显示:循环显示温度、烟雾浓度、电流值。
5)按键处理:用户进入设置模式,修改阈值并保存。
6)阈值比较:任一参数超过阈值触发报警,执行声光输出;可选择保持报警直到恢复或人工确认。
7)持续监测:报警期间仍持续采样,必要时升级报警等级(例如持续超限加快蜂鸣频率)。
-
系统功能设计详解
3.1 多参数联合监测机制设计
多参数联合监测的核心价值在于"互补性"和"冗余判断"。温度、烟雾、电流三种参数反映火灾不同阶段特征:
- 温度异常:反映燃烧放热或电气过热;
- 烟雾浓度上升:反映可燃物热解或燃烧产物增加;
- 漏电电流/异常电流变化:反映电线破损、绝缘老化、接地故障,是电气火灾早期特征。
系统的报警判据可设计为:
- 单阈值触发:任一参数超限即报警(灵敏度高,适合安全要求高的场所);
- 组合触发:某些环境可采用"烟雾+温度同时超限"才报警,以降低油烟误报(更适合厨房场景);
- 分级报警:参数轻微超限提示预警,严重超限触发强报警并建议断电(更接近工程应用)。
本设计以"任一参数超阈值即报警"为主,同时建议在程序中预留组合与分级策略扩展接口。
3.2 温度监测与报警策略
3.2.1 温度检测意义
温度异常是火灾最直观特征之一,尤其在电气火灾中,电线过热常先于明火出现。实时温度监测能够:
- 提前发现局部过热趋势;
- 防止设备在高温下长期工作;
- 为火灾判断提供重要依据。
3.2.2 温度阈值设定原则
温度阈值应根据环境选择:
- 家庭卧室/客厅:阈值可设为50℃~60℃;
- 厨房:日常高温较多,阈值可提高至65℃~75℃;
- 机房/配电柜:可设为45℃~55℃并配合电流预警。
用户可通过按键自定义阈值,使系统适应多场景应用。
3.2.3 温度报警判定与防抖策略
温度值可能因热风、传感器抖动产生短时尖峰,为避免误报,应采用:
- 多次采样平均;
- 连续超限确认(例如连续3次超限才报警);
- 报警解除回差(例如温度低于阈值-2℃才解除)。
3.3 烟雾浓度监测与报警策略
3.3.1 烟雾传感器检测特点
常见烟雾传感器多为半导体气敏(如MQ-2、MQ-135等),能检测烟雾和多种可燃气体浓度变化。其特点是:
- 输出为模拟电压,与烟雾浓度呈非线性关系;
- 需要预热稳定;
- 对油烟、酒精蒸气、粉尘可能敏感,需要合理阈值与滤波。
3.3.2 烟雾浓度表示方式
在简化系统中,烟雾值通常用ADC采样值表示(01023或04095),通过标定可近似映射为"相对浓度百分比"。显示方式可设计为:
- 直接显示ADC数值(简单直观,便于阈值设置);
- 映射为0~100%相对浓度显示(更符合用户理解)。
3.3.3 烟雾报警策略
由于烟雾传感器容易受短时干扰,报警判定应更稳健:
- 连续超限确认次数可设置更大(例如连续5次或10次);
- 结合温度变化趋势进行辅助判断(可扩展);
- 在设置界面允许用户根据环境调整阈值。
3.4 漏电/电流监测与电气火灾预警策略
3.4.1 ACS712电流传感器工作原理与优势
ACS712是一种基于霍尔效应的电流传感器,可测量交流/直流电流,其输出为与电流成比例的模拟电压,并具有以下优势:
- 电气隔离:霍尔测量天然隔离,安全性高;
- 可检测电流变化趋势:对过载、漏电、短路等异常具有敏感性;
- 输出适合ADC采样:便于单片机处理。
需要注意:ACS712测得的是电流值(负载电流或线路电流),严格意义上的"漏电"通常需剩余电流互感器(RCD)检测火线与零线差值。但在教学与综合报警系统中,ACS712可用于监测电流异常变化,配合阈值判断实现电气火灾隐患预警:
- 电流突然增大可能表示短路或过载;
- 电流异常波动可能表示线路接触不良发热;
- 夜间或无人使用时电流不应过高,异常电流可作为泄漏或设备故障参考。
3.4.2 电流采样与有效值计算
若测量交流电流,ACS712输出为以Vcc/2为偏置的正弦波,需要通过采样计算有效值(RMS)才能得到真实电流大小。常见处理方法:
- 采样多个点计算均方根(RMS);
- 或使用峰值检测近似计算(精度较低)。
由于本系统以报警为主,通常采用简化RMS计算即可满足需求。
3.4.3 漏电/过流报警阈值设定
阈值可根据环境设定:
- 家庭小负载线路:可设为1A~5A作为过流预警;
- 配电或大功率场景:阈值更高;
- 若要实现漏电预警,可设定"异常电流变化阈值"或"夜间电流阈值"。
用户可通过按键设置电流报警阈值,使系统灵活适应不同负载。
3.5 数码管动态显示功能设计
3.5.1 动态显示的必要性
数码管显示能直观反映当前环境状态。由于要显示三个参数(温度、烟雾、电流),可以采用:
- 多位数码管分区显示(如8位:前两位温度,中三位烟雾,后三位电流);
- 或采用轮显方式:每隔1~2秒切换显示温度、烟雾、电流。
动态扫描显示可节省IO并提高显示亮度一致性。关键是要保证扫描频率足够高(一般>100Hz)避免闪烁。
3.5.2 显示内容设计与用户体验
为便于理解,可设计显示策略:
- 温度显示:例如"t 25"或"25C";
- 烟雾显示:显示"Sm 35"或"035";
- 电流显示:显示"1.2A"可通过小数点实现。
若数码管无法显示字母,可用指示灯或切换节奏区分当前显示项。
3.6 按键阈值设置功能设计
3.6.1 设置功能的必要性
不同场景对温度、烟雾、电流敏感程度不同,固定阈值容易造成误报或漏报。按键设置可使系统具备通用性。
3.6.2 按键交互流程设计
常见交互流程:
- 短按MODE进入设置界面;
- 切换设置项:温度阈值 → 烟雾阈值 → 电流阈值;
- UP/DOWN调整数值;
- OK保存并退出;
- 长按MODE退出不保存。
3.6.3 阈值合法性与保护
- 温度阈值限制在合理范围(如30℃~90℃);
- 烟雾阈值限制在ADC范围(0~1023);
- 电流阈值限制在传感器量程内(如020A或030A)。
若设置超界应提示并自动限幅。
3.7 声光报警模块设计
声光报警包括蜂鸣器与警示灯:
- 蜂鸣器可采用不同节奏区分报警类型(过温、烟雾、漏电);
- LED闪烁可提高可视性;
- 报警可设计为保持到参数恢复正常,或必须按键确认解除(适用于高安全场合)。
3.8 系统稳定性与响应速度设计
系统稳定性取决于采样、滤波与抗干扰设计:
- 采样周期:温度可1s采样一次,烟雾0.5s采样一次,电流RMS计算可每1s更新;
- 显示扫描周期:1ms~5ms级别扫描;
- 报警响应:一旦超限确认成立,应在数百毫秒内启动报警。
合理任务调度能保证系统既稳定又快速。
-
系统电路设计
4.1 硬件总体结构与模块划分
系统硬件模块包括:
1)单片机最小系统模块
2)温度传感器模块
3)烟雾传感器模块
4)ACS712电流传感器模块
5)A/D采样模块(若单片机无ADC需外接)
6)数码管动态显示模块
7)按键输入模块
8)声光报警模块
9)电源模块与滤波保护模块
4.2 单片机最小系统模块
单片机负责多传感器采样、显示刷新、按键处理与报警控制。最小系统电路包含:
- 晶振电路:提供稳定时钟;
- 复位电路:上电复位与手动复位;
- 去耦电容:抑制电源噪声;
- IO保护:关键IO可加上拉/下拉,防止上电误动作。
若选用带ADC的单片机(如STC15/STM32等),可直接采样;若选用传统51(无ADC),需外接ADC芯片(如ADC0832/ADC0804)。
4.3 温度传感器模块
温度传感器可选:
- DS18B20:数字温度,抗干扰强,布线要求较高;
- NTC热敏电阻:模拟量,需分压与标定;
- LM35:线性模拟温度输出,便于ADC采样。
模块设计要点:
- 传感器放置应避免靠近热源或通风口,保证代表性;
- 若为模拟输出,加入RC滤波减小抖动;
- 走线应远离蜂鸣器、电源转换模块等干扰源。
4.4 烟雾传感器模块
烟雾传感器一般输出模拟电压:
- AO接ADC用于浓度采样;
- DO可作为硬件阈值比较输出(可选冗余)。
设计要点:
- 传感器需要预热,电源需稳定;
- 模块输出容易漂移,应在软件中加入滤波与基线校准;
- 传感器安装位置建议靠近顶部(烟雾上升),但避免风口直吹。
4.5 ACS712电流传感器模块
ACS712输出电压随电流变化,中心点在Vcc/2。电路设计要点:
- 输出端接ADC采样;
- 加入小电容滤波(如0.1uF~1uF)平滑输出;
- 传感器量程选择要匹配电路(5A/20A/30A型号)。
4.6 A/D采样模块
若单片机无ADC需外接ADC:
- ADC0832:双通道8位ADC,适合烟雾与电流采样,温度可复用通道或使用更多通道ADC;
- ADC0809:多通道8位ADC,适合多传感器。
设计要点: - ADC参考电压稳定;
- 模拟地与数字地合理布线;
- 采样通道加RC滤波防止尖峰。
4.7 数码管动态显示模块
数码管显示模块包括:
- 段选驱动:驱动a~g与dp段;
- 位选驱动:控制每一位数码管使能;
- 限流电阻:保护LED段,保证亮度一致;
- 驱动管:若电流较大需用三极管/MOS驱动位选或段选。
动态扫描设计要点:
- 扫描频率足够高避免闪烁;
- 切换显示内容时保持一定周期,避免用户看不清;
- 报警状态可采用闪烁显示提升警示效果。
4.8 按键输入模块
按键用于阈值设置与模式切换。设计要点:
- 按键采用上拉输入,按下接地有效;
- 软件消抖与长按短按识别;
- 在报警状态下按键可实现消音或确认功能(可选)。
4.9 声光报警模块
声光报警电路一般包括:
- 有源蜂鸣器:单片机输出控制即可;
- LED闪烁灯:高亮LED或警示灯。
若蜂鸣器电流较大应通过三极管驱动,并加保护电阻。报警节奏由定时器控制实现。
4.10 电源模块与滤波保护模块
传感器采样对电源稳定性要求高,电源设计要点:
- 使用稳压芯片提供5V或3.3V;
- 每个传感器电源端加去耦电容;
- 蜂鸣器驱动与主控电源分区布线;
- 可加入TVS和保险丝提升浪涌保护能力;
- 若需控制外部断电装置(继电器/接触器),应加光耦隔离与续流保护。
-
程序设计
5.1 软件总体架构设计思想
软件采用"定时器调度 + 多任务轮询 + 缓冲显示 + 阈值判断 + 报警控制"的结构。核心任务包括:
1)定时采样任务:温度/烟雾/电流采样与处理
2)显示扫描任务:数码管动态扫描
3)按键任务:消抖、设置阈值、模式切换
4)报警任务:蜂鸣器与LED节奏控制
5)保护判断任务:阈值比较与报警触发/解除
为保证实时性,通常设置两个定时器节拍:
- 1ms节拍:用于数码管扫描与按键消抖计数
- 100ms或500ms节拍:用于采样更新与报警节奏
5.2 系统初始化模块
初始化内容包括:
- IO方向配置(数码管段位、按键输入、蜂鸣器与LED输出)
- ADC初始化(或外接ADC通信初始化)
- 定时器初始化(1ms中断)
- 显示缓冲区清空与默认显示
- 默认阈值加载(或从EEPROM读取)
- 烟雾传感器预热计时(可选),预热完成后进入正常监测
5.3 温度采集与处理模块
该模块实现:
- 读取温度原始值(ADC或数字温度)
- 多次平均滤波
- 转换为实际温度值(℃)
- 限幅与故障检测(传感器断线、异常跳变)
- 将结果写入显示缓冲区,并用于阈值比较
5.4 烟雾采集与处理模块
该模块实现:
- 读取烟雾传感器ADC值
- 预热期处理:预热期间不报警,仅显示"预热"或显示原始值
- 平均滤波 + 连续超限确认
- 输出相对浓度值或直接输出ADC值用于显示
- 写入显示缓冲区并用于阈值比较
5.5 电流采集与RMS计算模块(ACS712)
电流采集的关键是处理交流波形:
- 采样多个点,计算波形相对中心值的平方平均再开方(RMS)
- 中心电压Vcc/2需要扣除,避免偏置影响
- 将RMS转换为电流值(A)并显示
对于报警系统,可采用简化RMS:每次采样一段固定窗口(如100ms)内的若干点,得到一组RMS电流值,每500ms更新一次显示与判断即可。
5.6 数码管动态显示模块
显示模块实现:
- 数码管段码查表
- 位选轮流点亮
- 显示缓冲区存储当前需要显示的8位或4位数据
- 轮显策略:每隔一定时间切换显示温度/烟雾/电流
建议显示策略:
- 0~2秒显示温度
- 2~4秒显示烟雾
- 4~6秒显示电流
循环轮显,报警时闪烁显示超限参数。
5.7 按键扫描与阈值设置模块
按键模块实现:
- 消抖(10ms~20ms确认)
- 长按短按识别
- 设置模式下修改阈值并保存
- 合法性检查与限幅
- 退出设置后回到监测显示
5.8 报警判定与声光输出模块
报警判定逻辑:
- if (Temp > Temp_Th) 或 (Smoke > Smoke_Th) 或 (Current > Current_Th) → 报警
- 报警后蜂鸣器与LED启动
- 解除条件:参数回到阈值以下并满足回差条件,或用户按键确认解除(可选)
报警输出可设置节奏:
- 轻微超限:慢闪慢鸣
- 严重超限:快闪快鸣
这种分级策略可提升用户对危险程度的感知。
5.9 系统稳定性优化模块
为保证报警准确性与响应速度,应加入:
- 采样滤波与连续确认
- 阈值回差
- 显示与采样分离(显示刷新不能阻塞采样)
- 看门狗(可选)防止程序跑飞
- 异常检测(传感器断线/短路)并报警提示
-
参考程序(示例代码,C语言,适用于常见单片机,逻辑可移植至51+外接ADC)
c
#include <stdint.h>
#include <stdbool.h>
#include <math.h>
// ===================== 参数定义 =====================
#define ADC_MAX 1023
#define SAMPLE_AVG_N 8
#define SMOKE_CONFIRM_N 6
#define TEMP_CONFIRM_N 3
#define CUR_CONFIRM_N 3
// 轮显周期(单位ms)
#define DISPLAY_PAGE_MS 2000
// ACS712相关(示例:5A型号,灵敏度185mV/A,Vref=5V)
#define VREF 5.0f
#define ACS_OFFSET (VREF / 2.0f) // 输出中心
#define ACS_SENS 0.185f // V/A
// ===================== 阈值(可由按键设置) =====================
static float TH_Temp = 60.0f; // 温度阈值
static uint16_t TH_Smoke = 600; // 烟雾阈值(ADC)
static float TH_Cur = 3.0f; // 电流阈值(A)
// ===================== 当前测量值 =====================
static float g_Temp = 25.0f;
static uint16_t g_Smoke = 0;
static float g_Cur = 0.0f;
// ===================== 报警状态 =====================
static bool g_alarm = false;
static bool alarm_temp = false;
static bool alarm_smoke = false;
static bool alarm_cur = false;
// ===================== 显示页面控制 =====================
typedef enum {
PAGE_TEMP = 0,
PAGE_SMOKE,
PAGE_CUR
} DispPage;
static DispPage g_page = PAGE_TEMP;
static uint32_t g_page_timer = 0;
// ===================== 硬件接口(需按平台实现) =====================
// 读取温度传感器(可ADC或DS18B20)
float HW_ReadTemp(void);
// 读取烟雾传感器ADC
uint16_t HW_ReadSmokeADC(void);
// 读取电流传感器ADC(ACS712)
uint16_t HW_ReadCurADC(void);
// 数码管显示:写入要显示的4位或8位缓冲
void HW_SegDisplay_Temp(float t);
void HW_SegDisplay_Smoke(uint16_t s);
void HW_SegDisplay_Cur(float c);
// 蜂鸣器与LED控制
void HW_Beep(bool on);
void HW_LED(bool on);
// 按键扫描与阈值设置处理
void HW_KeyTask(void);
// 获取系统毫秒计数
uint32_t HW_Millis(void);
// ===================== 工具:平均滤波 =====================
static uint16_t avg_u16(uint16_t (*read_fn)(void))
{
uint32_t sum = 0;
for(uint8_t i=0;i<SAMPLE_AVG_N;i++)
{
sum += read_fn();
}
return (uint16_t)(sum / SAMPLE_AVG_N);
}
// ===================== 电流RMS计算(简化) =====================
// 在固定窗口内采样N次,计算RMS电流
static float ACS712_CalcRMS(uint16_t sample_cnt)
{
float sum_sq = 0.0f;
for(uint16_t i=0;i<sample_cnt;i++)
{
uint16_t adc = HW_ReadCurADC();
float v = (float)adc * VREF / ADC_MAX;
float dv = v - ACS_OFFSET; // 去除偏置
sum_sq += dv * dv;
}
float v_rms = sqrtf(sum_sq / sample_cnt);
float i_rms = v_rms / ACS_SENS;
return i_rms;
}
// ===================== 报警判定(连续确认) =====================
static void Alarm_Judge(void)
{
static uint8_t cnt_t = 0, cnt_s = 0, cnt_c = 0;
// 温度判定
if(g_Temp >= TH_Temp) {
if(cnt_t < 255) cnt_t++;
} else cnt_t = 0;
// 烟雾判定
if(g_Smoke >= TH_Smoke) {
if(cnt_s < 255) cnt_s++;
} else cnt_s = 0;
// 电流判定
if(g_Cur >= TH_Cur) {
if(cnt_c < 255) cnt_c++;
} else cnt_c = 0;
alarm_temp = (cnt_t >= TEMP_CONFIRM_N);
alarm_smoke = (cnt_s >= SMOKE_CONFIRM_N);
alarm_cur = (cnt_c >= CUR_CONFIRM_N);
g_alarm = alarm_temp || alarm_smoke || alarm_cur;
}
// ===================== 报警输出控制(节奏) =====================
static void Alarm_OutputTask(void)
{
static uint32_t t = 0;
static bool on = false;
if(!g_alarm) {
HW_Beep(false);
HW_LED(false);
return;
}
// 简单节奏:500ms翻转一次
if(HW_Millis() - t >= 500) {
t = HW_Millis();
on = !on;
HW_Beep(on);
HW_LED(on);
}
}
// ===================== 显示任务(轮显) =====================
static void Display_Task(void)
{
uint32_t now = HW_Millis();
if(now - g_page_timer >= DISPLAY_PAGE_MS)
{
g_page_timer = now;
g_page = (DispPage)((g_page + 1) % 3);
}
// 若报警,可优先显示触发报警的参数
if(g_alarm)
{
if(alarm_temp) g_page = PAGE_TEMP;
else if(alarm_smoke) g_page = PAGE_SMOKE;
else if(alarm_cur) g_page = PAGE_CUR;
}
if(g_page == PAGE_TEMP) HW_SegDisplay_Temp(g_Temp);
else if(g_page == PAGE_SMOKE)HW_SegDisplay_Smoke(g_Smoke);
else HW_SegDisplay_Cur(g_Cur);
}
// ===================== 主循环 =====================
void App_Loop(void)
{
static uint32_t sample_timer = 0;
uint32_t now = HW_Millis();
// 采样周期:500ms更新一次
if(now - sample_timer >= 500)
{
sample_timer = now;
// 温度读取(示例直接调用)
g_Temp = HW_ReadTemp();
// 烟雾读取(平均滤波)
g_Smoke = avg_u16(HW_ReadSmokeADC);
// 电流RMS计算(简化:采样100点)
g_Cur = ACS712_CalcRMS(100);
// 报警判定
Alarm_Judge();
}
// 按键任务(阈值设置)
HW_KeyTask();
// 显示任务
Display_Task();
// 报警输出任务
Alarm_OutputTask();
}
-
程序设计关键点与工程优化建议
7.1 多参数系统必须采用任务调度思路
同时采集多个传感器并动态显示,如果程序采用大量阻塞延时,会导致显示闪烁、按键不灵敏、报警响应变慢。采用定时器节拍 + 任务轮询结构可以确保:
- 采样稳定(固定周期)
- 显示流畅(高频扫描)
- 报警及时(超限后快速触发)
- 便于扩展更多功能(如无线通信、数据记录)
7.2 连续确认与回差能显著降低误报
温度、烟雾、电流都可能出现短时尖峰或波动。连续确认(N次超限才报警)能过滤瞬态干扰;回差能避免报警频繁解除/再次触发,从而让系统行为更符合真实应用需求。
7.3 ACS712交流电流测量必须处理偏置与RMS
ACS712输出中心在Vcc/2,采样时必须扣除偏置,否则计算电流会出现很大误差。同时交流电流必须用RMS或近似方法计算,直接读取单点ADC无法代表真实电流。即使系统用于报警,也必须保证计算方法正确,才能确保阈值设置有效。
7.4 传感器预热与标定不可忽略
气敏烟雾传感器预热不充分会导致漂移大、误报多。系统上电后应设置预热阶段(例如30秒或60秒),预热完成后再进入正常报警判定。同时建议在现场标定烟雾阈值,以适应不同环境背景浓度。
7.5 可扩展漏电保护为"外部断电执行"
本设计的漏电保护以报警预警为主,进一步工程化可以加入继电器或接触器控制:
- 检测到异常电流后自动切断负载供电
- 防止线路持续发热引发火灾
- 并保持报警与故障锁定
此扩展能显著提升系统在电气火灾防护方面的实用价值。
7.6 抗干扰设计与硬件布线建议
- 模拟信号线尽量短,远离蜂鸣器、电源转换、继电器等强干扰源;
- ADC参考地与数字地单点汇聚;
- 每个传感器模块旁加去耦电容;
- 对电流传感器输出加RC滤波抑制高频噪声;
- 必要时加看门狗防止程序跑飞导致报警失效。
-
系统总结
本设计完成了一套基于单片机的温度、烟雾与漏电电流综合火灾报警系统方案。系统通过温度传感器监测环境热异常,通过烟雾传感器检测烟雾浓度变化,通过ACS712电流传感器监测电流波动与异常,实现多参数联合监测;利用数码管动态显示温度、烟雾浓度与电流值,直观呈现环境安全状态;通过按键接口允许用户自定义报警阈值,适配不同场景需求;当任一参数超过设定阈值时,系统自动启动声光报警模块,及时提醒用户采取应对措施;同时集成电流监测预警功能,有效减少电气火灾隐患。
在电路设计方面,系统采用模块化结构,将传感器采集、A/D转换、显示驱动、按键输入与报警输出分层设计,并通过滤波与电源稳定措施提升采样精度;在程序设计方面,采用定时器节拍与任务轮询方式实现稳定采样、动态显示、阈值比较与报警输出,并通过连续确认、滤波与回差机制提高报警准确性和抗干扰能力。该系统结构完整、功能丰富、扩展性强,可用于家庭、办公、仓储及电气设备监控等多种场景,为火灾早期预警与电气安全防护提供可靠技术支撑。