一、系统概述
基于STM32F103C8T6微控制器 ,采用红外散射型光电感烟传感器 ,实现高灵敏度、低误报 的火灾预警功能。系统符合GB 4715-2024《点型感烟火灾探测器》标准,支持动态阈值调整、污染检测、远程监控 等功能,适用于家庭、办公室、仓库等场景。
二、硬件设计
1. 核心硬件选型
| 模块 | 型号/参数 | 功能 |
|---|---|---|
| 主控 | STM32F103C8T6(72MHz,12位ADC) | 信号采集、滤波、报警控制 |
| 光电传感器 | 红外散射型(如E3F3-D12) | 检测烟雾颗粒(散射光信号) |
| 信号调理 | LM358运算放大器 | 放大传感器输出信号(增益1000) |
| 报警模块 | 有源蜂鸣器+红色LED | 声光报警 |
| 显示模块 | 0.96寸OLED(I2C) | 显示烟雾浓度、报警状态 |
| 通信模块 | HC-05蓝牙模块(UART) | 远程数据传输(手机APP) |
| 电源 | 5V USB供电+锂电池(3.7V) | 系统供电(支持断电续航) |
2. 电路设计要点
(1)光电传感器接口
-
传感器输出模拟信号 (0-5V),连接至STM32的PA0(ADC1通道0);
-
采用LM358 构成同相放大电路,增益设置为1000倍(将传感器输出的mV级信号放大至V级,适配STM32 ADC输入范围);
-
电路图:
cVCC(5V) → 传感器VCC 传感器OUT → LM358同相输入端 → LM358输出 → PA0(STM32) LM358反相输入端 → 反馈电阻(1MΩ) → 输出端
(2)报警与显示电路
-
蜂鸣器:通过三极管(S8050)驱动,基极连接STM32的PB0(GPIO输出);
-
LED:阳极通过1kΩ电阻 连接STM32的PB1(GPIO输出),阴极接地;
-
OLED:I2C接口,SCL连接PB6 ,SDA连接PB7(STM32硬件I2C)。
三、软件设计(C语言实现)
1. 主程序流程
c
#include "stm32f10x.h"
#include "adc.h"
#include "filter.h"
#include "oled.h"
#include "bluetooth.h"
#include "alarm.h"
// 系统状态
typedef struct {
uint8_t alarm_flag; // 报警标志(0:正常, 1:报警)
float smoke_value; // 烟雾浓度(%obs/m)
float threshold; // 报警阈值(%obs/m)
} SystemState;
int main(void) {
// 初始化硬件
System_Init(); // 时钟、GPIO、ADC、OLED、蓝牙
Filter_Init(); // 初始化滤波算法(复合偏置滤波)
Alarm_Init(); // 初始化报警模块(蜂鸣器、LED)
SystemState sys_state = {0};
sys_state.threshold = 0.5; // 默认阈值(%obs/m)
// 主循环
while (1) {
// 1. 采集烟雾信号(ADC转换)
uint16_t adc_value = ADC_Read(ADC_Channel_0);
float voltage = (adc_value / 4095.0f) * 3.3f; // 转换为电压(0-3.3V)
// 2. 数字滤波(去除噪声与基线漂移)
float filtered_voltage = Filter_Process(voltage);
// 3. 转换为烟雾浓度(%obs/m)
sys_state.smoke_value = Voltage_To_Smoke(filtered_voltage);
// 4. 报警判断(超过阈值则触发)
if (sys_state.smoke_value > sys_state.threshold) {
sys_state.alarm_flag = 1;
Alarm_Trigger(); // 声光报警
} else {
sys_state.alarm_flag = 0;
Alarm_Reset(); // 停止报警
}
// 5. 显示与远程传输
OLED_Display(sys_state.smoke_value, sys_state.threshold, sys_state.alarm_flag);
Bluetooth_Send(sys_state.smoke_value, sys_state.alarm_flag);
// 6. 低功耗管理(空闲时休眠)
if (!sys_state.alarm_flag) {
Enter_Sleep_Mode(1000); // 休眠1秒
}
}
}
2. 关键算法实现
(1)数字滤波(复合偏置滤波)
针对光电信号的基线漂移 与高频噪声 ,采用复合偏置滤波算法(结合FIR滤波与趋势判断):
c
// 复合偏置滤波结构体
typedef struct {
float prev_output; // 上一次输出值
float threshold; // 报警阈值
uint8_t count; // 超过阈值的次数
} CompositeFilter;
// 初始化滤波
void Filter_Init(CompositeFilter* filter, float threshold) {
filter->prev_output = 0.0f;
filter->threshold = threshold;
filter->count = 0;
}
// 滤波处理
float Filter_Process(CompositeFilter* filter, float input) {
// 1. FIR滤波(去除高频噪声)
float fir_output = (input + filter->prev_output) / 2.0f;
// 2. 偏置处理(去除基线漂移)
float bias = fir_output - filter->prev_output;
float output = fir_output - bias;
// 3. 趋势判断(超过阈值则计数)
if (output > filter->threshold) {
filter->count++;
if (filter->count > 3) { // 连续3次超过阈值则触发报警
filter->count = 0;
return output;
}
} else {
filter->count = 0;
}
filter->prev_output = output;
return output;
}
(2)烟雾浓度转换
通过标定实验 (用标准烟箱测试),建立电压-烟雾浓度的线性关系:
c
// 电压转换为烟雾浓度(%obs/m)
float Voltage_To_Smoke(float voltage) {
// 标定曲线:smoke = a*voltage + b(a=0.2, b=0.1,需根据实际传感器调整)
return 0.2f * voltage + 0.1f;
}
(3)报警控制
c
// 触发报警(声光)
void Alarm_Trigger(void) {
GPIO_SetBits(GPIOB, GPIO_Pin_0); // 蜂鸣器响
GPIO_SetBits(GPIOB, GPIO_Pin_1); // LED亮
}
// 停止报警
void Alarm_Reset(void) {
GPIO_ResetBits(GPIOB, GPIO_Pin_0); // 蜂鸣器停
GPIO_ResetBits(GPIOB, GPIO_Pin_1); // LED灭
}
参考代码 消防报警器,光电感烟探测设计 www.youwenfan.com/contentcss/160905.html
四、符合GB 4715-2024标准设计
1. 响应阈值调整
-
支持动态阈值调整(通过手机APP或按键),适应不同场景(如厨房、仓库);
-
阈值范围:0.1-2.0%obs/m(符合GB 4715-2024中A型光电探测器的要求)。
2. 污染检测功能
-
定期(每6个月)检测传感器污染程度(通过测量 baseline 电压变化);
-
当污染超过阈值(如 baseline 电压变化超过0.5V),触发污染报警(OLED显示"请清洁传感器")。
3. 电磁兼容(EMC)设计
-
传感器信号线采用屏蔽线(如RVVP 2×0.5),减少电磁干扰;
-
电源电路增加π型滤波(10μF电容+100Ω电阻+10μF电容),抑制电源噪声;
-
符合GB/T 17626系列标准(静电放电、射频电磁场辐射抗扰度等)。
五、测试与验证
1. 功能测试
| 测试项 | 方法 | 预期结果 |
|---|---|---|
| 烟雾检测 | 用香烟烟雾靠近传感器 | 报警触发(蜂鸣器响、LED亮) |
| 阈值调整 | 通过APP将阈值设为1.0%obs/m | 烟雾浓度超过1.0%时触发报警 |
| 污染检测 | 用灰尘覆盖传感器 | OLED显示"请清洁传感器" |
| 远程监控 | 通过手机APP查看烟雾浓度 | 数据显示正常(与实际一致) |
2. 性能测试
-
灵敏度 :对0.5%obs/m的标准烟雾(GB 4715-2024)响应时间≤10秒;
-
误报率 :在厨房环境(油烟、蒸汽)中,误报率≤1次/月;
-
续航时间:锂电池供电(3.7V/1000mAh),连续工作时间≥72小时。
六、总结
本设计基于STM32实现了高可靠性、低误报 的光电感烟火灾报警器,符合GB 4715-2024标准。系统通过复合滤波算法 解决了光电信号的噪声与漂移问题,通过动态阈值调整 适应了不同场景需求,通过污染检测保证了长期稳定性。