基于STM32的火灾烟雾报警器Proteus仿真设计(仿真+程序+设计报告+讲解视频)

news/2024/12/15 21:22:19/

基于STM32的火灾烟雾报警器Proteus仿真设计

  • 1.主要功能
  • 2.仿真
  • 3. 程序
  • 4. 设计报告
  • 5. 资料清单

基于STM32的火灾烟雾报警器Proteus仿真设计(仿真+程序+设计报告+讲解视频)

仿真图proteus 8.9

程序编译器:keil 5

编程语言:C语言

设计编号:C0097

1.主要功能

基于STM32的火灾烟雾报警器Proteus仿真设计

\1. 烟雾采集传感器选用MQ-2,由于该传感器输出的是模拟信号,STM32内部ADC将模拟信号转为数字信号。

\2. 温度采集使用DS18B20数字传感器,温度测量范围-55到128℃,测量精度±0.1℃;

\3. 显示设备使用1602液晶,可以在屏幕上显示实时烟雾浓度值、温度值,以及报警值等信息;

\4. 报警模块则采用蜂鸣器和LED灯组成,两个LED分别代表了烟雾报警指示和温度报警指示,无论哪个检测元素超标,蜂鸣器都会鸣叫报警;

\5. 设计采用3个按键作为操作输入设备,可以用来调节报警阈值的大小;

6.串口实时发送温度检测值、烟雾浓度测量值和报警信息给PC机。

主要硬件设备:STM32F103+LCD1602+DS18B20+蜂鸣器

资料下载链接:

通过百度网盘分享的文件:KEY_C0097

https://pan.baidu.com/s/1uSK6K6QSeRwRePmlgmFkuQ?pwd=f05a

提取码:f05a

2.仿真

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。

STM32单片机实时检测DS18B20温度测量及显示温度测量范围-55℃到128℃,测量精度±0.1℃,串口实时传输检测温度给PC机。图示温度阈值100℃,烟雾浓度报警值40%。img

下图烟雾浓度报警值40%,检测烟雾浓度超出范围,声光报警,串口有相应提示。

img

温度和烟雾报警阈值可以通过按键设置。LCD1602会有对应的指示。

img

3. 程序

程序是用keil5 mdk版本打开的,如果打开有问题,核实下keil的版本。程序是HAL版本编写的,有stm32cubemx配置文件。有注释可以结合讲解视频理解。

关键代码

int main(void)
{/* USER CODE BEGIN 1 */char data_str1[20]; 
//	char data_str2[20]; char data_str2[]="L:000C   H:000C ";float temp;char str[20];  //温度值转换为字符串的存放数组	float adc_temp;uint32_t adcv;  //存放ADC转换结果ADC_ChannelConfTypeDef sConfig = {0};  //建立sConfig结构体/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_TIM2_Init();MX_ADC1_Init();/* USER CODE BEGIN 2 */
//  printf("DS18B20测温实验\n\r");HAL_UART_Transmit(&huart1, (uint8_t *)&"DS18B20_MQ-2\r\n", 13, 10);						//串口1发送字符串,数组长度为10,LCD_Init();																																//LCD1602初始化temp_H=100;smoke_H=10;		//默认报警值																									//默认温度阈值20-40
//	DS18B20_Get_Temp();
//	HAL_TIM_Base_Start_IT(&htim2);  //初始化定时器/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_Delay(500);sConfig.Channel = ADC_CHANNEL_8;  //选择通道1HAL_ADCEx_Calibration_Start(&hadc1);   //开启adc前校准一下ADCHAL_ADC_ConfigChannel(&hadc1, &sConfig);  //选择ADC1的通道1HAL_ADC_Start(&hadc1);										//启动ADC1HAL_ADC_PollForConversion(&hadc1, 30);		//等待ADC1转换结束,超时设定为10msadcv = HAL_ADC_GetValue(&hadc1);					//读取ADC1的转换结果sprintf(str,"adc_value=%d\r\n",adcv);
//		HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), 20);//串口1发送字符串,数组长度为strlen(str),超时20msmemset(str,0,strlen(str));//		adc_temp=(float)adcv*(3.3/4095);	
//		adc_temp= pow(11.5428*35.904*adc_temp/(25.5-5.1*adc_temp),(1/0.6549));//计算公式源自https://blog.csdn.net/qq_35952136/article/details/95589074adc_temp=(float)adcv*(100.0/4095);	#if 0		sprintf(str,"%0.2f",adc_temp);HAL_UART_Transmit(&huart1, (uint8_t *)&"vote=", 5, 10);  //串口1发送字符串,数组长度为12,超时10msHAL_UART_Transmit(&huart1, (uint8_t *)str, 6, 10);								//串口1发送字符串,数组长度为5,超时10msHAL_UART_Transmit(&huart1, (uint8_t *)&"V\r\n", 3, 10);						//串口1发送字符串,数组长度为2,超时10ms		
#elsesprintf(str,"smoke=%0.1f%%\r\n",adc_temp);HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), 10);//串口1发送字符串,数组长度为strlen(str),超时20msmemset(str,0,strlen(str));
#endif		HAL_ADC_Stop(&hadc1);											//停止ADC1	temp=DS18B20_Get_Temp();//获取温度值sprintf(str,"temp=%0.1fC\r\n",temp);HAL_UART_Transmit(&huart1, (uint8_t *)str,  strlen(str), 10);								//串口1发送字符串,数组长度为6,超时10msmemset(str,0,strlen(str));	if(setnum==0){//正常模式
//			sprintf(data_str1,"temp=%0.1fC    \n",temp);					//写字符到data_str1sprintf(data_str1,"T=%0.1fC G=%0.1f%%  \n",temp,adc_temp);sprintf(data_str2,"TH:%d C GH:%d %% \n",temp_H,smoke_H);//写字符到data_str2if(adc_temp>(float)smoke_H){LED2=LED_ON;HAL_UART_Transmit(&huart1, (uint8_t *)&"SMOKE!!\r\n", 10, 10);						//串口1发送字符串,数组长度为10,超时10ms				}else{LED2=LED_OFF;	}if(temp>(float)temp_H){LED1=LED_ON;	HAL_UART_Transmit(&huart1, (uint8_t *)&"TEMP!!\r\n", 10, 10);						//串口1发送字符串,数组长度为10,超时10ms						 }else{LED1=LED_OFF;	}if (LED1==LED_ON||LED2==LED_ON){BEEP=1;}else{BEEP=0;}}else if(setnum==1){																			//设置高温阈值BEEP=0;LED1=LED2=LED_OFF;sprintf(data_str1,"T=%0.1fC G=%0.1f%%  \n",temp,adc_temp);sprintf(data_str2,"TH:%dC< GH:%d %% \n",temp_H,smoke_H);	}else if(setnum==2){																			//设置低温阈值sprintf(data_str1,"T=%0.1fC G=%0.1f%%  \n",temp,adc_temp);sprintf(data_str2,"L:%d C  H:%d%%< \n",temp_H,smoke_H);		}LCD_ShowString(0,0,data_str1);	//LCD1602显示第一行LCD_ShowString(1,0,data_str2);	//LCD1602显示第二行memset(str,0,strlen(data_str1)); }/* USER CODE END 3 */
}

程序流程图

img

4. 设计报告

10000+字设计报告,内容包括硬件设计、软件设计、结论等。

img
随着现代城市化步伐的迅猛推进,人口密集度与建筑物复杂性的双重增加,使得火灾安全问题愈发成为城市公共安全领域中的重大挑战。在这个背景下,火灾的早期预警机制显得尤为重要,它不仅关乎到人们的生命安全,还直接影响到社会经济活动的平稳运行与财产安全的有效保障。然而,传统的火灾报警系统大多仅依赖烟雾或温度的单一参数进行监测,这种设计方式在实际应用中暴露出了诸多局限性,如误报频率较高、响应不够迅速、对环境变化的适应性差等,这些问题在很大程度上限制了传统报警系统在实际应用中的效能。

鉴于此,开发一种集成了烟雾浓度监测、温度监控以及实时报警功能于一体的新型智能火灾烟雾报警器,成为了提升火灾预防能力的关键所在。这种新型报警器不仅能够有效克服传统系统的不足,还能通过多参数综合判断,实现对火灾风险的更为精准、及时的预警。本项目正是基于这一迫切需求而提出,旨在利用STM32微控制器这一高性能、低功耗的嵌入式系统核心,结合MQ-2烟雾传感器的高灵敏度与稳定性、DS18B20温度传感器的精确测量能力、1602液晶显示屏的直观信息显示、蜂鸣器与LED指示灯的即时报警反馈,以及按键模块的用户交互功能,共同构建一个功能全面、性能优越的智能火灾预警系统。

在项目实施过程中,我们将充分利用Proteus这一先进的电子设计自动化(EDA)软件,进行系统的电路设计与仿真验证。通过Proteus的虚拟实验平台,我们可以对电路布局、信号传输、元件性能等进行全面而深入的测试,从而确保系统设计的合理性、可行性与可靠性。最终,我们的目标是实现一个能够高效、准确地监测火灾隐患,及时发出预警信号,并为用户提供清晰直观的报警信息的智能火灾烟雾报警器,为现代城市的安全防护贡献一份力量。通过本次设计,我们希望能够提高对单片机的理解和应用能力。通过实践和探索,我们希望能够掌握相关的硬件和软件设计方法,为今后的学习和工作打下坚实的基础。同时,我们也希望能够通过这次设计,培养我们的团队协作能力和创新精神。

5. 资料清单

img

0、常见使用问题及解决方法–必读!!!!

1、程序代码

2、Proteus仿真

3、功能要求

4、开题报告

5、设计报告

6、框图

7、讲解视频

Altium Designer 安装破解

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

相关数据手册

答辩技巧

设计报告常用描述

鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url


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

相关文章

Axure高保真数据可视化大屏图表组件库

推出了一款高保真数据可视化大屏图表组件库&#xff0c;旨在为用户提供丰富的图表类型&#xff0c;使数据呈现更加直观、生动。本文将详细介绍该组件库中的各类图表元件&#xff0c;包括面积图、折线图、柱状图、条形图、圆环图、雷达图、仪表图以及综合类图表&#xff0c;以满…

7-8 整型关键字的散列映射

给定一系列整型关键字和素数 p&#xff0c;用除留余数法定义的散列函数 H(key)key%p 将关键字映射到长度为 p 的散列表中。用线性探测法解决冲突。 输入格式: 输入第一行首先给出两个正整数 n&#xff08;≤1000&#xff09;和 p&#xff08;≥n 的最小素数&#xff09;&…

【ZYNQ开发】Vitis下保存与快速加载BSP配置的方法

在使用Xilinx的Vitis进行ZYNQ PS端开发时&#xff0c;常常涉及到对于BSP的设置&#xff0c;比较典型的像是使用lwip时&#xff0c;需要对DHCP、memory以及send_buffer等进行一些自定义的修改。在设计到硬件描述文件需要进行更换&#xff08;PL端更改程序&#xff09;重新加载工…

uniapp小程序的锚点定位(将页面滚动到目标位置)

小程序中&#xff0c;a页面跳转到b页面&#xff0c;跳转后滚动定位到b页面的特定位置。 1.uni.pageScrollTo传递一个scrollTop参数可以滚动到特定位置。2.可以通过 uni.createSelectorQuery()等获取定位元素的位置信息。3.uni.getSystemInfoSync()获取设备的导航栏和状态栏高度…

超高清监测护航风电叶片,铸就绿色能源新未来

中国是世界风电第一大国。 2023年&#xff0c;中国风电叶片市场规模约为442亿元。根据中商产业研究院分析师预测&#xff0c;2025年中国风电叶片市场规模将增长至562亿元。全球风电装机容量的不断扩容&#xff0c;无疑预示着风电叶片市场将持续保持旺盛态势。 风电叶片是风电…

Maven完整技术汇总

额外知识点 IDE IDE是集成开发环境的缩写&#xff0c;它是一种软件应用程序&#xff0c;提供了编码、调试和部署软件的一站式解决方案。这些功能集成在一起&#xff0c;使开发人员能够在一个环境中完成整个软件开发过程&#xff0c;从编写代码到调试和测试&#xff0c;直到最终…

最新全开源IM即时通讯系统源码(PC+WEB+IOS+Android)部署指南

全开源IM&#xff08;即时通讯&#xff09;系统源码部署是一个复杂但系统的过程&#xff0c;涉及多个组件和步骤。以下是一个详细的部署指南&#xff0c;旨在帮助开发者或系统管理员成功部署一个全开源的IM系统&#xff0c;如OpenIM。      IM即时通讯系统源码准备工作   …

【Linux】线程互斥 | 死锁 | 进程同步

文章目录 &#x1f449;线程互斥&#x1f448;互斥相关概念互斥量全局互斥锁局部互斥锁互斥锁的进一步认识互斥锁的实现原理 &#x1f449;可重入和线程安全&#x1f448;概念常见的线程不安全的情况常见的线程安全的情况常见不可重入的情况* 常见可重入的情况可重入与线程安全…