基于单片机的天然气泄漏报警系统设计

这篇具有很好参考价值的文章主要介绍了基于单片机的天然气泄漏报警系统设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


主要介绍

  此设计主要利用了MQ-5传感器采集气体的浓度信号,由系统设置浓度和电压之间的关系,令浓度与电压发生转换、能够显示出当下天然气浓度与声光提示报警构成的报警装置。该检测系统能够检测出当下天然气的浓度,检测出的天然气浓度不超过设定报警设定值的时候,数码管显示器仅显示测出的可燃气体浓度;如果传感器检测出天然气浓度高于系统设定的报警阈值时,系统会给出声光报警,并且还附带语音提醒。结果表明整套系统表现出良好的检测性能和安全性能。

关键词:天然气;气体泄漏报警;MQ-5传感器;安全

一、天然气泄露报警系统的整体设计方案

2.2.1天然气泄漏报警器工作原理

  此设计中的天然气泄漏报警器以STC89C52单片机为操控核心,感知空气中天然气浓度的任务则由MQ-5传感器来执行。MQ-5传感器得到的数据发送给ADC0809转换芯片,ADC0809在将数据转化为单片机能够处理的数据,单片机将数据进行处理之后在将浓度值展示在数码管上再进行判定,如果被测气体浓度超出了报警值,报警器将继电器吸合,LED同时通电,并且喇叭开始发出提示音提示报警;如果浓度没有超过预定的值,数码管上只显示环境中被测气体的浓度值,没有其他的动作。

2.2.2天然气泄漏报警器的结构

  家用电器渐渐发展的更加成熟了,开始向智能化、连接网络、信息共享的方向发展。首先保证报警器对于家庭用户来说的安全性能,更要顺应社会发展潮流,在以前的报警器的基础上对其进行了硬件结构的优化:
  此系统集处理数据、显示浓度和控制报警这三个优点。可以细分为电源、传感器、信号调试、A/D转换、核心控制单片机等模块。每一个模块都不可缺少,构成了这样一个完善的系统,系统结构框图如图2.1所示。

单片机的燃气泄漏检测,单片机,嵌入式毕业设计,51单片机,嵌入式硬件,单片机

图2.1 天然气泄露检测报警系统结构框图

二、电源电路设计

  

如图3.11,本设计用USB供电,用自锁开关和DC插座为单片机提供5V电源。
单片机的燃气泄漏检测,单片机,嵌入式毕业设计,51单片机,嵌入式硬件,单片机

图3.11 电源电路

三、系统软件设计与实现

4.1 主程序框图

本次主程序设计首先初始化LCD1602液晶显示器,由MQ-5气敏传感器测得的模拟量交给ADC0809转换,下一步读取转换出的数值,在LCD1602液晶显示器中显示具体的数值是多少,判断设置的状态,接下来语音播报当前的数值,判断当前数值是否超出安全值,若超过限值,则继续语音播报常开继电器断开,变成闭合,下一步判断录音键是否按下,如果按下则开始注意切换新的语音文件,扫描设置的限定值,最终回到读取数值的阶段。不停的循环检测。主程序流程图如图4.2所示。
单片机的燃气泄漏检测,单片机,嵌入式毕业设计,51单片机,嵌入式硬件,单片机

图4.2 主程序流程图

实物

单片机的燃气泄漏检测,单片机,嵌入式毕业设计,51单片机,嵌入式硬件,单片机

程序源码

#include <reg52.h>
#include <intrins.h>
//显示函数
#include <display.h>
#include <4004.h>

//宏定义
#define uint unsigned int 
#define uchar unsigned char
#define Data_ADC0809 P1
 
//管脚声明
//sbit LED_R= P2^2; //黄指示灯
//sbit LED_G= P2^0; //绿色指示灯
//sbit FENG = P2^5; //喇叭
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^1;
sbit OE=P3^2;
//按键
sbit Key1=P2^5;	//设置按键
sbit Key2=P2^4; //加
sbit Key3=P2^3;	//减
sbit Key4=P2^2;
sbit jdq=P3^0;

bit bdata flag;//指示灯和喇叭闪烁报警标志位
uchar set;	  //设置标志位


//函数声明
extern uchar ADC0809();
extern void Key();

//天然气含量变量
uchar temp=0;

uchar WARNING=25; // 初始报警值

void delay_2S(void)   //4S
{
    uchar a;
	uchar b,c;
    for(c=90;c>0;c--)
        for(b=171;b>0;b--)
            for(a=16;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}
//初始化函数
/*void init()	 
{
	TMOD=0x01; //定时器0方式1
 	TL0=0xb0;
 	TH0=0x3c;  //赋初值
 	EA=1;	//开总中断
	ET0=1;	//允许定时器0中断
 	TR0=1;	//定时器0开
}  */
 //主函数
void main()
{
	uchar p=0;
	uint sum;
	Init1602();	//1602初始化
//	init();	 //初始化函数
	while(1)//主循环
	{
		for(p=0;p<20;p++)
		{
			temp=ADC0809();	//读取天然气值
			sum=sum+temp;
		}
		temp=sum/20;
		sum=0;
		
		if(set==0) //如果没有按下设置(默认set是0,就是正常显示状态)
		Display_1602(temp,WARNING,Mode);	 //显示CH4值
		//开始语音播报
	if(set==0)
	{
			//现在浓度
			playbit=1;
			playcout=1;
			playsound();
			delay_2S();
			delay_2S();
			DDstop();	
			//第一位
			playbit=1;
			playcout=(temp/100)+2;
			playsound();
			delay_2S();
			DDstop();	
			//第二位
			playbit=1;
			playcout=(temp%100/10)+2;
			playsound();
			delay_2S();
			DDstop();	
			//第三位
			playbit=1;
			playcout=(temp%100%10)+2;
			playsound();
			delay_2S();
			DDstop();
/*			//米
			playbit=1;
			playcout=12;
			playsound();
			delay_2S();
			DDstop();	*/

		if(temp<WARNING&&set==0)	//如果实际的CH4值小于报警值且在正常显示状态下
		{
			jdq=1;
//			flag=0;	 //执行下面flag=0的(主要就是绿灯闪,关喇叭和继电器)
			//浓度正常
			playbit=1;
			playcout=12;
			playsound();
			delay_2S();
			delay_2S();
			DDstop();
		}
		else if(temp>WARNING&&set==0)  //如果实际的天然气值大于报警值且在正常显示状态下
		{
			jdq=0;
//			flag=1;	//执行下面flag=1的(主要就是红灯闪,开喇叭和继电器)
			//浓度超标
			playbit=1;
			playcout=13;
			playsound();
			delay_2S();
			delay_2S();
			DDstop();
		}
		delay_2S();	
		//录音键按下
		if(Key4==0)
		{
			Mode=1;
			jdq=1;
			while(Mode!=14)
			{
				//按键判断
				if(Key4==0)
				{
					Mode++;
					Display_1602(0,0,Mode);
					while(Key4==0);
					//开始录音
					playbit=0;
					recbit=1;
				//	playcout=Mode-1;
					reccout=Mode-1;;
					playsound();
					if(Mode==2||Mode==14||Mode==13)
					delay_2S();
					delay_2S();
					DDstop();	  

					delayms(100);	

					//开始放音
					playbit=1;
					recbit=0;
					playcout=Mode-1;
				//	reccout=Mode-1;;
					playsound();
					if(Mode==2||Mode==14||Mode==13)
					delay_2S();
					delay_2S();
					DDstop();
				}		  
			}
			Init1602();//初始化显示
			Mode=0;

		}
		}
		Key();//按键扫描
	}
}
//ADC0809读取信息
uchar ADC0809()
{
	uchar temp_=0x00;
	//初始化高阻太

	OE=0;
	//转化初始化
	ST=0;
	//开始转换
	ST=1;
	ST=0;
	//外部中断等待AD转换结束
	while(EOC==0)
	//读取转换的AD值
	OE=1;
	temp_=Data_ADC0809;
	OE=0;
	return temp_;
}
//按键函数
void Key()
{
	if(Key1==0)	//如果设置按键按下
	{
		while(Key1==0);//等待按键释放
//		FENG=0;	//喇叭响
		set++;	//设置的变量加1
		jdq=1;
		flag=0;	//绿灯闪
		TR0=0;	//关定时器0
	}
	if(set==1)//此时设置报警值
	{
		write_com(0x38);//屏幕初始化
		write_com(0x80+0x40+13);//位置
   		write_com(0x0f);//打开显示 无光标 光标闪烁
   		write_com(0x06);//当读或写一个字符是指针后一一位
//		FENG=1;	//喇叭关

	}
	else if(set>=2)	//又按了下设置
	{
		set=0;	//正常显示状态
		write_com(0x38);//屏幕初始化
		write_com(0x0c);//打开显示 无光标 无光标闪烁
//		FENG=1;	//喇叭关
		flag=1;	//红灯闪
		TR0=1;	//定时器0开
	}
	if(Key2==0&&set!=0)	  //在设置的状态下按下加
	{
		while(Key2==0);	  //等待按键释放
//		FENG=0;		//喇叭响
		WARNING++;	//报警值加1
		if(WARNING>=255)  //如果报警值大于等于255
		WARNING=0;		 //报警值归零
		write_com(0x80+0x40+11);
		write_date('0'+WARNING/100); 
		write_date('0'+WARNING/10%10);
		write_date('0'+WARNING%10);	   //显示报警值
		write_com(0x80+0x40+13);//调整位置
//		FENG=1;	 //喇叭关
	}
	if(Key3==0&&set!=0)	 //在设置的状态下按下减
	{
		while(Key3==0);	 //等待按键释放
//		FENG=0;		 //喇叭响
		WARNING--;	 //报警值减1
		if(WARNING<=0)	//如果报警值小于等于0
		WARNING=255;	//那么报警值为255
		write_com(0x80+0x40+11);
		write_date('0'+WARNING/100);
		write_date('0'+WARNING/10%10);
		write_date('0'+WARNING%10);
		write_com(0x80+0x40+13);//调整位置
//		FENG=1;	 //喇叭关
	}
}
/*
void  time1_int(void) interrupt 1 //定时器中断0
{
	uchar count;
	TL0=0xb0;
 	TH0=0x3c;  //重赋初值50ms
  	count++;  ///溢出值加1
	if(count==10)  //如果时间到半秒
	{
		if(flag==0)	  //如果flag为0
		{
			LED_G=0;  //绿灯亮
			LED_R=1;  //红灯灭
			FENG=1;	  //喇叭关
		}
		if(flag==1)	   //如果flag为1
		{
			LED_G=1;   //绿灯关
			LED_R=0;   //红灯亮
			FENG=0;	   //喇叭开
		}
	}

   	if(count==20)	  //如果时间到1秒
   	{
		count=0;	  //溢出值清零
		if(flag==0)	 //如果flag为0
		{
			LED_G=1;	//绿灯关
			LED_R=1;	//红灯灭
			FENG=1;	   //喇叭关
		}
		if(flag==1)	   //如果flag为1
		{
			LED_G=1;   //绿灯关
			LED_R=1;	//红灯灭
			FENG=1;	   //喇叭关
		}
	}
} */

四 结论

本文设计的天然气泄漏检测报警系统以具有各种优点的STC89C52单片机作为主控芯片,以其不是特别昂贵的造价和优秀的处理能力,利用了它丰富又易于控制的各种端口,程序编写简单容易上手,只需要一个一个调用即可,完成了此次的设计任务。系统能够实时监测和显示空气中的天然气浓度,周围天然气气体超标,系统给出声光报警;若没有超标,则仅在1602液晶显示器上显示当前浓度。
本设计在电路方案中采用模块化设计,易于实现功能扩展,能够满足特殊应用领域的功能和可靠性需求。在硬件调试中,采用的电路使用了很多模块化设计。设备不多,调试不难。电路除了集成电路以外,对各电子部件也没有特别的要求。
在调试软件时,发现一些程序只是满足条件而被执行,这增加了步骤调试的难度,在这种情况下,可以选择程序调试的总括断点设置来完全进行调试。而且,在写文章的时候忘记了切换输入方式,汉语标点令程序的编译出现了错误,逐一改进后完成了调试。
在未来的工作中,可以试着将GPRS模块添加到报警器中,使报警器能够实现远程通信功能,访问消防系统,及时向相关部门通知紧急事件的发声,适当扩充功能,进一步完善天然气报警器的功能,提高安全性,提高易用性。

五、 文章目录

目 录
摘 要 I
Abstract II
1 引 言 1
2天然气泄露检测报警系统的方案设计 4
2.1 方案选择 4
2.2 天然气泄露报警系统的整体设计方案 5
2.2.1天然气泄漏报警器工作原理 5
2.2.2天然气泄漏报警器的结构 5
3天然气泄露报警的硬件部分设计 7
3.1 STC89C52单片机 7
3.2 传感器的选择 10
3.3 LCD1602液晶显示电路 11
3.4 键盘电路 12
3.5 A/D转换电路 13
3.6 报警电路 15
3.6.1 灯光提示电路 15
3.6.2 声音报警电路 15
3.7 电源电路设计 17
3.8 继电器电路 17
4 天燃气泄漏检测报警系统的软件部分 19
4.1 软件介绍 19
4.2 主程序框图 20
4.3 A/D转换程序流程图 21
4.5 系统调试 22
结 论 24
附录1 源程序清单 25
参考文献 33
致谢 35文章来源地址https://www.toymoban.com/news/detail-817966.html

到了这里,关于基于单片机的天然气泄漏报警系统设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【开源】JAVA+Vue.js实现天然气工程运维系统

    基于Vue+SpringBoot+MySQL的天然气工程运维系统,包含工程项目模块、材料档案模块、材料领用单模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,天然气工程运维系统基于角色的访问控制,给工程

    2024年02月21日
    浏览(33)
  • 问道管理:燃气板块拉升走高,胜通能源涨停,欧洲天然气价飙升

    燃气板块10日盘中发力走高,到发稿,美能动力、胜通动力、水发燃气涨停,首华燃气涨约8%,山东墨龙、贵州燃气涨逾7%,贝肯动力涨逾5%。   消息面上,因液化天然气供给危险添加,美国天然气期货日内大涨7.36%,欧洲天然气期货价格一度上涨40%,创下2022年3月以来最大涨幅

    2024年02月13日
    浏览(29)
  • Java实现天然气工程运维系统 JAVA+Vue+SpringBoot+MySQL

    基于Vue+SpringBoot+MySQL的天然气工程运维系统,包含工程项目模块、材料档案模块、材料领用单模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,天然气工程运维系统基于角色的访问控制,给工程

    2024年01月18日
    浏览(29)
  • 基于单片机设计的防煤气泄漏装置

    煤气泄漏是一个严重的安全隐患,可能导致火灾、爆炸以及对人体健康的威胁。为了提高家庭和工业环境中煤气泄漏的检测和预防能力,设计了一种基于单片机的防煤气泄漏装置。 单片机选择STC89C52作为主控芯片。为了检测煤气泄漏,采用了MQ4传感器,能够快速、准确地检测

    2024年02月07日
    浏览(36)
  • 单片机开发|基于单片机的婴儿睡眠监测系统设计

    作者简介:全栈开发工程,从事Java、Python、前端、小程序方面的开发和研究,对大数据应用与开发比较感兴趣, 主要内容:Java项目、前端项目、Python项目、小程序开发、大数据项目、单片机 收藏点赞不迷路  关注作者有好处 文末获取源码   感谢您的关注,请收藏以免忘记

    2024年02月10日
    浏览(38)
  • 基于51单片机的单片机倒车雷达报警系统

      前言 至今世界汽车工业通过了近122年的进展,今世汽车已经超级成熟和普遍了。汽车已经渗透于国防建设、国民经济和人类生活的各个领域当中,成为人类生存必不可少的、最要紧的交通工具,尽管每辆车都有后视镜,但不可幸免地都存在一个后视盲区,倒车雷达那么能够

    2024年02月04日
    浏览(38)
  • 51单片机课程设计——基于单片机的AD模数转换设计

    一、功能简介 1.A/D 是模拟量到数字量的转换,依靠的是模数转换器(AnalogtoDigitalConverter),简称ADC。D/A是数字量到模拟量的转换,依靠的是数模转换器(DigitaltoAnalogConverter),简称DAC。它们的道理是完全一样的,只是转换方向不同,因此我们讲解过程主要以A/D为例来讲解。

    2024年02月04日
    浏览(38)
  • 51单片机项目(9)——基于51单片机的电子琴设计

    简易电子琴设计设计内容: 1.用矩阵键盘代表琴键,至少能弹出8个音符,分别是:音符1.23.4.,5,6,  2.键按下的时间长短表征节拍的长短,用蜂鸣器发出声音 3.数码管显示出当前音符 4.音量可调 (代码及其工程文件放在最后) 电路图如下: 51单片机电子琴是一种基于51单片机(

    2024年02月09日
    浏览(32)
  • 单片机原理与应用课程设计-基于51单片机的时钟日历

    摘 要 本课程设计是基于51单片机的日历时钟设计。作为嵌入式系统中常用的控制器,单片机在各种电子设备和系统中广泛应用。日历时钟作为一个常见的功能模块,在现代生活中具有重要意义。因此,设计一个基于51单片机的日历时钟,不仅有助于我们掌握单片机编程技术和

    2024年02月20日
    浏览(47)
  • 单片机毕设 基于单片机的智能快递柜设计与实现

    Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目 基于单片机的智能快递柜设计与实现 大家可用于 课程设计 或 毕业设计 🧿 毕设项目分享:见文末! 一般来说,传统快递服务方式是人对人,即快递员进行揽件派送,与签收人进行面对面签收,确认无误后服务终

    2024年04月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包