设计一款基于51单片机的高效MQ-5天然气监测报警系统

基于51单片机的天然气监测报警系统设计

基于51单片机的天然气监测报警系统设计

  • 视频
  • 1 开发环境
  • 2 功能说明介绍
  • 3 仿真图
  • 4 程序
  • 5 原理图
  • 6 视频讲解
  • 7 设计报告
  • 7.1 设计目的
  • 7.2 概述
  • 7.3 国内外研究现状
  • 8 资料清单下载链接
  • 视频

    基于51单片机的MQ-5天然气监测报警系统设计

    1 开发环境

    仿真图:proteus8.9以上

    程序代码:KEIL4/KEIL5

    原理图:AD

    设计编号:A0008

    2 功能说明介绍

    结合实际情况,基于51单片机设计一个天然气监测报警统设计。该系统应满足的功能要求为:

    实物功能:

    本设计由51单片机+MQ-5传感器模块电路+3个LED指示灯电路+蜂鸣器报警电路+PCF8591AD模块+风扇控制电路+继电器电路+电源电路组成。

    1、MQ-5实时检测煤气浓度,浓度分为低中高3档,并分别用绿灯、黄灯和红灯指示,浓度到达相应的档位,则相应的灯亮,指示灯指示安全状态。

    2、当浓度达到高档的时候,蜂鸣器报警,风扇启动,疏散煤气,继电器工作驱动负载断开煤气阀;

    3、当浓度达到中档时,继电器工作,驱动负载断开煤气阀。

    仿真功能:

    本设计由51单片机+MQ-5传感器模块电路+LED指示灯电路+蜂鸣器报警电路+ADC0832模块+风扇控制电路+继电器电路+电源电路组成。

    1、MQ-5实时检测煤气浓度,浓度分为2档,并分别用绿灯红灯指示,浓度到达相应的档位,则相应的灯亮,指示灯指示安全状态。

    2、当浓度达到高档的时候,蜂鸣器报警,风扇启动,疏散煤气,继电器工作驱动负载断开煤气阀;红灯闪烁。

    3、当浓度达到低档时,风扇关闭,煤气阀正常工作,绿灯闪烁。

    3 仿真图

    AT89C51可以替换为AT89C52,实物可以换做STC89C51,STC89C52

    AT89C51是美国ATMEL公司生产的低电压,高性能CMOS16位单片机,片内含4k bytes的可反复擦写的只读程序存储器和128 bytes的随机存取数据存储器,期间采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用16位中央处理器和Flash存储单元,功能强大的AT89C51单片机可灵活应用于各种控制领域。

    AT89C51提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个1 6位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

    本系统中央控制器采用的AT89C51单片机,复位电路采用上电复位电路。外接的晶振为12MHz晶振。

    img

    4 程序

    工程文件使用Keil4/keil5打开。编译产生hex加载到对应的单片机中。实物代码和仿真代码略有不同。分别的工程文件。

    img

    代码

    #include <reg52.h> 
    #include <intrins.h>
    #include <stdio.h>
    #include "i2c.h"
    #include "delay.h"
    
    sbit fengshan = P1^0;  //接口定义
    sbit buzzer = P1^1;
    sbit relay = P1^2;  
    sbit LED_GRE = P1^3;  
    sbit LED_YEL = P1^4;
    sbit LED_RED = P1^5;
    
    unsigned long time_20ms=0;	//定时变量
    unsigned char dis0[16];		//数组暂存
    unsigned char midVolt ;		//ad采集电压
    unsigned char i; 
    
    void Init_Timer0(void);//函数声明
    void UART_Init(void);
    void uartSendByte(unsigned char dat);
    void uartSendStr(unsigned char *s,unsigned char length);
     
    void main (void)
    {
    
    	Init_Timer0();        //定时器0初始化
    	
    	UART_Init();
    	DelayMs(120);
    	uartSendStr("ready ok!",9);
    	while(1)         //主循环
    	{
    			midVolt=ReadADC(0)*99/255;				//读取AD检测到的转化为数值
    			sprintf(dis0,"NongDu:%2d\n",(unsigned int)midVolt);	 //发送
    			uartSendStr(dis0,10);
    			if(midVolt<30)		
    			{
    				fengshan = 1;//关 风扇
    				buzzer = 1;//关 蜂鸣器
    				relay = 1;//关 继电器
    				LED_GRE = 0;//开 绿灯
    				LED_YEL = 1;//关 黄灯
    				LED_RED = 1;//关 红灯			
    			}
    			else if(midVolt<50)		
    			{
    				fengshan = 1;//关 风扇
    				buzzer = 1;//关 蜂鸣器
    				relay = 0;//开 继电器
    				LED_GRE = 1;//关 绿灯
    				LED_YEL = 0;//开 黄灯
    				LED_RED = 1;//关 红灯			
    			}
    			else
    			{
    				fengshan = 0;//开 风扇
    				buzzer = 0;//开 蜂鸣器
    				relay = 0;//开 继电器
    				LED_GRE = 1;//关 绿灯
    				LED_YEL = 1;//关 黄灯
    				LED_RED = 0;//开 红灯			
    			}
    			for(i=0;i<5;i++) DelayMs(100);
    	}
    }
    
    void Init_Timer0(void)
    {
     TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
     TH0=(65536-20000)/256;		  //重新赋值 20ms
     TL0=(65536-20000)%256;
     EA=1;            //总中断打开
     ET0=1;           //定时器中断打开
     TR0=1;           //定时器开关打开
    }
    
    void Timer0_isr(void) interrupt 1 
    {
     TH0=(65536-20000)/256;		  //重新赋值 20ms
     TL0=(65536-20000)%256;
    
     time_20ms++;
    }
    void UART_Init(void)
    {
        SCON  = 0x50;		        // SCON: 模式 1, 8-bit UART, 使能接收  
        TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
        TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz  
        TR1   = 1;                  // TR1:  timer 1 打开                         
        EA    = 1;                  //打开总中断
        ES    = 1;                  //打开串口中断
    }
    
    void uartSendByte(unsigned char dat)
    {
    	unsigned char time_out;
    	time_out=0x00;
    	SBUF = dat;			  //将数据放入SBUF中
    	while((!TI)&&(time_out<100))  //检测是否发送出去
    	{time_out++;DelayUs2x(10);}	//未发送出去 进行短暂延时
    	TI = 0;						//清除ti标志
    }
    
    void uartSendStr(unsigned char *s,unsigned char length)
    {
    	unsigned char NUM;
    	NUM=0x00;
    	while(NUM<length)	//发送长度对比
    	{
    		uartSendByte(*s);  //放松单字节数据
    		s++;		  //指针++
    		NUM++;		  //下一个++
      	 }
    }
    
    void UART_SER (void) interrupt 4 //串行中断服务程序
    {
    	unsigned char u_buf;
        if(RI)                        //判断是接收中断产生
        {
    	  RI=0;                      //标志位清零
    	  u_buf = SBUF;
    	}
       if(TI)  //如果是发送标志位,清零
    	TI=0;
    }
    

    流程图如下图所示。

    img

    5 原理图

    原理图由AD绘制,原理图和仿真图有出入,原理图需要电源,电源开关模块。此设计资料详细,硬件手册资料图片详细,不对硬件调试负责,做实物需要一定的基本功。主控芯片可以换为STC89C51/STC89C52

    img

    本设计由STC89C52单片机+天然气传感器模块电路+3个LED指示灯电路+蜂鸣器报警电路+风扇控制电路+继电器控制电路+电源电路组成。

    1、MQ-5实时检测煤气浓度,浓度分为低中高3档,并分别用绿灯、黄灯和红灯指示,浓度到达相应的档位,则相应的灯亮,指示灯指示安全状态。

    2、当浓度达到高档的时候,蜂鸣器报警,风扇启动,疏散煤气。

    3、浓度达到中档的时候继电器断开。

    img

    6 视频讲解

    代码讲解+仿真讲解+仿真演示+原理图讲解

    7 设计报告

    人的生存离不开空气,人的一生大约有80%的时间是在室内度过的,室内环境质量的好坏影响着人们的身心健康。室内的有害气体来源有来自装修不当造成的甲醛、氨气、氡气、苯、放射性物质的释放,而这些气体在装修时加以注意,完全可以减少其排放量,从而不至于影响人的健康状况。室内存在的有害气体的另一主要来源为可燃性气体的泄漏,主要可分为天然气泄漏、液化气泄漏和煤气泄漏。

    煤气泄漏的主要成分是一氧化碳与氢气,一氧化碳中毒原因是一氧化碳进入人体后会和血液中的血红蛋白结合,从而出现缺氧。常见于家庭居室内通风差得情况下,煤炉产生的煤气或液化气管道泄漏气中的一氧化碳吸入会导致一氧化碳中毒。 液化气泄漏危害也不易小视,液化石油气是石油产品之一。是由炼厂气或天然气(包括油田伴生气)加压、降温、液化得到的一种无色、挥发性气体。由炼厂气所得的液化石油气,主要成分为丙烷、丙烯、丁烷、丁烯,同时含有少量戊烷、戊烯和微量硫化合物杂质。由天然气所得的液化气的成分基本不含烯烃。液化石油气主要用作石油化工原料,用于烃类裂解制乙烯或蒸气转化制合成气,可作为工业、民用、内燃机燃料。其主要质量控制指标为蒸发残余物和硫含量等,有时也控制烯烃含量。液化石油气是一种易燃物质,空气中含量达到一定浓度范围时,遇明火即爆炸。

    天然气主要成分是烷烃,其中甲烷含量在95%以上。人所赖以生存的空气中有大约20%的氧气,如果人的生活空间是封闭空间,氧气稀薄,人会因氧气不足,导致窒息、昏迷,有心脑血管疾病的人将会危及生命。室内天然气泄漏会使室内空气中的氧气相对稀薄,由于天然气是无色无味,人很难察觉到,尤其当人处于睡眠状态时,天然气的泄漏就更加危险,甚至会使人窒息。天然气的另一危险是当空气中的天然气含量达到一定含量时,遇到明火就会产生爆炸,危及人的生命。

    人们面对可燃性气体泄漏而危及生命健康情况,有没有一个彻底的解决办法?据有关专家介绍,可燃气体泄漏报警器是对付燃气泄漏的重要预防手段之一。为防止中毒事件发生,现提出利用单片机系统进行有效的预防措施。所以怎样预防燃气中毒与爆炸已成为人们的迫切需要。基于此现实,本设计宗旨是为家庭用户设计一种能够对天然气,液化气和、煤气泄漏的装置,从于减少不必要的事故,进于保证人民的生命健康,减少不必要的损失。

    7.1 设计目的

    (1)巩固和加深对单片机原理和接口技术知识的理解;

    (2)培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;

    (3)学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;

    (4)掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;

    (5) 能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图、仿真图和流程图。

    7.2 概述

    随着天然气的大量使用,每一座居民大楼都被天然气所“笼罩”。天然气的普及给公共生活带来了方便,减少了城市的污染,提高了生活质量和效率,但是同时,天然气也是潜在的“危险品”,一旦发生大面积泄漏,处置不及时就可能引发大爆炸,给居民的生命财产安全带来巨大的威胁。面对燃气泄漏而造成的种种事故威胁,我们需要一个解决办法。使用天然气报警器是对付燃气无形杀手的重要手段之一。

    本论文以半导体气敏传感器和单片机技术为核心设计的气体报警器可实现声光报警功能,是一种结构简单、性能稳定、使用方便、价格低廉、智能化的气体报警器,具有一定的实用价值。

    其中选用MQ-5传感器实现对气体的检测,具有灵敏度高、响应快、抗干扰能力强等优点,而且价格低廉,使用寿命长。传感器采集到数据,经过A/D转换后,再由单片机处理,并对处理后的数据进行分析,是否大于或等于某个预设值(也就是报警限),如果大于则会自动启动报警电路发出报警声音和风扇,反之则为正常状态,

    7.3 国内外研究现状

    可燃性气体泄漏报警器,多用于大型公寓、饮食餐店、医院、学校、工厂的各种气体报警器和系统,有单体分离型报警器、外部报警系统、集中监视系统、遮断连动系统、防止中毒报警防护系统等。可燃性气体泄漏报警器可发出声光报警,或伴有数字显示,或联动外部设备。有的可燃性气体泄漏报警器可自动开启排风扇,把燃气排出室外;有的可燃性气体泄漏报警器在报警时可自动关闭燃气阀门,以防燃气继续泄漏。当前应用最广泛的可燃性气体泄漏报警器与气敏元件传感器,已普及应用于气体泄漏检测和监控,仅用于安全保护家用燃气泄漏报警器为例,不少发达国家已经明确规定家庭、公寓等要求安装相应的报警器。国外可燃性气体泄漏报警器发展很快,是由于人们安全意识增强,对环境安全性和生活舒适性要求提高;另一方面是由于燃气泄漏报警器市场增长受到政府安全法规的推动。因此,国外燃气报警器技术得到了较快发展,据有关统计猜测,美国在1996年—2002年就煤气报警器的年均增长率为27%~30%。在这些方面,国内应该增强安全意识增强。

    可燃性气体泄漏报警器的发展趋势集中表现为,一是提高灵敏度和工作性能,降低功耗和成本,缩小尺寸,简化电路,与应用整机相结合,这也是燃气泄漏报警器一直追求的目标;二是增强可靠性,实现元件和应用电路集成化,多功能化,发展MEMS技术,发展现场适用的变送器和智能型可燃性气体泄漏气报警器。如美国在燃气泄漏报警器中嵌入微处理器,使燃气泄漏报警器具有控制校准和监视故障状况功能,实现了智能化、涉多功能化。

    img

    8 资料清单下载链接

    见文章开头视频

    img

    物联沃分享整理
    物联沃-IOTWORD物联网 » 设计一款基于51单片机的高效MQ-5天然气监测报警系统

    发表评论