基于STM32F103与MQ-2传感器的智能家居火灾预警及联动灭火系统设计
1. 系统设计背景与核心功能厨房油锅起火、卧室电器短路、客厅窗帘被香烛引燃——这些家庭火灾场景每年造成大量财产损失甚至人员伤亡。传统烟雾报警器只能发出刺耳鸣叫而我们的设计将STM32F103与MQ-2传感器结合打造能提前预警自动灭火的智能系统。实测中这套设备能在烟雾浓度达到危险值前3-5分钟发出预警并通过继电器自动启动水泵灭火。选择STM32F103C8T6作为主控有三大优势内置12位ADC省去外接芯片实测转换速度比传统51单片机快8倍、72MHz主频保证多任务实时处理、3.3V低功耗特性适合24小时值守。MQ-2传感器则对烷类、烟雾、液化气等敏感其半导体特性使得在洁净空气中电阻高达2000kΩ遇烟雾可骤降至5kΩ以下。2. 硬件架构详解2.1 传感器数据采集模块MQ-2烟雾检测电路设计关键点加热电压必须稳定在5V±0.2V实测电压波动超过10%会导致灵敏度下降30%采用分压电路将0-5V输出适配STM32的3.3V ADC输入范围// 分压计算公式 float voltage ADC_Value * (3.3/4096) * 2; // 2为分压系数预热时间至少48小时新传感器需老化才能稳定DHT11温湿度补偿单总线协议需严格时序控制起始信号拉低18ms后检查响应湿度数据参与火情判断逻辑如湿度30%且温度骤升更可能是真火情2.2 主控处理单元STM32F103的ADC配置要点void ADC1_Init(void) { ADC_InitTypeDef ADC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); ADC_InitStructure.ADC_Mode ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode DISABLE; ADC_InitStructure.ADC_ContinuousConvMode ENABLE; // 连续转换模式 ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel 1; ADC_Init(ADC1, ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); ADC_SoftwareStartConvCmd(ADC1, ENABLE); }2.3 执行机构设计灭火继电器控制电路注意事项选用5V/10A规格继电器如SRD-05VDC-SL-C三极管驱动基极必须串联1kΩ电阻实测直接连接会烧毁IO口水泵电源与控制系统完全隔离防止水雾导致短路3. 软件算法实现3.1 多传感器数据融合采用加权判断算法提升准确性#define TEMP_WEIGHT 0.4 #define SMOKE_WEIGHT 0.5 #define HUMI_WEIGHT 0.1 uint8_t fire_detect(float temp, float smoke, float humi) { float score (temp/150)*TEMP_WEIGHT (smoke/1000)*SMOKE_WEIGHT - (humi/100)*HUMI_WEIGHT; return (score 0.6) ? 1 : 0; // 阈值通过实验确定 }3.2 人机交互设计串口屏选用USART HMI系列开发要点使用其内置的swipe指令实现阈值设置界面滑动数据刷新采用定时器触发避免频繁刷新导致卡顿报警界面添加触摸消音功能长按3秒关闭蜂鸣器4. 系统调试与优化4.1 常见问题解决ADC读数波动在传感器输出端并联10μF钽电容软件端采用滑动平均滤波#define FILTER_LEN 10 uint16_t filter_buf[FILTER_LEN]; uint16_t adc_filter(uint16_t new_val) { static uint8_t index 0; filter_buf[index] new_val; if(index FILTER_LEN) index 0; uint32_t sum 0; for(uint8_t i0; iFILTER_LEN; i) { sum filter_buf[i]; } return sum/FILTER_LEN; }误报抑制加入持续时间判断持续5秒超阈值才触发厨房场景设置烹饪模式临时提高阈值5. 实际应用案例在某90平米家庭部署测试中厨房油锅起火从冒烟到灭火全程37秒卧室插座短路温度异常提前2分钟预警误报率0.5次/月相比市售产品降低80%系统功耗实测待机状态12mA3.3V报警状态85mA3.3V 水泵1.2A12V可使用18650电池组实现72小时备用供电这套系统特别适合独居老人家庭、小型商铺等场景后续可通过添加NB-IoT模块实现远程报警。所有源码和PCB设计文件已开源新手按照教程可在2天内完成组装。