基于单片机的综合火灾报警系统Word格式.docx
《基于单片机的综合火灾报警系统Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的综合火灾报警系统Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
3.软件设计……………………………………………………………………………………9
3.1主体设计思路……………………………………………………………………………9
3.2主程序流程图…………………………………………………………………………10
4.结束语………………………………………………………………………………………11
参考文献………………………………………………………………………………………11
程序清单………………………………………………………………………………………12
1、引言
我国的火灾自动报警控制系统经历了从无到有、从简单到复杂的发展过程,其智能化程度也越来越高,灵敏度也越来越高[1]。
目前国内厂家多偏重用于大型仓库、商场、高级写字楼、宾馆等场所大型火灾报警系统的研发,他们采用集中区域报警控制方式,其系统复杂、成本较高[2]。
本系统则主要应用于居民住宅、机房、办公室等场所的小型防火报警器。
廉价实用且可在火灾发生的初期就检测到并且发出声光报警,同时可实时显示该场所的环境温度[3]。
2、报警器硬件设计
设计原理:
单片机巡回检测温度、红外辐射、烟雾并显示各自的值,当以上一项发生异常时系统认为发生了火灾,发出声光报警信号,直到异常被排除,系统才自动停止报警。
2.1硬件组成
图2-1硬件组成
如图2-1,本系统主要由单片机控制模块、温度采集模块、烟雾探测模块、红外探测模块、数码管显示模块、声光报警模块。
2.2单片机控制模块
因本系统要求实时显示检测值,涉及到一些计算及BCD转化的处理,同时考虑到功耗等问题,综合考虑后选择AT89C51作为本系统的中央控制器。
2.2.1AT89C51的简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C51是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C51是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案[4]
2.2.2单片机接线
图2-2单片机接线
如图2-2所示,晶振电路和复位电路。
其中P0口用于数码管的显示。
P1口用于传感器的数据采集。
P2.0、P2.1、P2.7、P3.6、P3.7用于8255的片选。
P2.2、P2.3用于控制声光报警。
P2.4、P2.5、P2.6连接开关控制数码管显示。
P3.0、P3.1、P3.2作为AD0808的控制端,P3.3、P3.4用于ADC0808的地址端。
2.3数码显示电路
图2-3数码显示电路连接图
本系统采用六位数码管来显示传感器采集数值,其接线如图2-3所示其中8255中PA口控制段选,PB口控制位选,数码管采用共阳接法。
2.4声光报警电路
因为本系统是应用在办公室、机房等小单位的防火场所,所已采用发光二及管电路及蜂鸣电路作为报警电路,其接线如图2-4所示
图2-4声光报警电路
2.5数据检测电路
由于条件有限,在仿真过程中,有滑动变阻器以及直流电压表仿真模拟量,从而代替温度,烟雾以及红外采集的模拟量。
如图2-5所示。
而实际的数据采集电路在后面有介绍。
图2-5数据采集电路
2.5.1烟雾检测模块
火灾中气体烟雾主要是CO2和CO,TGS202气体传感器能探测到CO2,CO甲烷,煤气等多种气体,他灵敏度高,稳定性好,适合于火灾中奇特的探测。
如图2-5所示,当TGS202探测到CO2或者CO时,传感器的内阻变小,VA迅速上升。
选择适当的电阻阻值,使得当气体浓度达到一定程度(入CO浓度达到0.06%)时,VA端活的适当的电压(设为3V)。
电路如图2-6。
图2-6TGS202检测电路
2.5.2红外探测模块
本系统的红外检测模块采用单光束反射取样式光电传感器ST178,该传感器是由南平旭光电子科技有限公司开发生产的主要应用于物体运动方向及正反转转速、行程测量等。
其在本系统中的应用原理是,光电传感器接收孔探测到火焰辐射的较强烈的红外线时,接收管导通输出一定的电压,辐射越强烈,则3脚输出的电压也越大,应此把3脚接与比较器LM339,当辐射达到一定时比较器输出高电平,当在无红外辐射或辐射较少时,比较器输出底电平,并且ST178对人体辐射的红外线波长不敏感,对火焰辐射的红外线可灵敏检测,价格实惠,因此本系统采用该传感器作为红外敏感元件。
其检测电路如图2-7所示。
图2-7ST178检测电路
2.5.3温度采集模块
本系统要求要实时显示环境温度当温度高于常态时作出声光报警,为了能够更准确更快速地采集到环境温度,采用AD590温度传感器。
AD590是美国模拟器件公司的电流输出型温度传感器,供电电压范围为3~30V,输出电流223μA(-50℃)~423μA(+150℃),灵敏度为1μA/℃。
当在电路中串接采样电阻R时,R两端的电压可作为喻出电压。
注意R的阻值不能取得太大,以保证AD590两端电压不低于3V。
AD590输出电流信号传输距离可达到1km以上。
作为一种高阻电流源,最高可达20MΩ,所以它不必考虑选择开关或CMOS多路转换器所引入的附加电阻造成的误差。
适用于多点温度测量和远距离温度测量的控制。
其检测电路如图2-8所示。
图2-8AD590检测电路
2.6原理图及分析
原理图如图2-9所示:
图2-9原理图
分析:
(1)、当开关1(P24)按下时,数码管显示的是温度值。
此温度可调范围为0~255,当温度超过50时,开始报警;
仿真图如图2-10所示。
图2-10温度仿真图
(2)、当开关2(P25)按下时,数码管显示的是烟雾值。
此烟雾浓度可调范围为0~510,当浓度超过100时,开始报警;
仿真图如图2-11所示。
图2-11烟雾仿真图
(3)、当开关3(P26)按下时,数码管显示的是辐射值。
此辐射可调范围为0~765,当辐射超过200时,开始报警;
仿真图如图2-12所示。
图2-12辐射仿真图
3.软件设计
3.1主要设计思路
主程序循环判断以上三项是否发生异常,当有一项异常时,则系统认为发生了火灾,发出声光报警,直到异常被排除。
3.2主程序流程图如下所示
图3-1主程序图
4.结束语
经过这次课程设计,我明白了一项设计的完成,必须要严谨的思路,并且要按部就班地去做,不骄不躁,要细心要认真,一步步地去调试,不断修改电路以及程序。
最终一定会收获颇丰。
学会了高效率的查阅资料、运用工具书、利用网络查找资料。
我发现,在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整。
偶尔还会遇到错误的资料现象,这就要求我们应更加注重实践环节。
此次课程设计是对大学三年所学知识的一次运用和检阅,同时对自学能力提出很高的要求,所以平时的学习离开思考,就是严重的错误,我们学习不应该有偏科现象,各方面的知识都应该要接触,这样做才能为毕业设计打下基石。
最后,衷心地感谢我的同学。
在两周的设计过程中,你们给了我很大的帮助和细心的指导。
参考文献
[1]火灾自动报警系统设计规范-GB50116-98中华人民共和国建设部施行日期:
1999年
6月1日
[2]战卫东《谈谈火灾统计》《山东消防》[J]2003年9期-32-32页
[3]胡显华《火灾探测器误报警的原因及改进方法》《电脑开发与应用》[J]2007年20卷11期60-62
[4]李广弟.单片机基础[M].北京:
北京航空航天大学出版社,1994.
[5]陈海宴《51单片机原理及应用》[M].北京:
北京航空航天大学出版社,2010年7月
[6]谭浩强《C程序设计》[M].北京:
清华大学出版社,2005年
程序清单:
#include<
reg51.h>
math.h>
stdio.h>
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetab[16]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//7段共阳数码管编码表
/********************定义端口********************/
sbitSTART=P3^0;
sbitEOC=P3^1;
sbitOE=P3^2;
sbitkait=P2^4;
sbitkaiy=P2^5;
sbitkaif=P2^6;
sbitRED=P2^2;
sbitSOUNDER=P2^3;
sbitLEDG=P2^2;
sbitLEDR=P2^3;
sbitADDA=P3^3;
sbitADDB=P3^5;
sfrled=0x80;
//定义特殊功能寄存器,地址是0x80
/********************定义变量********************/
ucharxdataduan_at_0x7cff;
//PA
ucharxdatawei_at_0x7dff;
//PB
ucharxdatacon_at_0x7fff;
//控制字
uintgw,sw,bw;
uintstr[6];
uintaa,count,tt,flag;
uinttemp2,temp0,temp1,temp;
uchart,num;
/********************延时程序********************/
voiddelay(uinti)
{
uintj;
for(j=0;
j<
=i;
j++);
}
/***