基于STM32的火灾报警装置的Proteus仿真

news/2024/11/25 8:26:45/

文章目录

  • 一、火灾报警
    • 1.题目要求
    • 2.思路
      • 2.1 主控
      • 2.2 传感器
      • 2.3 设定阈值--按键
      • 2.4 报警和通风
      • 2.5 OLED显示
      • 2.6 电源部分
      • 2.7 远程终端
    • 3.仿真
      • 3.1 未仿真时
      • 3.2 仿真开始,界面1
      • 3.3 切换界面2
      • 3.4 切换界面3
    • 4.仿真程序
      • 4.1 程序说明
      • 4.2 主函数
      • 4.3 OLED显示函数
  • 二、总结


一、火灾报警

1.题目要求

1、检测温度、烟雾浓度、火焰、一氧化碳浓度
2、设定温度阈值,高于阈值,蜂鸣器报警
3、设置烟雾浓度阈值,高于阈值报警,步进电机启动通风
4、检测环境火焰,发现火焰,蜂鸣器报警
5、oled显示温度、烟雾浓度、是否有火焰、一氧化碳浓度
6、手机端显示显示温度、烟雾浓度、是否有火焰、一氧化碳浓度

在这里插入图片描述

2.思路

2.1 主控

由系统框图可知我们需要一个单片机,这里首选还是STM32。因为有好几个传感器在Proteus仿真里面是没有的,得用滑动变阻器模拟,到时候就需要用到AD外设。

在这里插入图片描述

2.2 传感器

温度传感器Proteus仿真里面有常用的温度传感器DS18B20和温湿度传感器DHT11,这里选择DS18B20.

在这里插入图片描述
剩下的烟雾传感器,一氧化碳传感器,火焰传感器分别用滑动变阻器和开关去模拟。

在这里插入图片描述

2.3 设定阈值–按键

设定阈值的方式采用按键的形式,因为有多个阈值,所以这里规定了3个按键。

一个按键来切换显示的界面,在哪个界面下,另外两个按键就可以加减该界面下阈值的大小,是不是很方便。

在这里插入图片描述

2.4 报警和通风

报警和通风也是常见的,这里不详细描述了。

在这里插入图片描述
在这里插入图片描述

2.5 OLED显示

OLED显示温度、烟雾浓度、是否有火焰、一氧化碳浓度,要显示中文,这需要用到取模软件,如下所示:

在这里插入图片描述

参数设置为:

在这里插入图片描述

2.6 电源部分

在这里插入图片描述

2.7 远程终端

手机端显示显示温度、烟雾浓度、是否有火焰、一氧化碳浓度,仿真肯定是不能和手机端通讯的,所以老规矩放个远程终端。

在这里插入图片描述

3.仿真

3.1 未仿真时

在这里插入图片描述

3.2 仿真开始,界面1

在这里插入图片描述

3.3 切换界面2

在这里插入图片描述

3.4 切换界面3

CO浓度大于阈值,声光报警,开启风扇通风
在这里插入图片描述

4.仿真程序

4.1 程序说明

主控芯片:STM32F103C8
HICK:64MHZ
Systick: 1ms

烟雾传感器:ADC1(PA0)

CO传感器:ADC2(PA1)

DS18B20温度传感器:DAT(PA3)

模拟Wifi模块(Uart1):9600(PA9:tx1,PA10:rx1)

KEY按键:
KEY1(PB0)
KEY2(PB1)
KEY3(PB2)

火焰传感器:FLAME(PB4)

风扇:FAN(PB10)

OLED显示屏:SCL(PB12),SDA(PB13)

蜂鸣器:BUZZER(PB15)

4.2 主函数

/* Includes ------------------------------------------------------------------*/
#include "Drv_UserSystem.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
/*** @brief  main function.* @param  none* @retval none*/
int main(void)
{UserSystemInit();//用户配置初始化		while (1){			if (stSysTime.flg._100ms + TEN_MILLISECOND < Time_millis()) //10ms{stSysTime.flg._10ms = Time_millis();Key_Scan();//按键扫描						}if (stSysTime.flg._50ms + FIFTY_MILLISECOND < Time_millis()) //50ms{stSysTime.flg._50ms = Time_millis();						ADC_Scan();	//烟雾/CO浓度检测							}				if(stSysTime.flg._100ms + BEST_MILLISECOND < Time_millis()) //100ms{stSysTime.flg._100ms = Time_millis();					Receive_data_Handel();//数据接收判断 			Warning_function();//预警							OLED_Handel();//OLED显示								IWDG_ReloadCounter();//清开门狗 				}if (stSysTime.flg._1s + THOUSAND_MILLISECOND < Time_millis()) //1s{stSysTime.flg._1s = Time_millis();	Printf_Task();//打印任务			}}
}

4.3 OLED显示函数

/******************************************************************************** 函数名:OLED_Handel* 描述  :OLED显示* 输入  :void* 输出  :void* 调用  :初始化* 备注  :100ms
*******************************************************************************/
void OLED_Handel(void)
{  	if(Interface_switching == 0){		OLED_Show_Character(1,1,0,16);//温OLED_Show_Character(1,2,1,16);//度	OLED_Show_Character(1,3,2,16);//:			temperature = DS18B20_Get_Temp();temperature = (-1) * temperature;//				printf("temperature=%d\r\n",temperature);	 Temp_High = temperature / 10;if(Temp_High < 10){if(Temperature_jump == 1){Temperature_jump = 0;OLED_Part_Clear(1,8,9);}OLED_ShowNum(1,10,Temp_High,1);			}else{Temperature_jump = 1;OLED_ShowNum(1,9,Temp_High,2);				}if(Temp_High > Temp_Threshold){Warning1 = 1;					}else{Warning1 = 0;							}				Temp_Low = temperature % 10;OLED_ShowNum(1,12,Temp_Low,1);OLED_ShowString(1, 11, ".");	OLED_Show_Character(1,7,3,16);	OLED_ShowString(1, 15, "C");	OLED_Show_Character(2,1,4,16);//阈OLED_Show_Character(2,2,5,16);//值	OLED_Show_Character(2,3,2,16);//:		OLED_ShowNum(2,10,Temp_Threshold,2);					OLED_Show_Character(2,7,3,16);	OLED_ShowString(2, 15, "C");					if(FLAME_Flag){OLED_Show_Character(4,1,8,16);//火OLED_Show_Character(4,2,9,16);//焰	OLED_Show_Character(4,3,2,16);//:			OLED_Show_Character(4,5,10,16);//有						}else{OLED_Show_Character(4,1,8,16);//火OLED_Show_Character(4,2,9,16);//焰	OLED_Show_Character(4,3,2,16);//:	OLED_Show_Character(4,5,11,16);//无								}					}	else if(Interface_switching == 1){		OLED_Show_Character(1,1,6,16);//烟OLED_Show_Character(1,2,7,16);//雾	OLED_Show_Character(1,3,2,16);//:		if(ADC1_Value > ADC1_Threshold){Warning2 = 1;					}else{Warning2 = 0;							}			if(ADC1_Value < 10){OLED_Part_Clear(1,8,9);					OLED_ShowNum(1,10,ADC1_Value,1);						}else{					OLED_ShowNum(1,9,ADC1_Value,2);	}					OLED_ShowString(1, 12, "%");				OLED_Show_Character(2,1,4,16);//阈OLED_Show_Character(2,2,5,16);//值	OLED_Show_Character(2,3,2,16);//:			OLED_ShowNum(2,9,ADC1_Threshold,2);					OLED_ShowString(2, 12, "%");					}else if(Interface_switching == 2){		OLED_ShowString(1, 1, "CO");	OLED_Show_Character(1,2,2,16);//:	if(ADC2_Value > ADC2_Threshold){Warning3 = 1;					}else{Warning3 = 0;							}					if(ADC2_Value < 10){OLED_Part_Clear(1,8,9);								OLED_ShowNum(1,10,ADC2_Value,1);						}else{					OLED_ShowNum(1,9,ADC2_Value,2);	}				OLED_ShowString(1, 12, "%");				OLED_Show_Character(2,1,4,16);//阈OLED_Show_Character(2,2,5,16);//值	OLED_Show_Character(2,3,2,16);//:			OLED_ShowNum(2,9,ADC2_Threshold,2);					OLED_ShowString(2, 12, "%");				}		
}

二、总结

今天主要讲了基于STM32的火灾报警装置的Proteus仿真。

感谢你的观看!

在这里插入图片描述


http://www.ppmy.cn/news/1549768.html

相关文章

什么是Axios,有什么特点

什么是 Axios&#xff1f; Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;可以用于浏览器和 Node.js 环境。它由 Matt Zabriskie 创建&#xff0c;旨在提供一个简单、灵活且功能强大的 HTTP 请求库。Axios 支持所有现代浏览器和 Node.js&#xff0c;可以用于发送 GET、…

第2.5节 AI文本——做课题

让AI文本工具kimi学习也很重要&#xff0c;例如我们要做一个课题&#xff0c;让它学习类似的内容&#xff0c;这些内容可能是docx文件、也可能是pdf文件、也可能是ppt文件&#xff0c;我们可以上传附件。 下图中的“曲别针”作用就是上传附件的。 Prompt 请认真学习附件中的三…

VSCode打开c#项目报错:DotnetAcquisitionTimeoutError

VSCode打开c#项目&#xff0c;会自动下载.NET环境&#xff0c;下载不了报超时&#xff0c;详情如下&#xff1a; ms-dotnettools.csharp tried to install .NET 8.0.11~x64 but that install had already been requested. No downloads or changes were made. ms-dotnettools.…

微信小程序 表单验证(async-validator)

一. 安装 npm i async-validator 二. 代码 import Schema from async-validator; // 引用 Page({data: {name: , // 要验证的数据},// 对数据进行验证onValidator() {// 定义规则const rules {// key 验证规则的名称 名字需要和验证的数据保持一致name: [// required:…

第21周:机器学习

目录 摘要 Abstract 一、ARIMA模型 1、时间序列模型 &#xff08;1&#xff09;时间序列的分析方法 &#xff08;2&#xff09;时间序列的预处理 &#xff08;3&#xff09;ARIMA模型的引入 2、AR模型 3、MA模型 4、小结 二、K-means聚类算法 三、实验 1、数据处…

PPT文件过大的原因排查

1、文件中包含很多图片或者视频文件 该问题压缩图片或者减少图片即可 2、文件中嵌入了字体 WPS&#xff1a;点击左上角-工具-选项-常规与保存-将字体嵌入文件&#xff0c;取消勾选 Office&#xff1a;点击左上角-文件-选项-保存-将字体嵌入文件&#xff0c;取消勾选

C语言进阶6:文件操作

本章重点 为什么使用文件什么是文件文件的打开和关闭文件的顺序读写文件的随机读写文本文件和二进制文件文件读取结束的判定文件缓冲区 文章目录 1.为什么使用文件2.什么是文件2.1 程序文件2.2 数据文件2.3 文件名 3.文件的打开和关闭3.1 文件指针3.2 文件的打开和关闭 4.文件…

[论文阅读]Can GNN be Good Adapter for LLMs?

Can GNN be Good Adapter for LLMs? http://arxiv.org/abs/2402.12984 WWW 24: Proceedings of the ACM Web Conference 2024 研究背景和问题&#xff1a; &#xff08;1&#xff09;实际应用场景和问题提出 大型语言模型&#xff08;LLM&#xff09;在自然语言处理&…