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


主要介绍

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

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

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

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

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

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

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

在这里插入图片描述

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

二、电源电路设计

  

如图3.11,本设计用USB供电,用自锁开关和DC插座为单片机提供5V电源。
在这里插入图片描述

图3.11 电源电路

三、系统软件设计与实现

4.1 主程序框图

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

图4.2 主程序流程图

实物

在这里插入图片描述

程序源码

#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

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值