基于51单片机的智能火灾报警系统温度烟雾光

news2024/11/18 18:40:41

wx供重浩:创享日记
对话框发送:火灾报警
获取完整源码源文件+电路图+仿真文件+论文报告等
在这里插入图片描述


功能简介

51单片机+MQ-2烟雾传感+ADC0832模数转换芯片+DS18B20温度传感器+数码管显示+按键模块+声光报警模块

具体功能:
1、实时监测及显示温度值和烟雾浓度;
2、可通过三个按键设置烟雾报警值和温度报警值;
3、可实现手动紧急报警和手动取消报警功能;
4、温度超过阈值时,蜂鸣器响黄灯闪烁;烟雾超过阈值时,蜂鸣器响红灯灯闪烁;
5、测距范围: 烟物浓度:0——9等级;温度范围:0——99度。

在这里插入图片描述


原理图

在这里插入图片描述


PCB图

在这里插入图片描述


仿真图

在这里插入图片描述


软硬件设计框图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其余完整详见下载!


设计背景

智能火灾报警器系统的发展变化很快,新技术的发展进一步拓展了火灾报警系统的应用领域,为一些报警系统无法胜任的环境提供了有效的手段。我国的火灾报警从无到有,从有到现在的智能。火灾报警系统集早期探测、多传感器复合探测和探测器小型化、智能化的方向发展迈出了更快的步伐。

随着技术的创新,单片机早已深入应用到工农业生产各个领域及人们生活应用中。于是,各种类型的单片机也根据社会的需求而开发出来。单片机是器件级计算机系统,实际上它是一个微控制器或微处理器。由于它功能齐全、体积小、成本低,因此它可以应用到任何电子系统中去。同样,它也广泛应用于报警技术领域,使各类报警装置的功能更加完善,可靠性大大提高,以满足社会发展的需要。


硬件设计

智能火灾报警系统的原理是依据当烟雾浓度或温度达到设定值时,烟雾传感器和温度传感器感应到信号由ADC0832进行处理模数转化再到单片机进行处理,喇叭发出报警声音。系统共分为控制电路、检测电路、显示和报警电路。


软件设计

首先,开始执行初始化子程序,初始化实现的功能是I/O口输入、输出状态设定,寄存器初始化,中断功能等。设定定时初值为50ms,利用IAP写入EEPROM,作为取值间隔。然后,设置定时器0,选择方式1。方式1状态下,定时器的工作寄存器TH1、TL1,是全16位参与操作。接下来,定时器0中断的允许位置1,打开定时器0,关闭蜂鸣器,开启绿灯,设置报警初值。部分源码如下。

#include <reg51.h>	         //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535
#include <intrins.h>
#include "eeprom52.h"

//数码管段选定义      0     1    2    3    4    5	 6	 7	  8	   9	
uchar code smg_du[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x40,0xfd/*-*/};
//数码管位选定义
uchar code smg_we[]={0x7f,0xbf,0xdf,0xef};

uchar dis_smg[8]  = {0xa0,0x84,0x62,0x2a,0x39,0x2c,0x24,0xba};	

sbit CS=P2^3;		//CS定义为P3口的第2位脚,连接ADC0832CS脚  PCB
sbit SCL=P2^0;		//SCL定义为P3口的第3位脚,连接ADC0832SCL脚
sbit DO=P2^1;		//DO定义为P3口的第4位脚,连接ADC0832DO脚

sbit ledy = P1^6;   //温度报警指示灯
sbit ledr = P1^7;   //烟雾报警指示灯 x
sbit dq   = P1^5;	//18b20 IO口的定义
sbit beep = P3^6;   //蜂鸣器IO口定义
uint temperature,s_temp ;  //温度的变量
uchar dengji,s_dengji;     //烟物等级
uchar shoudong;            //手动报警键

bit flag_300ms = 1;
uchar key_can;		 //按键值的变量
uchar menu_1;        //菜单设计的变量

/*************读取18b20内的数据***************/
uchar read_18b20()
{
	uchar i,value;
	for(i=0;i<8;i++)
	{
		dq = 0;			 //把总线拿低读时间隙开始 
		value >>= 1;	 //读数据是低位开始
		dq = 1;			 //释放总线
		if(dq == 1)		 //开始读写数据 
			value |= 0x80;
		delay_uint(5);	 //60us	读一个时间隙最少要保持60us的时间
	}
	return value;		 //返回数据
}

/****************按键处理数码管显示函数***************/
void key_with()
{
	if(key_can == 4) 	 //紧急报警键  手动报警
	{
		if(menu_1 == 0)
			shoudong = 1;
	}
	if(key_can == 1)	 //设置键
	{
		menu_1 ++;
		if(menu_1 >= 3)
		{
			menu_1 = 0;
		}
	}
	if(menu_1 == 0)
	{
		if((key_can == 2) || (key_can == 3))
			shoudong = 0;          //取消手动报警
	}
	if(menu_1 == 1)			//设置高温报警
	{
		if(key_can == 2)
		{
			s_temp ++ ;		//高温报警值加1 
			if(s_temp > 99)
				s_temp = 99;
		}
		if(key_can == 3)
		{
			s_temp -- ;		//高温报警值减1 
			if(s_temp <= 10)
				s_temp = 10 ;
		}
		dis_smg[0] = smg_du[s_temp % 10];	           //取个位显示
		dis_smg[1] = smg_du[s_temp / 10 % 10];  //取十位显示
		dis_smg[2] = 0x80;
		dis_smg[3] = 0x1b;	//显示c
		write_eeprom();			   //保存数据
	}	
	if(menu_1 == 2)			//设置烟物报警
	{
		if(key_can == 2)
		{
			s_dengji ++ ;	  //烟物报警值加1 
			if(s_dengji >= 9)
				s_dengji = 9;
		}
		if(key_can == 3)
		{
			s_dengji --;	  //烟物报警值减1 
			if(s_dengji <= 1)
				s_dengji = 1;
		}
		dis_smg[0] = smg_du[s_dengji % 10];	           //取个位显示
		dis_smg[1] = 0x80 ;  
		dis_smg[2] = 0x80;
		dis_smg[3] = 0xc7;	//显示q
		write_eeprom();			   //保存数据
	}	
}  

/***************主函数*****************/
void main()
{
	beep = 0;				    //开机蜂鸣器叫一声
	delay_1ms(200);
	P0 = P1 = P2 = P3 = 0xff;   //初始化IO口为高电平
	temperature = read_temp();  //读取温度值
	init_eeprom();  //开始初始化保存的数据
	delay_1ms(650);				
	temperature = read_temp();  //读取温度值
	time_init(); //初始化定时器 		
	while(1)  
	{
		key();					//独立按键程序
		if(key_can < 10)
		{
			key_with();			//按键按下要执行的程序
		}
		if(flag_300ms == 1)
		{		
			flag_300ms = 0;
			clock_h_l();
			temperature = read_temp();  //读取温度值
			dengji = ad0832read(1,0);	
			dengji = dengji * 10 / 250;
			if(menu_1 == 0)
			{
				if(temperature >= 99)
					temperature = 99;
				dis_smg[3]=smg_du[dengji];	    //显示烟物报警等级
				dis_smg[2]= 0x80;	            // -		
				dis_smg[1]=smg_du[temperature/10%10];	//十位
				dis_smg[0]=smg_du[temperature%10];	    //个位	ADC0832为8位ADC,数值为0~255,我们将其分开放入l_tmpdate数组中显示
			}
		} 
		delay_1ms(1);
	}
}

/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{	
	static uchar value;
	TH0 = 0xf8;
	TL0 = 0x30;     // 2ms
	value ++;	 
	display();	  //数码管显示函数
	if(value % 150 == 0)
	{
		flag_300ms = 1;	   //300ms
		value = 0;
	}
}

其余完整详见下载!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/633890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Docker】docker部署springboot+vue+mysql+nginx前后端分离项目【部署实战篇】

文章目录 0、安装docker并准备一个springboot-vue前后端分离项目前后端打包放到服务器上1、docker 安装jdk2、docker 安装mysql通过Docker命令进入Mysql容器内部初始化数据sqlDbx连接查看 3、docker build构建后端镜像修改配置数据库JDBC链接IP为虚拟机服务器IPmaven clean pac…

【MySQL】一文带你掌握聚合查询和联合查询

文章目录 1. 聚合函数1.1 COUNT1.2 SUM1.3 AVG1.4 MAX&#xff0c;MIN 2. GROUP BY3. HAVING4. 联合查询4.1 内连接4.2 外连接4.3 自连接4.4 子连接 5.合并查询5.1 UNION5.2 UNION ALL 1. 聚合函数 概念&#xff1a; 聚合函数是一种用于处理数据集合的函数&#xff0c;它将多个…

Fiddler 抓包的八个实用技巧,你学会了吗?

目录 前言 1、双击Session时&#xff0c;使响应页始终显示到”json”tab页&#xff1b;使请求页始终显示到“webform”tab页 2、显示每个Session 的请求IP地址 3、修改响应Header中的Content-Type 4、右键session 直接使用浏览器打开url 5、Session列中&#xff0c;显示每…

电脑拷贝到u盘数据丢失原因分析|3种恢复方法

在电脑操作中&#xff0c;经常需要将数据拷贝到U盘中进行备份或传输。但有时候&#xff0c;我们可能会遇到数据在拷贝或传输过程中丢失的情况。这种情况下&#xff0c;我们该如何找回这些丢失的数据呢&#xff1f; 下面&#xff0c;为大家介绍一些恢复U盘数据的方法&#xff0c…

[ICNN 1993] Optimal brain surgeon and general network pruning

Contents IntroductionMethodOptimal brain surgeon (OBS)Computing the inverse HessianThe ( t − o ) → 0 (\mathbf t-\mathbf o)\rightarrow 0 (t−o)→0 Approximation References Introduction 作者提出 Optimal brain damage (OBD) 的改进 Optimal brain surgeon (OB…

霍夫变换(Hough Transform)

文章目录 1. 什么是霍夫变换2. 霍夫直线检测2.1 霍夫直线检测的具体步骤2.2 霍夫直线检测的优缺点2.3 OpenCV中霍夫直线检测的应用2.3.1 标准霍夫检测2.3.2 概率霍夫检测 3. 霍夫圆检测4. 源码仓库地址 1. 什么是霍夫变换 霍夫变换(Hough Transform)是图像处理中的一种特征提取…

Spring Data Redis的使用

Redis的valus值的五种数据类型 问题&#xff1a;Windows下出现Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝&#xff0c;无法连接。 解决方法为在Redis-x64-3.2.100目录下打开两个cmd窗口&#xff0c;分别输入 命令redis-server.exe redis.windows…

【Go知识点】Gorm Hook 无侵入实现 数据表防篡改

一、前言 Hi&#xff0c;开门见山的说&#xff0c;这次给大家带来的是关于 Gorm Hook 机制的落地场景&#xff0c;笔者也是在Gorm官方文档中了解到有Hook机制的存在&#xff0c;不过一直没有找到过太多合适的场景来使用。 最近刚好在做一块新业务的设计&#xff0c;因为涉及到…

PL2303HXA自2012已停产,请联系供货商的解决办法

一、概述 PL2303 是Prolific 公司生产的一种高度集成的接口转换器&#xff0c;可提供一个RS232 全双工异步串行通信装置与USB 功能接口便利连接的解决方案。PL2303具有多个历史版本&#xff0c;早期的版本是PL2303HX, 近年有PL2303HXA、PL2303HXC、PL2303HXD&#xff08;D版本…

SpringCloud01:SpringCloud介绍、服务提供者、服务消费者

SpringCloud和SpringBoot的关系 SpringBoot专注于快速、方便地开发单个个体微服务&#xff0c;SpringCloud关注全局的治理框架&#xff0c;它将SpringBoot开发的一个个单体微服务整合并管理起来&#xff0c;为各个微服务之间提供&#xff1a;管理配置、服务发现、断路器、路由…

GO-slice详解

GO-slice详解 简介 slice&#xff08;切片&#xff09;是go中常见和强大的类型&#xff0c;这篇文章不是slice使用简介&#xff0c;从源码角度来分析slice的实现&#xff0c;slice的一些迷惑的使用方式&#xff0c;同时也讲清楚一些问题。 slice的底层实现是数组&#xff0c…

(转载)基于蚁群算法的三维路径规划(matlab实现)

1 理论基础 1.1 三维路径规划问题概述 三维路径规划指在已知三维地图中&#xff0c;规划出一条从出发点到目标点满足某项指标最优&#xff0c;并且避开了所有三维障碍物的三维最优路径。现有的路径规划算法中&#xff0c;大部分算法是在二维规划平面或准二维规划平面中进行路…

微服务框架

流量入口Nginx 在上图中可以看到&#xff0c;Nginx作为整个架构的流量入口&#xff0c;可以理解为一个外部的网关&#xff0c;它承担着请求的路由转发、负载均衡、动静分离等功能。作为一个核心入口点&#xff0c;Nginx肯定要采用多节点部署&#xff0c;同时通过keepalived来实…

(八)CSharp-泛型类和参数约束(1)

一、C# 中的泛型 泛型&#xff08;generic&#xff09;特性可以让多个类型共享一组代码。 泛型类型不是类型&#xff0c;而是类型的模板。 C# 提供了5种类型&#xff1a;类、结构、接口、委托和方法。 泛型类 泛型的主要优点&#xff1a; 性能 类型转换时&#xff0c;非泛型的…

2018~2019 学年第二学期《信息安全》考试试题(B 卷)

北京信息科技大学 2018 ~2019 学年第 2 学期 《信息安全》课程期末考试试卷 B 课程所在学院:计算机学院 适用专业班级:计科 1601-06&#xff0c;重修 考试形式:(闭卷) 一. 选择题(本题满分 10 分&#xff0c;共含 10 道小题&#xff0c;每小题 1 分) 网络中存在的安全漏洞主…

虚拟环境创建、配置及激活

虚拟环境创建、配置及激活 前言 一、虚拟环境是什么&#xff1f; 虚拟环境&#xff08;Virtual Environment&#xff09;是在计算机上使用特定版本的编程语言&#xff08;如python 3.9&#xff09;和其所需包及依赖项的一种方法(如pandas 2.4)&#xff0c;它可以被看作是一个隔…

基于html+css的图展示121

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

chatgpt赋能python:Python中如何快速删除字符串

Python中如何快速删除字符串 在Python编程中&#xff0c;字符串操作是非常常见的。有时候我们需要从字符串中删除一些无用的字符&#xff0c;以便更方便地处理数据。在本文中&#xff0c;将介绍Python如何快速删除字符串。 删除特定字符 Python中可以使用replace()函数快速替…

【深度学习炼丹大杀器——mlrunner初体验(以mmdetection为例)】

深度学习炼丹大杀器——mlrunner初体验&#xff08;以mmdetection为例&#xff09; 自动化炼丹&#xff0c;告别手动运行的烦恼~ 0.引言 了解深度学习的人都知道&#xff0c;炼丹是一种很玄学的事&#xff0c;并且还存在以下问题&#xff1a; 效率&#xff1a;在训练模型时&…

Seata服务端的启动过程 学习记录

1.ServerRunner ServerRunner类实现了CommandLineRunner与DisposableBean接口&#xff0c;将会在Spring容器启动和关闭的时间&#xff0c;分别执行 run 和 destory 方法。 而seata服务端的启动过程&#xff0c;都藏在run方法中 2.整体流程 io.seata.server.Server#start pu…