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

基于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://www.xdnf.cn/news/15416.html

相关文章:

  • AI|大模型入门(六):GPT→盘古,国内外大模型矩阵速览
  • kotlin布局交互
  • 响应式编程入门教程第三节:ReactiveCommand 与 UI 交互
  • 【PTA数据结构 | C语言版】创建哈夫曼树
  • 医疗数据分析中标准化的作用
  • Java项目:基于SSM框架实现的学生档案管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
  • 剑指offer62_骰子的点数
  • Vue3入门-指令
  • brupsuite使用中遇到的一些问题(bp启动后浏览器无法连接)/如何导入证书
  • 智能体技术深度解析:从概念到企业级搭建指南
  • 安全参綉25暑假第一次作业
  • Student后台管理系统查询接口
  • CentOS服务器安装Supervisor使队列可以在后台运行
  • GAMES101 lec2-数学基础1(线性代数)
  • 为何说分布式 AI 推理已成为下一代计算方式
  • 特殊的整数-水仙花数
  • 【c++】c++11新特性(右值引用和移动语义)
  • Java报表导出框架
  • 详解BIO,NIO,AIO
  • 【git fetch submodule报错】Errors during submodule fetch 如何解决?
  • 【Java EE】多线程-初阶 认识线程(Thread)
  • urlencode、html实体编码、unicode
  • 进程---基础知识+命令+函数(fork+getpid+exit+wait+exec)
  • ACL流量控制实验
  • 12.如何判断字符串是否为空?
  • 记字节前端面试一道简单的算法题
  • 游戏玩法的专利博弈
  • 大话数据结构之 <链表>(C语言)
  • 使用 keytool 在服务器上导入证书操作指南(SSL 证书验证错误处理)
  • 【DOCKER】-4 dockerfile镜像管理