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

文章目录

  • 一、火灾报警
    • 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.rhkb.cn/news/477860.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人脸检测开源项目介绍【持续更新】

DeepFace 介绍&#xff1a;DeepFace是一个轻量级的人脸识别和面部属性分析框架&#xff0c;专为Python设计。它集成了多种前沿的深度学习模型&#xff0c;包括VGG-Face、FaceNet、OpenFace、DeepFace、DeepID、ArcFace、Dlib、SFace和GhostFaceNet等&#xff0c;能够进行年龄、…

RabbitMQ 之 死信队列

一、死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理 解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到 queue 里了&#xff0c;consumer 从 queue 取出消息进行…

使用 LSTM(长短期记忆网络) 模型对时间序列数据(航空旅客人数数据集)进行预测

代码功能 数据准备 加载数据&#xff1a;从公开的航空旅客人数数据集&#xff08;Airline Passengers Dataset&#xff09;中读取时间序列数据。 对数变换和平稳化&#xff1a;对数据应用 log1p 函数减少趋势和波动&#xff0c;使模型更容易学习规律。 归一化处理&#xff1a;…

《操作系统 - 清华大学》5 -2:覆盖技术

文章目录 1. 目标2. 覆盖的基本原理3. 覆盖技术的不足 1. 目标 覆盖技术产生于上世纪80年代和90年代初的时候&#xff0c;在那时候操作系统能力是很弱的&#xff0c;所以说当初目标是要在能够比较小的可用内存中运行比较大的程序&#xff0c;这个比较小&#xff0c;比较大的相对…

使用 Nginx 在 Ubuntu 22.04 上安装 LibreNMS 开源网络监控系统

#LibreNMS 是一个功能强大的开源网络监控系统&#xff0c;它能够为你的网络性能和设备提供全面的监控。本文将引导你通过一系列步骤&#xff0c;在 Ubuntu 22.04 服务器上安装和配置 LibreNMS&#xff0c;使用 Nginx 作为 Web 服务器。 简介 LibreNMS 提供了对网络设备和性能…

Spring注入Map学习

Spring注入Map学习 在Spring中 在策略模式中, 会经常用到 根据Bean名称获取Bean的实例 有2个方法很好用 1. 使用Autowired注入 2. 使用构造方法注入 但是奇怪的一点是: 日志打印并没有看到结果, 第一行的 Autowired的结果 是个null 那是因为 注入时机 的问题 注入时机&…

【Redis_Day5】String类型

【Redis_Day5】String类型 String操作String的命令set和get&#xff1a;设置、获取键值对mset和mget&#xff1a;批量设置、获取键值对setnx/setex/psetexincr和incrby&#xff1a;对字符串进行加操作decr/decrby&#xff1a;对字符串进行减操作incrbyfloat&#xff1a;浮点数加…

谷歌云无法ssh登录(修改sshd_config也不行)

sudo -i vi /etc/ssh/sshd_config passwd root /etc/init.d/ssh restart service sshd restart 这是网站大部分教程讲的&#xff0c;但是我实际试了还是连不上 参考https://linux.do/t/topic/260732/15 原来/etc/ssh/sshd_config.d/下面有个60开头的文件&#xff0c;也需…

【FPGA-MicroBlaze】串口收发以及相关函数讲解

前言 工具&#xff1a;Vivado2018.3及其所对应的SDK版本 目前网上有许多MicroBlaze 的入门教程&#xff0c;比如下面的这个参考文章&#xff0c;用串口打印一个hello world。 【FPGA】Xilinx MicroBlaze软核使用第一节&#xff1a;Hello World!_fpga软核microblaze-CSDN博客 个…

【君正T31开发记录】8.了解rtsp协议及设计模式

前边搞定了驱动&#xff0c;先不着急直接上手撸应用层的代码&#xff0c;先了解一下大致要用到的东西。 设计PC端先用vlc rtsp暂时H264编码&#xff08;vlc好像不支持h265,这个后边我试试&#xff09;的视频流&#xff0c;先需要支持上rtsp server&#xff0c;了解rtsp协议是必…

渗透测试---shell(7)for循环2与while循环

声明&#xff1a;学习素材来自b站up【泷羽Sec】&#xff0c;侵删&#xff0c;若阅读过程中有相关方面的不足&#xff0c;还请指正&#xff0c;本文只做相关技术分享,切莫从事违法等相关行为&#xff0c;本人与泷羽sec团队一律不承担一切后果 视频地址&#xff1a;泷羽--shell&a…

CLIP-Adapter: Better Vision-Language Models with Feature Adapters 论文解读

abstract 大规模对比视觉-语言预训练在视觉表示学习方面取得了显著进展。与传统的通过固定一组离散标签训练的视觉系统不同&#xff0c;(Radford et al., 2021) 引入了一种新范式&#xff0c;该范式在开放词汇环境中直接学习将图像与原始文本对齐。在下游任务中&#xff0c;通…

C++初阶(十五)--STL--list 的深度解析与全面应用

文章目录 一、头文件与基本概念 二、构造函数和析构函数 1.构造函数 2.析构函数 三、元素访问 front back 四、迭代器相关函数 begin end rebegin&#xff08;反向迭代器&#xff09; rend&#xff08;反向迭代器&#xff09; 五、容量相关函数 empty size max…

一个关于 CSS Modules 的陷阱

我在引用 less 文件样式的时候&#xff0c;发现 index.less .drag_upload {width: 100%;height: 90vh;padding: 20px; }index.jsx import React, { useState, useEffect } from react; import styles from ./index.less;export default ({ }) > {return (<div classNa…

基于STM32的智能家居电器控制系统

目录 引言环境准备 2.1 硬件准备 2.2 软件准备智能家居电器控制系统基础 3.1 控制系统架构 3.2 功能描述代码实现&#xff1a;实现智能家居电器控制系统 4.1 数据采集模块 4.2 控制逻辑与设备管理 4.3 通信与远程控制实现 4.4 用户界面与数据可视化应用场景&#xff1a;家庭自…

视觉经典神经网络与复现:深入解析与实践指南

目录 引言 经典视觉神经网络模型详解 1. LeNet-5&#xff1a;卷积神经网络的先驱 LeNet-5的关键特点&#xff1a; 2. AlexNet&#xff1a;深度学习的突破 AlexNet的关键特点&#xff1a; 3. VGGNet&#xff1a;深度与简洁的平衡 VGGNet的关键特点&#xff1a; 4. ResNe…

vue3【实战】响应式的登录界面

效果预览 WEB 端效果 移动端效果 技术方案 vue3 vite Element Plus VueRouter UnoCSS TS vueUse AutoImport 技术要点 响应式设计 移动端&#xff1a;图片切换为绝对定位&#xff0c;下移一层&#xff0c;成为背景图片 <el-imageclass"w-screen h-screen lt-md…

c语言的qsort函数理解与使用

介绍&#xff1a;qsort 函数是 C 标准库中用于排序的快速排序算法函数。它的用法非常灵活&#xff0c;可以对任意类型的元素进行排序&#xff0c;只要提供了比较函数即可。 qsort 函数原型及参数解释&#xff1a; void qsort ( void* base, //指向要排序的数组的首元素…

AIGC学习笔记(6)——AI大模型开发工程师

文章目录 AI大模型开发工程师005 OpenAI大模型案例实践1 AI 翻译助手需求分析项目起源市场价格和市场前景基于大模型的翻译软件核心功能设计 2 AI 翻译助手架构设计架构设计代码结构设计 3 AI 翻译助手核心功能文档解析文档操作PDF文档操作表格操作图片操作 Prompt封装 4 AI 翻…

《生成式 AI》课程 作业6 大语言模型(LLM)的训练微调 Fine Tuning -- part1

资料来自李宏毅老师《生成式 AI》课程&#xff0c;如有侵权请通知下线 Introduction to Generative AI 2024 Spring 该文档主要介绍了国立台湾大学&#xff08;NTU&#xff09;2024 年春季 “生成式人工智能&#xff08;GenAI&#xff09;” 课程的作业 5&#xff08;GenAI HW…