当前位置: 首页 > news >正文

基于STM32的智能火灾报警系统设计

✌️✌️大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是基于《基于STM32的智能火灾报警系统设计》。

目录

1、系统功能

2.1、硬件清单

2.2、功能介绍

2.3、控制模式

2、演示视频和实物

3、系统设计框图

4、软件设计流程图

5、原理图

6、主程序

7、总结


1、系统功能

2.1、硬件清单

STM32F103C8T6 最小核心控制板 + 0.96 寸 OLED 显示屏 + ESP866-01s + 继电器 + DHT11 温湿度传感器 + 烟雾传感器 + 蜂鸣器 + 火焰传感器 + 风扇 + 4 按键 + 后备电池

2.2、功能介绍

(1)STM32F103C8T6 最小核心控制板:作为系统主控芯片,负责协调各硬件模块工作及数据处理。
(2)0.96 寸 OLED 显示屏(I²C 通讯协议):实时显示温湿度、烟雾浓度、火焰状态(0 无明火 / 1 有明火)、阈值参数及系统工作模式。
(3)ESP8266-01s:连接阿里云平台,实现手机 APP 与系统的远程数据交互及设备控制。
(4)继电器:控制加湿器(或水泵)启停,自动模式下检测到明火时触发喷水灭火。
(5)DHT11 温湿度传感器:检测室内温度和湿度,为系统自动控制提供数据依据。
(6)烟雾传感器:监测环境烟雾浓度,超过设定阈值时触发报警及联动设备。
(7)蜂鸣器:与红色指示灯组成声光报警系统,检测到异常时发出声音警报。
(8)火焰传感器:检测是否存在明火,输出数字信号(1 表示检测到明火),触发加湿器或水泵启动。
(9)风扇及外围电路:自动模式下,当温度或烟雾浓度超过阈值时启动排风;手动模式下可通过按键直接控制。
(10)4 按键
  - 第 1 个按键:模式切换(自动 / 手动)及返回功能;
  - 第 2-4 个按键:自动模式下调整温度、烟雾阈值(通过按键加减);手动模式下控制风扇、加湿器、蜂鸣器启停。
(11)后备电池:系统断电后为时钟供电,确保时间准确性。

2.3、控制模式

(1)自动模式
  - 触发条件:当烟雾浓度>烟雾阈值或温度>温度阈值时,自动启动风扇;
  - 当检测到明火(火焰传感器输出 1)时,立即启动加湿器(或水泵);
  - 支持通过按键设置温度阈值(标识 “WY”)和烟雾阈值(标识 “YY”),阈值调整后实时同步至云平台及手机 APP。
(2)手动模式
  - 通过第 2-4 个按键直接控制风扇、加湿器、蜂鸣器启停,与传感器检测值无关;
  - 手机 APP 无法远程控制手动模式下的外设。
(3)远程模式(依赖阿里云平台):
  - 通过手机 APP 实时查看温湿度、烟雾浓度、火焰状态等数据;
  - 远程设置温度 / 烟雾阈值,控制声光报警、加湿器、风扇的开关状态;
  - 仅在自动模式下支持远程控制,手动模式下远程控制功能锁定。


2、演示视频和实物

基于STM32的火灾报警系统设计

 


3、系统设计框图


4、软件设计流程图


5、原理图

 


6、主程序

#include "sys.h"                //头文件
/***********************************************************************************************
同学好!我们是5132单片机设计,定制单片机设计,实物和说明书均可定制,欢迎大家咨询。VX:lwfw123456789
其他项目演示视频和说明请大家移步哔哩哔哩、CSDN和公众号等。
淘宝:5132单片机设计
哔哩哔哩:5132单片机设计
CSDN:    5132单片机设计
公众号:  5132单片机设计
抖音  :  5132单片机设计
小红书:  5132单片机设计
咸鱼:    5132单片机设计
************************************************************************************************/
#include "delay.h"
#include "led.h"
#include "Key.h"
#include "Buzzer.h"
#include "OLED.h"
#include "AD.h"
#include "MyRTC.h"
#include "dht11.h"
#include "time2.h"#include "iot_wifi_mqtt.h"         //阿里云
#include "my_usart1.h"             //串口1调试
u16 SystemTimer = 0;               //变量声明全局时间变量uint32_t bufe[10];                     //存储传感器采集的数据
uint16_t AD0, AD2;             //存储5路ADC值uint32_t YanYu = 80;
uint32_t WenYu = 40;u8 temp, humi;                                //存放温湿度
u8 state, state2 = 2, state2_1, state2_2, state3;      //按键状态标志
u8 t = 0;                                     //传感器读取时间间隔
uint8_t KeyNum;                               //存储按键值
u16 ii = 0;                                   //步进电机循环
extern u8 flag;                               //远程控制标志
u8 flag2 = 0, flag1, flag3;uint16_t RTC_Time[] = {0, 0, 0};void ZiDong()
{if ((bufe[0] > YanYu) || (bufe[2] > WenYu)){Feng_ON();}else{Feng_OFF();}if (bufe[1] == 1){Shi_ON();}else{Shi_OFF();}if (KeyNum == 2)                          //自动模式下PB0按键控制阈值切换{delay_ms(20);if (KeyNum == 2){state3++;if (state3 > 1){state3 = 0;}}}if (state3 == 1){if (KeyNum == 3)YanYu++;if (KeyNum == 4)YanYu--;}if (state3 == 0){if (KeyNum == 3)WenYu++;if (KeyNum == 4)WenYu--;}
}void shoudong()
{if (KeyNum == 2)        //按键PB0控制窗户开关{delay_ms(20);if (KeyNum == 2){state2++;if (state2 > 1){state2 = 0;}}}if (state2 == 0){Feng_ON();//外设操作}if (state2 == 1){Feng_OFF();//外设操作}if (KeyNum == 3)        //按键PB0控制窗户开关{delay_ms(20);if (KeyNum == 3){state2_1++;if (state2_1 > 1){state2_1 = 0;}}}if (state2_1 == 0){Shi_ON();//外设操作}if (state2_1 == 1){Shi_OFF();//外设操作}if (KeyNum == 4)        //按键PB0控制窗户开关{delay_ms(20);if (KeyNum == 4){state2_2++;if (state2_2 > 1){state2_2 = 0;}}}if (state2_2 == 1){Buzzer_Turn();//外设操作}if (state2_2 == 0){Buzzer_OFF();//外设操作}
}int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级delay_init();      //延时函数初始化My_USART1_Init();LED_Init();            //初始化与LED连接的硬件接口DHT11_Init();Buzzer_Init();             //下面为外设初始化OLED_Init();OLED_Clear();Key_Init();AD_Init();MyRTC_Init();//    OLED_ShowString(2, 3, "WIFI");
//      OLED_ShowChinese(2, 4, 68);
//      OLED_ShowChinese(2, 5, 69);
//      OLED_ShowChinese(2, 5, 70);
//    OLED_ShowString(2, 11, "....");//上传云端相关WiFi_ResetIO_Init();        //WIFI复位引脚初始化PA4AliIoT_Parameter_Init();//阿里云初始化参数,得到客户端ID,用户名和密码while (1){Connect_server();      //连接服务器的函数MyRTC_ReadTime();    //读取时间(每一个页面都有时间显示)OLED_ShowNum(1, 1, MyRTC_Time[3], 2);    //时OLED_ShowString(1, 3, ":");OLED_ShowNum(1, 4, MyRTC_Time[4], 2);    //分OLED_ShowString(1, 6, ":");OLED_ShowNum(1, 7, MyRTC_Time[5], 2);   //秒DHT11_Read_Data(&temp, &humi);  //读取温湿度并显示在OLED上bufe[2] = temp;bufe[3] = humi;AD0 = AD_GetValue(ADC_Channel_1);    //烟雾传感器if (AD0 > 4000)AD0 = 4000;bufe[0] = (u8)(100 - (AD0 / 40));if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7) == 0) //火焰传感器{bufe[1] = 1;}else bufe[1] = 0;OLED_ShowChinese(2, 1, 60);    //烟雾OLED_ShowChinese(2, 2, 61);OLED_ShowString(2, 5, ":");OLED_ShowNum(2, 6, bufe[0], 2);OLED_ShowChinese(2, 5, 71);OLED_ShowChinese(2, 6, 72);OLED_ShowString(2, 13, ":");OLED_ShowNum(2, 14, bufe[1], 2);OLED_ShowChinese(3, 1, 26);    //烟雾OLED_ShowChinese(3, 2, 28);OLED_ShowString(3, 5, ":");OLED_ShowNum(3, 6, bufe[2], 2);OLED_ShowChinese(3, 5, 27);    //烟雾OLED_ShowChinese(3, 6, 28);OLED_ShowString(3, 13, ":");OLED_ShowNum(3, 14, bufe[3], 2);OLED_ShowString(4, 1, "W_Y:");OLED_ShowNum(4, 5, WenYu, 2);OLED_ShowString(4, 10, "Y_Y:");OLED_ShowNum(4, 14, YanYu, 2);KeyNum = Key_GetNum();if (KeyNum == 1){state2 = 2,delay_ms(20);if (KeyNum == 1){state++;if (state > 2){state = 0;}}}if (state == 0)    //远程模式{OLED_ShowChinese(1, 7, 49);OLED_ShowChinese(1, 8, 50);}if (state == 1)    //自动模式{OLED_ShowChinese(1, 7, 51);OLED_ShowChinese(1, 8, 52);ZiDong();}if (state == 2)    //手动模式{OLED_ShowChinese(1, 7, 18);OLED_ShowChinese(1, 8, 52);shoudong();}}
}void TimeSet()           //设置时间
{u8 T_state, T_state1;if (KeyNum == 2)    //PB10{delay_ms(20);if (KeyNum == 2){T_state++;if (T_state > 2){T_state = 0;}}}if (T_state == 0)    //时间显示模式{MyRTC_ReadTime();OLED_ShowNum(2, 5, MyRTC_Time[3], 2);  //时OLED_ShowNum(2, 8, MyRTC_Time[4], 2);//分OLED_ShowNum(2, 11, MyRTC_Time[5], 2);//秒RTC_Time[0] = MyRTC_Time[3];RTC_Time[1] = MyRTC_Time[4];RTC_Time[2] = MyRTC_Time[5];}if (T_state == 1)    //修改时间{if (KeyNum == 3){delay_ms(20);if (KeyNum == 3){T_state1++;if (T_state1 > 2){T_state1 = 0;}}}if (T_state1 == 0)  //修改时{if (KeyNum == 4)RTC_Time[0]++;if (RTC_Time[0] > 23 & RTC_Time[0] < 100)RTC_Time[0] = 0;if (RTC_Time[0] > 100)RTC_Time[0] = 23;OLED_ShowNum(2, 5, RTC_Time[0], 2);  //时}if (T_state1 == 1)  //修改分{if (KeyNum == 4)RTC_Time[1]++;if (RTC_Time[1] > 59 & RTC_Time[1] < 100)RTC_Time[1] = 0;if (RTC_Time[1] > 100)RTC_Time[1] = 59;OLED_ShowNum(2, 8, RTC_Time[1], 2);  //时}if (T_state1 == 2)  //修改秒{if (KeyNum == 4)RTC_Time[2]++;if (RTC_Time[2] > 59)RTC_Time[2] = 0;if (RTC_Time[2] > 59 & RTC_Time[2] < 100)RTC_Time[2] = 0;if (RTC_Time[2] > 100)RTC_Time[2] = 59;OLED_ShowNum(2, 11, RTC_Time[2], 2);  //时}}if (T_state == 2){MyRTC_Time[3] = RTC_Time[0];MyRTC_Time[4] = RTC_Time[1];MyRTC_Time[5] = RTC_Time[2];MyRTC_SetTime();T_state = 0;}
}

7、总结

本文介绍了一种基于STM32F103C8T6的智能火灾报警系统设计。系统硬件包括核心控制板、多种传感器(温湿度、烟雾、火焰)、OLED显示屏、蜂鸣器、继电器和ESP8266-01s模块。系统支持三种控制模式:自动模式根据传感器数据联动控制风扇、水泵等设备;手动模式通过按键直接控制;远程模式通过阿里云平台实现手机APP监控。软件设计采用模块化编程,实现了数据采集、阈值调整、设备联动等功能。该系统具有实时监测、自动报警和远程控制等特点,为火灾预防提供了有效的智能化解决方案。


文章转载自:
http://bind.hfstrb.cn
http://ced.hfstrb.cn
http://antespring.hfstrb.cn
http://carle.hfstrb.cn
http://benzol.hfstrb.cn
http://carnificial.hfstrb.cn
http://beefwood.hfstrb.cn
http://cart.hfstrb.cn
http://aged.hfstrb.cn
http://barbet.hfstrb.cn
http://barefooted.hfstrb.cn
http://ageless.hfstrb.cn
http://bourgeoisify.hfstrb.cn
http://brigalow.hfstrb.cn
http://adventurously.hfstrb.cn
http://announciator.hfstrb.cn
http://bowl.hfstrb.cn
http://chiastolite.hfstrb.cn
http://byroad.hfstrb.cn
http://betel.hfstrb.cn
http://architectural.hfstrb.cn
http://caenogenesis.hfstrb.cn
http://annihilation.hfstrb.cn
http://astrosphere.hfstrb.cn
http://adas.hfstrb.cn
http://bodeful.hfstrb.cn
http://balzac.hfstrb.cn
http://bolster.hfstrb.cn
http://arctoid.hfstrb.cn
http://attitudinize.hfstrb.cn
http://www.dtcms.com/a/281768.html

相关文章:

  • 【人工智能99问】激活函数有哪些,如何选择使用哪个激活函数?(5/99)
  • ADAU系列DSP用MCU来做控制,怎么去理解这个逻辑
  • Vue3 + MapLibre 地图管理工具 useMap 使用指南
  • 牛客:HJ22 汽水瓶[华为机考][数字处理]
  • 基于Sentinel-1雷达数据的洪水动态监测(附完整GEE代码)
  • 深入理解红锁
  • Vue3入门-指令补充
  • 学习C++、QT---26(QT中实现记事本项目实现文件路径的提示、C++类模板、记事本的行高亮的操作的讲解)
  • 面向对象与面向过程、函数式编程
  • C++回顾 Day8
  • 【时时三省】(C语言基础)通过指针引用多维数组
  • 【09】MFC入门到精通——MFC 属性页对话框的 CPropertyPage类 和 CPropertySheet 类
  • burpsuite使用中遇到的一些问题(bp启动后浏览器无法连接)/如何导入证书
  • css实现烧香效果
  • 20.如何在 Python 字典中找到最小值或最大值的键?
  • 【卡尔曼滤波第六期】集合变换卡尔曼滤波 ETKF
  • 【Linux庖丁解牛】— 保存信号!
  • HTML网页结构(基础)
  • 【linux V0.11】init/main.c
  • 函数指针与指针函数练习讲解
  • 9、线程理论1
  • HostVDS 云服务器测评:平价入门、流媒体解锁全美、表现稳定
  • 暑假Python基础整理 --异常处理及程序调试
  • Redis 中的持久化机制:RDB 与 AOF
  • Java之Stream其二
  • 第二章 OB 存储引擎高级技术
  • 数学金融与金融工程:学科差异与选择指南
  • 【AI News | 20250714】每日AI进展
  • 为 Git branch 命令添加描述功能
  • 将 Vue 3 + Vite + TS 项目打包为 .exe 文件