C语言编程的智能火灾报警监测系统
【《基于单片机智能火灾报警系统设计与实现(论文)》9600字】
基于单片机智能火灾报警系统设计与实现目录第1章绪论 (1)1.1 研究背景与意义 (1)1.2 国内外研究现状及发展趋势 (1)1.3 本文的研究内容 (2)第2章智能家居安防报警系统的总体设计 (3)2.1 系统的整体设计方案与设计 (3)2.1.1 系统总体设计要求 (3)2.1.2 整体设计方案框图 (3)2.2 设计难点及创新 (3)第3章智能火灾报警系统的设计原理与实现 (4)3.1 智能火灾报警系统下位机框图 (4)3.2 硬件电路设计 (4)3.2.1 核心控制芯片 (4)3.2.2 防火报警模块设计 (5)3.2.3 显示屏模块 (7)第4章系统软件设计 (8)4.1 软件开发工具 (8)4.2 系统程序代码设计 (8)4.3 烟雾传感器报警模块设计 (9)4.3.1 烟雾检测模块硬件设计 (9)4.3.2 MQ-2烟雾传感器软件设计 (11)第5章系统测试与误差分析 (12)5.1 系统测试 (12)5.2 误差分析 (13)总结与展望 (15)参考文献 (16)第1章绪论1.1研究背景与意义目前,智能家庭已经渗透到了生活的方方面面,如空调、电热水器、电冰箱等,不但提升了人们的生活质量,同时也为家居产品的设计思想提供了新的思路。
所以,在未来的社会发展中,智能家庭必将成为一种新的、有前途的发展趋势。
火灾是当前危害最大、危害最大、危害最大的灾害,一旦发生火灾,人们往往会束手无策,只有等待消防队的及时赶到才能将其扑灭。
在此期间,极有可能出现危及人民生命和财产安全的意外事件,其破坏程度远远超过了地震。
随着火灾的发生,人们越来越认识到防火工作的重要性和必要性。
如何及早地发现和采取有效的防范措施是非常必要的,因此,寻找一种能够有效地探测和防止火灾的方法和装置是非常必要的。
通过对周边环境的快速探测和预警,可以使人们在第一时间作出相应的应对,使其达到最大程度的减少,所以消防预警系统的设计与研制对于保障居民的日常生活非常重要。
C语言中的智能安防与智能监控系统
C语言中的智能安防与智能监控系统
智能安防与智能监控系统在C语言中的实现方式非常重要,可以帮助我们实现对安全的有效监控和管理。
在C语言中,我们可以利用各种传感器和摄像头来获取各种数据,然后通过编程实现智能识别和处理。
首先,我们可以通过C语言编程来实现基本的智能安防功能,如门禁系统、烟雾报警器、温度监测等。
通过各种传感器和模块,我们可以获取环境数据,然后利用C语言编程实现相应的逻辑判断和控制。
比如,当检测到有人靠近门口时,我们可以通过C语言控制门禁系统开启或关闭,保障安全。
其次,通过C语言编程我们可以实现智能监控系统,利用摄像头和图像处理算法来实现对目标的实时监控和识别。
我们可以通过C语言编写图像处理算法,对摄像头所捕捉到的图像进行分析和识别,如人脸识别、车牌识别等。
这样可以实现对特定目标的有效监控,保障安全。
另外,在C语言中还可以通过网络通信模块实现远程监控和管理。
利用C语言编程,我们可以实现设备与设备之间的数据交换和通信,实现远程监控和管理功能。
比如,可以通过手机App远程查看监控画面,实时掌握安全状态。
总的来说,在C语言中实现智能安防与智能监控系统需要具备一定的编程能力和对硬件的了解。
通过合理的设计和编程,我们可以实现各种智能功能,提高安全性和便利性。
希望以上内容能对您有所帮助。
温度测量、报警系统 C程序
程序名称:DS18B20温度测量、报警系统简要说明:DS18B20温度计,温度测量范围0~99.9摄氏度可设置上限报警温度、下限报警温度即高于上限值或者低于下限值时蜂鸣器报警默认上限报警温度为38℃、默认下限报警温度为5℃报警值可设置范围:最低上限报警值等于当前下限报警值最高下限报警值等于当前上限报警值将下限报警值调为0时为关闭下限报警功能编写:最后更新:09/04/16晚于寝室******************************************************************/ #include <AT89X52.h>#include "DS18B20.h"#define uint unsigned int#define uchar unsigned char //宏定义#define SET P3_1 //定义调整键#define DEC P3_2 //定义减少键#define ADD P3_3 //定义增加键#define BEEP P3_7 //定义蜂鸣器bit shanshuo_st; //闪烁间隔标志bit beep_st; //蜂鸣器间隔标志sbit DIAN = P2^7; //小数点uchar x=0; //计数器signed char m; //温度值全局变量uchar n; //温度值全局变量uchar set_st=0; //状态标志signed char shangxian=38; //上限报警温度,默认值为38signed char xiaxian=5; //下限报警温度,默认值为38ucharcode LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x ff};/*****延时子程序*****/void Delay(uint num){while( --num );}/*****初始化定时器0*****/void InitTimer(void){TMOD=0x1;TH0=0x3c;TL0=0xb0; //50ms(晶振12M)}/*****定时器0中断服务程序*****/void timer0(void) interrupt 1{TH0=0x3c;TL0=0xb0;x++;}/*****外部中断0服务程序*****/void int0(void) interrupt 0{EX0=0; //关外部中断0if(DEC==0&&set_st==1){shangxian--;if(shangxian<xiaxian)shangxian=xiaxian; }else if(DEC==0&&set_st==2){xiaxian--;if(xiaxian<0)xiaxian=0;}}/*****外部中断1服务程序*****/void int1(void) interrupt 2{EX1=0; //关外部中断1if(ADD==0&&set_st==1){shangxian++;if(shangxian>99)shangxian=99;}else if(ADD==0&&set_st==2){xiaxian++;if(xiaxian>shangxian)xiaxian=shangxian; }}/*****读取温度*****/void check_wendu(void){uint a,b,c;c=ReadTemperature()-5; //获取温度值并减去DS18B20的温漂误差 a=c/100; //计算得到十位数字b=c/10-a*10; //计算得到个位数字m=c/10; //计算得到整数位n=c-a*100-b*10; //计算得到小数位if(m<0){m=0;n=0;} //设置温度显示上限if(m>99){m=99;n=9;} //设置温度显示上限}/*****显示开机初始化等待画面*****/Disp_init(){P2 = 0xbf; //显示-P1 = 0xf7;Delay(200);P1 = 0xfb;Delay(200);P1 = 0xfd;Delay(200);P1 = 0xfe;Delay(200);P1 = 0xff; //关闭显示}/*****显示温度子程序*****/Disp_Temperature() //显示温度{P2 =0xc6; //显示CP1 = 0xf7;Delay(300);P2 =LEDData[n]; //显示个位P1 = 0xfb;Delay(300);P2 =LEDData[m%10]; //显示十位DIAN = 0; //显示小数点P1 = 0xfd;Delay(300);P2 =LEDData[m/10]; //显示百位P1 = 0xfe;Delay(300);P1 = 0xff; //关闭显示}/*****显示报警温度子程序*****/Disp_alarm(uchar baojing){P2 =0xc6; //显示CP1 = 0xf7;Delay(200);P2 =LEDData[baojing%10]; //显示十位P1 = 0xfb;Delay(200);P2 =LEDData[baojing/10]; //显示百位P1 = 0xfd;Delay(200);if(set_st==1)P2 =0x89;else if(set_st==2)P2 =0xc7; //上限H、下限L标示P1 = 0xfe;Delay(200);P1 = 0xff; //关闭显示}/*****报警子程序*****/void Alarm(){if(x>=10){beep_st=~beep_st;x=0;}if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=0; else BEEP=1;}/*****主函数*****/void main(void){uint z;InitTimer(); //初始化定时器EA=1; //全局中断开关TR0=1;ET0=1; //开启定时器0IT0=1;IT1=1;check_wendu();check_wendu();for(z=0;z<300;z++){Disp_init();}while(1){if(SET==0){Delay(2000);do{}while(SET==0);set_st++;x=0;shanshuo_st=1;if(set_st>2)set_st=0;}if(set_st==0){EX0=0; //关闭外部中断0EX1=0; //关闭外部中断1check_wendu();Disp_Temperature();Alarm(); //报警检测}else if(set_st==1){BEEP=1; //关闭蜂鸣器EX0=1; //开启外部中断0EX1=1; //开启外部中断1if(x>=10){shanshuo_st=~shanshuo_st;x=0;} if(shanshuo_st) {Disp_alarm(shangxian);} }else if(set_st==2){BEEP=1; //关闭蜂鸣器EX0=1; //开启外部中断0EX1=1; //开启外部中断1if(x>=10){shanshuo_st=~shanshuo_st;x=0;} if(shanshuo_st) {Disp_alarm(xiaxian);} }}}/*****END*****/DS18B20.h:#include <AT89X52.h>#define DQ P3_6 //定义DS18B20总线I/O/*****延时子程序*****/void Delay_DS18B20(int num){while(num--) ;}/*****初始化DS18B20*****/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位Delay_DS18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低Delay_DS18B20(80); //精确延时,大于480usDQ = 1; //拉高总线Delay_DS18B20(14);x = DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败Delay_DS18B20(20);}/*****读一个字节*****/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;Delay_DS18B20(4);}return(dat);}/*****写一个字节*****/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;Delay_DS18B20(5);DQ = 1;dat>>=1;}}/*****读取温度*****/unsigned int ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0x44); //启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器a=ReadOneChar(); //读低8位b=ReadOneChar(); //读高8位t=b;t<<=8;t=t|a;tt=t*0.0625;t= tt*10+0.5; //放大10倍输出并四舍五入 return(t);}/*****END*****/。
消防主控编程实验报告(3篇)
第1篇一、实验目的1. 掌握消防主控系统的基本原理和组成。
2. 熟悉消防主控编程的基本方法和技巧。
3. 能够根据实际需求设计并实现消防主控程序。
4. 提高编程能力和实际应用能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C/C++3. 开发工具:Visual Studio 20194. 实验设备:消防主控实验箱、计算机、网络连接三、实验原理消防主控系统是火灾自动报警系统中重要组成部分,其主要功能是实现火灾探测、报警、联动控制等功能。
本实验主要研究消防主控编程,包括以下几个方面:1. 火灾探测器编程:实现火灾探测器的数据采集、处理和传输。
2. 报警器编程:实现火灾报警信号的输出,包括声光报警和短信报警等。
3. 联动控制编程:实现消防设备(如灭火器、喷淋系统等)的自动控制。
四、实验内容1. 火灾探测器编程(1)数据采集:通过模拟传感器接口读取火灾探测器的模拟信号,转换为数字信号。
(2)数据处理:对采集到的数字信号进行滤波、阈值判断等处理,判断是否发生火灾。
(3)数据传输:将处理后的数据通过通信接口发送到消防主控主机。
2. 报警器编程(1)声光报警:当检测到火灾信号时,触发声光报警器,发出声光报警信号。
(2)短信报警:通过短信发送功能,将火灾报警信息发送给相关人员。
3. 联动控制编程(1)灭火器控制:当检测到火灾信号时,自动启动灭火器,进行灭火。
(2)喷淋系统控制:当检测到火灾信号时,自动启动喷淋系统,进行灭火。
五、实验步骤1. 火灾探测器编程(1)搭建实验环境:连接消防主控实验箱和计算机,确保通信接口正常。
(2)编写数据采集程序:使用C/C++语言编写数据采集程序,实现模拟传感器接口的读取。
(3)编写数据处理程序:对采集到的数据进行分析和处理,判断是否发生火灾。
(4)编写数据传输程序:将处理后的数据通过通信接口发送到消防主控主机。
2. 报警器编程(1)编写声光报警程序:使用C/C++语言编写声光报警程序,实现声光报警器的控制。
基于STM32F103C8T6单片机的火灾报警系统的设计与实现
基于STM32F103C8T6单片机的火灾报警系统的设计与实现基于STM32F103C8T6单片机的火灾报警系统的设计与实现电子与信息工程技术的快速发展为日常生活带来了许多便捷,同时也引发了一系列安全隐患。
其中最为危险的一类安全问题就是火灾。
为了及时检测和报警火灾,设计并实现一个可靠而高效的火灾报警系统是至关重要且迫切需要的。
本文将从系统设计和实现的角度,介绍基于STM32F103C8T6单片机的火灾报警系统。
一、系统设计1. 硬件设计火灾报警系统主要由传感器模块、控制模块、报警模块和显示模块四部分组成。
传感器模块:火灾报警系统的传感器模块使用烟雾传感器和温度传感器。
烟雾传感器可以检测烟雾浓度,一旦超过设定阈值,即发出火灾报警信号。
温度传感器可以检测环境温度,一旦超过安全范围,也会触发火灾报警信号。
控制模块:火灾报警系统的控制模块采用STM32F103C8T6单片机作为核心处理器。
通过该单片机,可以实现对传感器模块的数据采集、处理和控制。
在接收到传感器模块发出的火灾报警信号后,控制模块将触发报警模块发出警报。
报警模块:火灾报警系统的报警模块通常采用声光报警器。
当系统检测到火灾时,报警模块会发出巨大声响并同时亮起红灯,提醒人们火灾发生。
显示模块:火灾报警系统的显示模块通常采用液晶显示屏。
通过显示模块,可以实时显示环境温度和烟雾浓度等信息,方便人们了解火灾情况。
2. 软件设计火灾报警系统的软件设计包括嵌入式控制程序和人机界面程序两部分。
嵌入式控制程序:嵌入式控制程序主要运行在STM32F103C8T6单片机上,负责对传感器模块采集到的数据进行处理和控制。
一旦检测到火灾报警信号,嵌入式控制程序将触发报警模块发出警报。
人机界面程序:人机界面程序运行在上位机上,通过串口与STM32F103C8T6单片机进行通信。
人机界面程序可以实时接收并显示传感器模块采集到的数据,同时提供手动控制功能,例如手动触发报警模块。
火灾报警源代码
#include <AT89X52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define WENDU 40sbit deng = P1^1; //发光二极管sbit DQ = P1^2; //温度传送数据IO口sbit guang = P1^3; //光电传感器检测口sbit beep = P1^5; //蜂鸣器sbit anjian = P2^0; //控制按键char done,count,temp,flag,up_flag,down_flag; //uchar temp_value,biaozhi; //温度值uchar TempBuffer[7];uchar LCDyanwu[7];uchar lcdsx[5];sbit sw3=P1^0;sbit sw1=P1^6;sbit sw2=P1^7;uchar num1;uchar yanwu;uchar getdata=55;//检测值uint shangxian=100;//设定上限uint getdate;void kongzhi();//void show_time(); //液晶显示程序/***********1602液晶显示部分子程序****************///Port Definitions********************************************************** sbit LcdRs = P2^3;sbit LcdRw = P2^2;sbit LcdEn = P2^1;sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口/****************内部等待函数*******************************/unsigned char LCD_Wait(void){LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();LcdEn=0;return DBPort;}/**************向lcd写入命令或数据****************/#define LCD_COMMAND 0 // Command#define LCD_DATA 1 // Data#define LCD_CLEAR_SCREEN 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();//注意顺序LcdEn=1; _nop_();//注意顺序LcdEn=0; _nop_();LCD_Wait();}//设置显示模式************************************************************ #define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND, 0x08|DisplayMode);}//设置输入模式************************************************************ #define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 // default#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00 //defaultvoid LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND, 0x04|InputMode);}//初始化LCD************************************************************ void LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动}//液晶字符输入的位置************************void GotoXY(unsigned char x, unsigned char y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}//将字符输出到液晶显示void Print(unsigned char *str){while(*str!='\0')//while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}/***********ds18b20子程序*************************//***********ds18b20延迟子函数(晶振12MHz )*******/void delay_18B20(unsigned int i){while(i--);}/**********ds18b20初始化函数**********************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于480usDQ = 1; //拉高总线delay_18B20(14);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}/***********ds18b20读一个字节**************/unsigned char ReadOneChar(void){uchar i=0;uchar dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1; //数据右移一位DQ = 1; // 给脉冲信号if(DQ)dat|=0x80; //按位或,取最高位delay_18B20(4);}return(dat);}/*************ds18b20写一个字节****************/void WriteOneChar(uchar dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01; //取最低位delay_18B20(5);DQ = 1; //上升沿将数据送入dat>>=1;}}/**************读取ds18b20当前温度************/void ReadTemp(void){unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(100); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);a=ReadOneChar(); //读取温度值低位b=ReadOneChar(); //读取温度值高位temp_value=b<<4; //左移四位,扩大16倍,变为一个字节的高四位temp_value+=(a&0xf0)>>4;//取温度值的地位的高四位,右移四位后与温度的高四位相加得到温度值}void temp_to_str() //温度数据转换成液晶字符显示{TempBuffer[0]=temp_value/10+'0'; //十位TempBuffer[1]=temp_value%10+'0'; //个位TempBuffer[2]='.';TempBuffer[3]='0';TempBuffer[4]=0xdf; //温度符号TempBuffer[5]='C';TempBuffer[6]='\0';}void shangxiang_to_str() //烟雾上限数据转换成液晶字符显示{lcdsx[0]=shangxian/100+'0'; //百位lcdsx[1]=shangxian/10+'0'; //十位lcdsx[2]=shangxian%10+'0'; //个位lcdsx[3]='\0';}void Delay1ms(unsigned int count){unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}/*延时子程序*/void mdelay(uint delay){ uint i;for(;delay>0;delay--){for(i=0;i<20;i++) //1ms延时.{;}}}/*************按键模块程序设计*********************/ void key() //按键检测程序{if(sw3==0) //上限设置{if(sw1==0) //上限减功能{if(shangxian>0) shangxian--;else( shangxian=255);}if(sw2==0) //上限加功能{if(shangxian<255) shangxian++;else( shangxian=0);}}}/*************ad转换子程序******************///防止头文件被重复调用#ifndef __TLC549_ADC_H__#define __TLC549_ADC_H__#include<intrins.h> //包含头文件//TLC549管脚定义与开发板硬件对应sbit CLK = P2^5; //时钟sbit DO = P2^4; //数据输出sbit CS = P2^6; //片选//数据定义unsigned int Volt;unsigned char LCDyanwu[7]; //电压数据转化成液晶字符显示unsigned char TLC549_ADC(void); //获得数据void Data_Conversion(void); //电压换算并扩大1000倍void Volt_To_LCDyanwu(void); //数据转化成液晶字符显示//获得数据unsigned char TLC549_ADC(void){unsigned char i, tmp;CS = 1; //CS 置高,片选无效CLK = 0;CS = 0; //CS 置低,片选有效,同时DO 输出最高位_nop_();_nop_(); //适当延迟时间1.4us Setup Timefor(i = 0; i < 8; i++) //串行数据移位输入{tmp <<= 1;tmp |= DO;CLK = 1; //0.4us_nop_(); //CLK transition time Max 0.1usCLK = 0; //0.4us}CS = 1; //CS 置高,片选无效for(i = 17; i != 0; i--) _nop_(); //需要延迟时间17us return (tmp);}//电压换算并扩大1000倍void Data_Conversion(void){unsigned char AD_Data;AD_Data = TLC549_ADC();V olt = 5.0 / 256 * AD_Data * 1000;}//数据转化成液晶字符显示void Volt_To_LCDyanwu(void){Data_Conversion(); //电压换算并扩大1000倍LCDyanwu[0] = Volt / 1000 + '0'; //千位LCDyanwu[1] = '.'; //小数点LCDyanwu[2] = Volt / 100 % 10 + '0'; //百位LCDyanwu[3] = Volt / 10 % 10 + '0'; //十位LCDyanwu[4] = Volt % 10 + '0'; //个位LCDyanwu[5] = '\0'; //字符串结束标志符}#endif/*********烟雾比较子程序**************/void kongzhi(){ if(getdate>=shangxian){num1++;if(num1>=20){num1=0;yanwu=0;//烟雾异常}}else {yanwu=1;}}void show_time() //液晶显示程序{GotoXY(0,0);Print("wd:");ReadTemp(); //开启温度采集程序temp_to_str(); //温度数据转换成液晶字符GotoXY(3,0); //液晶字符显示位置Print(TempBuffer); //显示温度GotoXY(0,1);Print("yan:");TLC549_ADC();Data_Conversion();Volt_To_LCDyanwu();GotoXY(5,0);Print("Lcdyanwu");GotoXY(12,0);Print(";");shangxiang_to_str() ;GotoXY(13,0);Print(lcdsx);if(biaozhi==1){biaozhi=0;beep=~beep;deng=0;GotoXY(11,0);Print("yichang");}else{beep=1;deng=1;GotoXY(11,0);Print("zhengchang ");}}//主程序***********************main(){ getdate=TLC549_ADC();Data_Conversion();key();// 按键检测kongzhi();LCD_Initial(); //液晶初始化Init_DS18B20( ) ; //DS18B20初始化while(1){if(((temp_value>=WENDU)&&(yanwu==0))||((temp_value>=WENDU)&&(guang==0))||((guang ==0)&&(yanwu==0))||((temp_value>=WENDU)&&(yanwu==0)&&(guang==0))||( anjian==0)) {biaozhi=1;}elsebiaozhi=0;show_time(); //液晶显示数据}}。
智能火灾报警程序
//单片机P3.1——>GSM模块:TX2
//单片机P3.6——>GSM模块:IGT
#include <reg51.h>
#include <stdio.h>
#include"LCD1602.h"
#define uchar unsigned char
char code str12[]="AT+CMGS=13826593718\n" //接收短信手机号码
; //定义字符串12
****************************************************/
void dsreset(void)
{
uint i;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread(); //读低8位
b=tempread(); //读高8位
temp=b;
temp<<=8; //两个字节组合为1个字
//////////////////////////////////////////////////////////
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
C语言智能安防系统设计
C语言智能安防系统设计
智能安防系统是当今社会智能化发展的必然趋势,通过结合C语言的编程技术,可以设计出高效、稳定的智能安防系统。
在本文中,将介绍如何基于C语言开发
智能安防系统的设计方法和实现步骤。
首先,设计智能安防系统需要明确系统的功能需求。
一般来说,智能安防系统
包括视频监控、入侵检测、报警系统、门禁控制等功能。
针对不同的需求,可以逐步设计和实现每个功能模块。
在C语言中,可以通过使用各种传感器和模块,如
摄像头、红外传感器、声音传感器等,来实现这些功能。
其次,设计智能安防系统还需要考虑系统的数据处理和分析能力。
通过C语言的编程技术,可以编写数据处理算法和机器学习模型,实现对监控画面的实时分析和识别。
例如,可以利用图像处理技术对监控画面进行人脸识别、车牌识别等操作,从而实现智能报警功能。
另外,智能安防系统的实现还需要考虑系统的稳定性和可靠性。
在C语言编程中,需要充分考虑系统的内存管理、异常处理和错误处理机制,以确保系统在长时间运行中的稳定性和可靠性。
同时,对系统进行充分的测试和调试,保证系统运行正常。
最后,在设计智能安防系统时,要考虑系统的可扩展性和可维护性。
通过模块
化的设计,可以方便对系统进行功能扩展和升级。
同时,编写良好的代码注释和文档,有助于他人理解和维护系统。
总而言之,通过C语言编程技术,可以设计实现高效、稳定的智能安防系统。
在系统设计过程中,需要充分考虑功能需求、数据处理能力、稳定性和可维护性等方面,以实现一个功能完善、性能优越的智能安防系统。
希望本文对您在设计智能安防系统时有所帮助。
毕业设计(论文)-基于单片机的智能火灾报警器设计
module receiving signals trigger single-chip microcomputer control soundand light alarm.
Keywords: MCU; Smoke sensor; A/Dconversion module; Wireless Alarm
This paper fusion the smoke sensors to collect, wireless transmission and single-chip microcomputer control technology, developed based on single chip microcomputer intelligent fire of AT89C52 simple alarm.
Buzzeralarm and red LED.Its principle of work is through themicrocontrollerwill smoke sensor signal collectionarrangement, and then wireless transmission, receiving
基于STM32F103ZET6的火灾自动报警系统设计
基于STM32F103ZET6的火灾自动报警系统设计一、本文概述随着社会的快速发展和人们生活水平的提高,火灾安全问题日益受到人们的关注。
传统的火灾报警系统存在着反应速度慢、误报率高、智能化程度低等问题,已无法满足现代社会的需求。
设计一种基于STM32F103ZET6的火灾自动报警系统具有重要的现实意义和应用价值。
本文旨在设计并实现一种基于STM32F103ZET6的火灾自动报警系统。
STM32F103ZET6是一款基于ARM Cortex-M3内核的高性能微控制器,具有强大的数据处理能力和丰富的外设接口,非常适合用于火灾报警系统的核心控制器。
通过该系统的设计与实现,旨在提高火灾报警的准确性和时效性,降低火灾发生的可能性,保障人们的生命财产安全。
本文首先介绍了火灾自动报警系统的背景和意义,然后详细阐述了STM32F103ZET6微控制器的特点和应用优势。
接着,文章重点描述了系统的硬件设计和软件编程,包括传感器选型、电路设计、程序编写等方面。
通过实际测试和数据分析,验证了系统的可靠性和有效性。
本文的研究内容不仅对火灾自动报警系统的设计与实现具有一定的指导意义,也为其他领域的智能化、自动化控制提供了一定的参考和借鉴。
二、321036芯片介绍STM32F103ZET6是STMicroelectronics公司生产的一款基于ARM Cortex-M3核心的32位微控制器。
该芯片以其高性能、低功耗、易于编程和丰富的外设资源,在嵌入式系统设计中占有重要地位。
特别是在火灾自动报警系统这样的应用中,STM32F103ZET6展现出了卓越的稳定性和可靠性。
STM32F103ZET6拥有高达72MHz的工作频率,使得系统处理能力强大,可以迅速响应火灾报警等紧急事件。
同时,该芯片内嵌了高速存储器,包括高达512KB的Flash和64KB的SRAM,为系统提供了充足的数据存储和运行空间。
STM32F103ZET6还拥有多种低功耗模式,可根据实际应用需求灵活调整功耗,非常适合需要长时间稳定运行的火灾报警系统。
实验3火灾报警器
实验三火灾报警器一、实验目的1、掌握利用单片机C语言编写控制声光报警的程序;2、掌握利用单片机C语言编写独立按键控制程序;3、掌握利用单片机端口对输入信号进行有效判断;4、了解火焰传感器的工作原理与使用方法;5、掌握外部中断的使用方法。
二、实验设备1、计算机;2、火灾报警器电路板;3、电源线;4、下载线。
三、设计任务设计一种检测火焰功能的简易报警器,该报警器可以有效预防火灾的发生,当检测到火焰信号时,发出声光报警。
四、设计要求1、基本要求(1)紧急报警操作,当紧急报警按键ALARM按下时,声光报警,红色LED点亮,蜂鸣器响起。
(2)手动布防操作,当布防按键SET按键按下时,绿色LED点亮,一旦检测到火焰信号,蜂鸣器长响。
2、发挥部分(1)按下布防按键SET,进入布防状态,当检测到火焰信号,蜂鸣器响起;当报警器处于布防状态时,若没检测到火焰信号,也可以通过紧急报警按键ALARM进行声光报警;(2)无论是手动报警,还是自动报警发生时,都可以通过警报解除按键CANCEL将报警信号消除。
五、实验电路及连线1、USB电源线接到计算机USB口;2、下载线连接如表所示;3、各部分电路六、实验步骤1、启动Keil C软件:双击桌面上图标,;2、新建工程:Project→New →uVision Project.. ,输入工程名字,不加后缀,保存;3、选择单片机型号:左侧选项卡中的“Atmel”→“A T89C52”,然后点击“确定”;4、新建文件:File →New, 输入程序内容,保存**.C;5、添加文件到工程:左侧Project Workspace→Target 1→Source Group 1→鼠标右键点击Source Group 1 →选择选项卡中Add Files to Group …Source Group 1;6、编译:Project→Rebuild all target files;7、Hex文件的输出:Project→Options for Target …Target 1‟→Output,8、将“Creat Hex Files”前面对话框内选择“√”,点击“确定”;9、下载程序:启动下载软件。
课程设计--火灾报警系统
课程设计--火灾报警系统目录一、需求分析 (3)二、概要设计 (3)三、详细设计 (3)四、调试分析 (15)五、用户手册 (15)六、测试数据 (15)七、附录 (20)一、需求分析编写一个模拟火灾报警的系统,要求能够做到完成报警编号的录入,删除,修改,查询,删除功能,在某个地点按下报警,会显示出该地点的报警,并有报警声音。
程序执行的命令:1.进入系统的登录界面2.进入系统后的界面选择3.实现报警二、概要设计1.功能模块图:2.构程序中所使用的数据结构的介绍class GongNengJieMian extends Frame implements ActionListener { //实现登录的主界面}public class DBConnect { //数据源类}3.本程序模块结构class GongNengJieMian extends Frame implements ActionListener { //主界面程序模块}class tianjia extends Frame implements ActionListener{ //添加报警点的程序模块}class ShanChu extends Frame implements ActionListener{ //删除报警点的程序模块}class MoNi extends Frame implements ActionListener{ //模拟报警的程序模块}public class A extends JFrame{ //地图的现实的程序模块}各模块之间的调用关系如下:数据的更新模块报警模拟模块三.详细设计各功能模块的实现如下1.主函数public class Main{public static void main(String[] args) {new ZhuJieMian(); //调用主界面类}}2.主界面public class ZhuJieMian extends Frame implements ActionListener{private static final long serialVersionUID = 1L; //设置容器的大小Button b1,b2;Label l1;Box bo,bo1;Panel p,p1;ZhuJieMian(){super("主界面");b1=new Button("进入系统");b2=new Button("退出系统");l1=new Label("欢迎进入火灾报警模拟系统");p=new Panel();p1=new Panel();l1.setAlignment(Label.CENTER);l1.setFont(newFont("Serif",Font.PLAIN,40));l1.setForeground(Color.red);b1.setForeground(Color.red);b2.setForeground(Color.red);b1.setFont(newFont("Serif",Font.PLAIN,20));b2.setFont(newFont("Serif",Font.PLAIN,20));bo1=Box.createVerticalBox();bo1.add(Box.createVerticalStrut(50));bo1.add(l1);bo1.add(Box.createVerticalStrut(10));p1.add(bo1);bo=Box.createVerticalBox();bo.add(b1);bo.add(Box.createVerticalStrut(20));bo.add(b2);bo.add(Box.createVerticalStrut(50));p.add(bo);add(p1,BorderLayout.NORTH);add(p,BorderLayout.SOUTH);b1.addActionListener(this);b2.addActionListener(this);setBounds(0,0,600,400);setVisible(true);this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public void actionPerformed(ActionEvent e) {if(e.getSource()==b1)new GongNengJieMian();if(e.getSource()==b2)super.setVisible(false);}}3.功能界面class GongNengJieMian extends Frameimplements ActionListener{Button b1,b2,b3,b4;Box b;GongNengJieMian(){super("功能选择界面");b1=new Button(" 添加火灾报警点");b2=new Button(" 删除火灾报警点");b3=new Button(" 火灾报警模拟");b4=new Button(" 退出");b=Box.createVerticalBox();b.add(Box.createVerticalStrut(40));b.add(b1);b.add(Box.createVerticalStrut(40));b.add(b2);b.add(Box.createVerticalStrut(40));b.add(b3);b.add(Box.createVerticalStrut(40));b.add(b4);add(b);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);setLayout(new FlowLayout());setBounds(0,0,300,400);setVisible(true);validate();this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public void actionPerformed(ActionEvent e) {if(e.getSource()==b1)new tianjia();if(e.getSource()==b2)new ShanChu();if(e.getSource()==b3){new MoNi();}if(e.getSource()==b4)super.setVisible(false);}}4.删除界面class ShanChu extends Frame implements ActionListener{Box bo,bo1,bo2;Button b1,b2;JTextField t1;ShanChu(){super("删除火灾报警点");t1=new JTextField(15);b1=new Button("确定");b2=new Button("返回");bo1=Box.createVerticalBox();bo1.add(Box.createVerticalStrut(40));bo1.add(new Label("报警点编号"));bo1.add(Box.createVerticalStrut(40));bo1.add(b1);bo2=Box.createVerticalBox();bo2.add(Box.createVerticalStrut(40));bo2.add(t1);bo2.add(Box.createVerticalStrut(40));bo2.add(b2);bo=Box.createHorizontalBox();bo.add(bo1);bo.add(Box.createHorizontalStrut(20));bo.add(bo2);bo.add(Box.createHorizontalStrut(20));add(bo);setLayout(new FlowLayout());b1.addActionListener(this);b2.addActionListener(this);setBounds(0,0,350,200);setVisible(true);this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public void actionPerformed(ActionEvent e) {if(e.getSource()==b1){Connection con;Statement sql;if(t1.getText().equals("")){JOptionPane.showMessageDialog(this,"请输如要删除的报警点编号");t1.setText("");return;}try{Class.forName("sun.jdbc.odbc.JdbcOdbcDri ver");}catch(ClassNotFoundException e3){}try{con=DriverManager.getConnection("jdbc:od bc:fufangbiao","","");sql=con.createStatement();ResultSet rs=sql.executeQuery("select * from 报警点信息表where 报警点编号='"+t1.getText() +"'");if(!rs.next()){JOptionPane.showMessageDialog(this,"这个报警点不存在,请重新输入!!");t1.setText("");}else{sql.executeUpdate("delete from 报警点信息表where 报警点编号='"+t1.getText()+"'");JOptionPane.showMessageDialog(this,"删除成功!");t1.setText("");}}catch(Exception e1){JOptionPane.showMessageDialog(this,"");}}if(e.getSource()==b2){super.setVisible(false);}}}5.添加界面class tianjia extends Frame implements ActionListener{Box bo,bo1,bo2;Button b1,b2;JTextField t1,t2,t3,t4,t5,t6;tianjia(){super("添加火灾报警点");t1=new JTextField(15);t2=new JTextField(15);t3=new JTextField(15);t4=new JTextField(15);t5=new JTextField(15);t6=new JTextField(15);b1=new Button("确定");b2=new Button("返回");bo1=Box.createVerticalBox();bo1.add(Box.createVerticalStrut(40));bo1.add(new Label("报警点编号"));bo1.add(Box.createVerticalStrut(40));bo1.add(new Label("报警点名称"));bo1.add(Box.createVerticalStrut(40));bo1.add(new Label("报警点详细地址")); bo1.add(Box.createVerticalStrut(40));bo1.add(new Label("报警点隶属单位")); bo1.add(Box.createVerticalStrut(40));bo1.add(new Label("报警点X坐标")); bo1.add(Box.createVerticalStrut(40));bo1.add(new Label("报警点Y坐标")); bo1.add(Box.createVerticalStrut(40));bo1.add(b1);bo2=Box.createVerticalBox();bo2.add(Box.createVerticalStrut(40));bo2.add(t1);bo2.add(Box.createVerticalStrut(40));bo2.add(t2);bo2.add(Box.createVerticalStrut(40));bo2.add(t3);bo2.add(Box.createVerticalStrut(40));bo2.add(t4);bo2.add(Box.createVerticalStrut(40));bo2.add(t5);bo2.add(Box.createVerticalStrut(40));bo2.add(t6);bo2.add(Box.createVerticalStrut(40));bo2.add(b2);bo=Box.createHorizontalBox();bo.add(bo1);bo.add(Box.createHorizontalStrut(20)); bo.add(bo2);bo.add(Box.createHorizontalStrut(20)); add(bo);setLayout(new FlowLayout());b1.addActionListener(this);b2.addActionListener(this);setBounds(0,0,350,500);setVisible(true);this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public void actionPerformed(ActionEvent e) {if(e.getSource()==b1){Connection con;Statement sql;ResultSet rs;if(t1.getText().equals("")||t2.getText().equals( "")||t3.getText().equals("")||t4.getText().equals(" ")||t5.getText().equals("")||t6.getText().equals("" )){JOptionPane.showMessageDialog(this,"请输入完整的报警点信息");t1.setText("");t2.setText("");t3.setText("");t4.setText("");t5.setText("");t6.setText("");return;}try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e3){}try{con=DriverManager.getConnection("jdbc:od bc:fufangbiao","","");sql=con.createStatement();ResultSet rt=sql.executeQuery("select * from 报警点信息表where 报警点编号='"+t1.getText() +"'");if(rt.next()){JOptionPane.showMessageDialog(this,"有这个报警点编号,请重新输入!!");t1.setText("");t2.setText("");t3.setText("");t4.setText("");t5.setText("");t6.setText("");}else{sql.executeUpdate("insert into 报警点信息表values('"+t1.getText()+"','" + t2.getText()+"','" + t3.getText() +"','" + t4.getText()+"','" + t5.getText()+"','" + t6.getText()+"')");JOptionPane.showMessageDialog(this,"添加成功!");t1.setText("");t2.setText("");t3.setText("");t4.setText("");t5.setText("");t6.setText("");}}catch (Exception e3) {e3.printStackTrace();}}if(e.getSource()==b2){super.setVisible(false);}}}6.模拟界面class MoNi extends Frame implements ActionListener{Box bo,bo1,bo2;Button b1,b2;JTextField t1;File musicFile;URI uri;URL url;AudioClip clip;String []s={"1.au",};MoNi(){super("模拟火灾报警");t1=new JTextField(15);b1=new Button("确定");b2=new Button("返回");bo1=Box.createVerticalBox();bo1.add(Box.createVerticalStrut(40));bo1.add(new Label("报警点编号"));bo1.add(Box.createVerticalStrut(40));bo1.add(b1);bo2=Box.createVerticalBox();bo2.add(Box.createVerticalStrut(40));bo2.add(t1);bo2.add(Box.createVerticalStrut(40));bo2.add(b2);bo=Box.createHorizontalBox();bo.add(bo1);bo.add(Box.createHorizontalStrut(20));bo.add(bo2);bo.add(Box.createHorizontalStrut(20));add(bo);setLayout(new FlowLayout());b1.addActionListener(this);b2.addActionListener(this);setBounds(0,0,350,200);setVisible(true);this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public void actionPerformed(ActionEvent e) {if(e.getSource()==b1){Connection con;Statement sql;ResultSet rs;if(t1.getText().equals("")){JOptionPane.showMessageDialog(this,"请输入报警点编号");t1.setText("");return;}try{Class.forName("sun.jdbc.odbc.JdbcOdbcDri ver");}catch(ClassNotFoundException e3){}try{con=DriverManager.getConnection("jdbc:od bc:fufangbiao","","");sql=con.createStatement();ResultSet ra=sql.executeQuery("select * from 报警点信息表where 报警点编号='"+t1.getText() +"'");if(!ra.next()){JOptionPane.showMessageDialog(this,"这个报警点不存在,请重新输入::");t1.setText("");}else{intx1=Integer.parseInt(ra.getString(5).trim());intx2=Integer.parseInt(ra.getString(6).trim());A frame = new A(x1,x2);frame.setDefaultCloseOperation(JFrame.EXI T_ON_CLOSE);frame.setSize(600, 450);frame.setLocationRelativeTo( null );frame.setVisible(true);System.out.println("yes");musicFile=new File(s[0]);uri=musicFile.toURI();try{url=uri.toURL();}catch(Exception exp){}clip=Applet.newAudioClip(url);clip.play();}}catch(Exception e1){JOptionPane.showMessageDialog(this,"asd") ;}}if(e.getSource()==b2){super.setVisible(false);clip.stop();}}}四.调试分析1.开始不知道如何实现在地图上的动态显示报警图片,后来通过查资料知道了如下实现2.在运行时遇到了程序无法显示图片的情况,总是抛出异常。
C语言编程的智能火灾报警监测系统
智能火灾报警监测系统【摘要】本系统由检测装置烟雾传感器SS-168、光电传感器ST-178和温度传感器DS18B20,显示装置LCD和声光报警装置组成,并由单片机AT89S51来控制。
单片机巡回检测温度、红外辐射、烟雾并用LCD显示当前温度,当温度采集、红外检测、烟雾检测模块中任意两项检测到异常时系统发出声光报警,只到任意一项异常排除时系统才自动停止声光报警。
当检测模块出现故障时可使用手动控制模块,只需按下控制按键系统发出声光报警,直到按下复位按键,系统复位并停止报警。
该系统适用于居民住宅区、机房、办公室等小型防火单位。
【关键词】单片机,检测装置,声光报警,显示装置Intelligent Frie Alarm Detecting SystemAbstrsct:This system is controlled by SCM A T89S51 and comprised of display device LCD,sound and light alarm and detector,which include smoke sensor SS-168,photoelectric sensor ST-178,temperature sensor DS18B20. The SCM is for circuitously measuring temperature,infra-red radiation,smoke and display the temperature through LCD screen.The system will sent sound and light alarm when abnormalities occur during the detecting of temperature,sound and light and smoke.If any abnormality is eliminated,it will automatically stop sound and light alarm. The manual control module is a standby when the automatical system has breakdown. The system will sent sound and light alarm when pressing the controlling button.It will reset and stop the alarming when pressing the reset button. The system be appropriate for small fire prevention units,such as residential areas,machine rooms,offices.Key Words: SCM, detector,sound and light alarm, display device1、引言近年来随着人民生活水平的不断提高,家庭物质条件有了很大的改善,致使家庭用火用电增多,而由此引发的家庭火灾更是连续不断。
基于单片机的火灾智能报警控制系统的设计
基于单片机的火灾智能报警控制系统的设计火灾是一种极为危险的灾难,给人们的生命财产带来重大威胁。
火灾智能报警控制系统的设计显得尤为重要。
本文将介绍一种基于单片机的火灾智能报警控制系统的设计方案。
一、系统设计目标1、实时监测火灾情况,及时报警。
2、能够对火灾进行智能识别,减少误报。
3、具备远程监控和控制功能。
二、系统设计方案1、硬件部分(1)传感器模块系统采用红外传感器、温度传感器和烟雾传感器进行火灾监测。
红外传感器用于监测火焰的光线,温度传感器用于监测周围环境温度的变化,烟雾传感器用于监测空气中的烟雾浓度。
(2)控制模块系统采用单片机作为控制模块,通过单片机的IO口与各种传感器连接,实现对传感器数据的采集和处理。
(3)通信模块系统通过无线通信模块和远程监控终端进行通讯,实现远程监控和控制功能。
2、软件部分系统软件部分采用C语言编程,实现对传感器数据的采集、处理和报警控制。
采用智能算法对传感器数据进行分析,判断是否发生火灾,并进行相应的报警控制。
三、系统工作流程1、当传感器监测到火灾信号时,传感器向单片机发送火灾信号数据。
2、单片机接收到传感器数据后,通过自带的智能算法对数据进行分析,判断是否发生火灾。
3、若判断发生火灾,则系统立即通过通信模块将火灾报警信息发送给远程监控终端。
4、远程监控终端接收到火灾报警信息后,立即对火灾现场进行相应的控制操作,如打开喷水灭火装置、通知消防人员等。
四、系统特点1、实时性强:系统能够实时监测火灾信号,迅速做出响应。
2、智能识别:系统通过智能算法对火灾信号进行识别,以减少误报情况。
3、远程监控:系统具备远程监控和控制功能,能够实现对火灾现场的远程监控和控制。
4、稳定可靠:系统硬件部分采用工业级传感器和单片机,具备稳定可靠的性能。
五、系统应用前景基于单片机的火灾智能报警控制系统具有广阔的应用前景。
它可以应用于各类场所,如商场、学校、医院、办公楼等等。
通过对火灾信号的实时监测和智能识别,能够最大程度地保护人们的生命财产安全。
Arduino零基础C语言编程 ch5-5. 7 火焰报警器—火焰传感器
话一,个只小要小有的一报点警点器的,火说苗不2300,定ccmm就就:: 能能44..86触避VV发免火一焰场报不警必器要,的探意测外距发离生可,达何乐20而cm不。为别呢看?
• 预备实验
40cm: 3.9V
样例代码 7-1:
SOcm: 2.9V
void setup0{
60cm: 2.5V
Serial.begin(9600); // 9600 bps 70cm: 2V
void setup(){
蜂鸣器响 for(int x=0; x<180; x++){
pSeinrMialo.bdeeg(8in,(O96U0T0P)U; T//);设/用to/将n置sein波Vsai函n特l/=函/数率2蜂数0值为0鸣角0产+器9度(6生i引0n转声0t(脚sb化音ipn设为sV的a置弧l频*1度率00s0i)n);Val = (sin(x*(3.1412/180))); //
(3)noTone(pin) noTone(pin)函数,结束该指定引脚上产生的声音。
2020/3/13
Arduino零基础 C语言编程
4
} void loop(){ int val;
80cm: 1.5V 90cm: 1.2V 100cm: 1 V
val=analogRead(0); Serial.println(val ,DEC); delay(100); }
2020/3/13
值得注意的是,火焰传感器的工作温度为一25摄氏度 -85摄氏度,在使用过程中应注意火焰探头离火焰的 距离小能太近,以免造成损坏。
{ int sensorValue = analogRead(0);//火焰传感器连到模拟口,
基于单片机的火灾报警器源程序原理图
#include <AT89C51.h>#define unchar unsigned char#define uint unsigned intuchar Tem1,Tem2,Smok1,Smok2;uchar Tem=3.6,Smok=4.6; //设定温度烟雾报警阈值uchar a,a1,a2,b,b1,b2;void caiji_wenyan();void delay_10ms(uint i); //程序声明void panduan );void baojing();void main(){P10=0;P20=0;WR=1;RD=1;P0=0XFa;P23=1;P24=1;P25=1;P26=0; //初始化while(1) //主程序{caiji _wenyan (); //第一次采集温度烟雾信号Tem2=Tem1;Smok2=Smok1;delay_10ms(5); //延时50ms,让ADC0809准备好第二次数据转换caiji _wenyan(); //第二次采集温度烟雾信号panduan(); //将转换的数据与设定的报警阈值比较baojing(); //报警程序delay_10ms(1500); //系统隔15s对现场判断};}void caiji_wenyan(){P0=0XF8; //选通IN-0,转换温度信号WR=0;if(EOC=1) {RD=0;Tem1=P0}; //当ADC0809转换结束,AT89C51打开AD的三态门,AD输出数据else RD=1; //否则,AD继续转换delay_10ms(1);P0=0XF9; //选通IN-1,转换烟雾信号WR=0;if(EOC=1) {RD=0;Smok1=P0};else RD=1;}void delay_10ms(uint i) //10ms延时程序{while(i--){uchar i,j,k;for(i=5;i>0;i--)for(j=4;j>0;j--)for(k=248;k>0;k--);}}void panduan(){if(Tem1<Tem) a1=1; //当采集的温度高于阈值置1,否则,置0else a1=0;if(Tem2<Tem) a2=1;else a2=0;if(Smok1<Smok) b1=1; //当采集的烟雾浓度高于阈值置1,否则,置0 else b1=0;if(Smok2<Smok) b2=1;else b2=0;}baojing(){if(a1=a2&&b1=b2) //两次采集数据的标志位相同{a=a1;b=b1;if(a=1&&b=1) {P23=0;P10=1;P26=1}; //温度烟雾标志位都是1,发生火灾if(a=1&&b=0) {P24=0;P10=1;P26=1};if(a=0&&b=1) {P24=0;P10=1;P26=1}; //温度烟雾标志位只有一个1,异常if(a=0&&b=0) P26=0; //温度烟雾标志位都为0,正常 };else {P25=0;P10=1;P26=1}。
毕业设计-智能火灾报警监测系统的设计附源程序代码及外文献及译文
本科毕业设计附源程序代码及外文献及译文中文译文:ISP软件应用方法论文题目:智能火灾报警监测系统的设计学生姓名:专业年级:电子信息科学与技术指导教师:职称:2016年 5 月 28 日目录摘要 (I)1 前言 (2)1.1 系统开发的目的 (2)1.2 系统开发的意义 (2)2系统方案及功能概述 (2)2.1方案论证 (2)2.2系统功能概述 (3)3.2系统各模块的设计 (4)3.2.1 AT89S52单片机的简介 (4)3.2.1.1 AT89S52介绍 (4)3.2.1.2主要性能 (4)3.2.1.3芯片引脚图及引脚功能说明 (4)3.2.1.4 中断及定时介绍 (5)3.2.2温度采集模块 (7)3.2.2.1 温度传感器DS18B20介绍 (7)3.2.2.2 主要特点 (7)3.2.2.3单线技术 (8)3.2.2.4芯片引脚图及引脚功能说明 (8)3.2.2.5 DS18B20内部结构 (8)3.2.2.6 DS18B20供电方式 (10)3.2.3烟雾传感器MQ-2的介绍 (11)3.2.4步进电机模块 (12)3.2.4.1步进电机介绍 (12)3.2.4.2步进电机的主要特性 (13)3.2.4.3 本次设计所用电机 (13)3.2.5电源系统设计 (15)3.2.5.1 LM2576T-5.0介绍 (15)3.2.5.2 LM2576T-5.0的引脚功能 (16)3.2.6数码管显示 (16)3.2.6.1静态显示介绍 (17)3.2.6.2芯片74LS64的介绍 (17)3.2.7时钟模块 (19)3.2.7.1 时钟芯片DS1302的简介 (19)3.2.7.2 性能指标 (19)3.2.7.3 管脚排列及功能 (19)3.2.7.4 DS1302数据操作原理 (20)3.2.7.5 DS1302控制字节 (20)3.2.7.6. 数据输入输出(I/O) (20)3.2.7.7. DS1302的寄存器 (21)3.2.8 报警模块 (21)4系统软件设计 (22)4.1主程序 (22)4.2温度传感器DS18b20 (22)4.3时钟芯片DS1302 (24)4.4步进电机 (26)5总结 (27)5.1火灾报警监控系统展望 (27)5.2设计火灾自动报警系统的新思路 (28)5.3结束语 (28)参考文献 (28)致谢 (29)附录一系统各个模块硬件原理图 (30)附录二程序清单 (30)附录三外文科技文献阅读 (40)智能火灾报警系统的设计摘要:随着科学技术的进步,火灾报警系统逐步向智能化发展。
火灾自动报警系统控制程序模版
火灾自动报警系统控制程序模版1. 系统概述火灾自动报警系统是一种用于检测和报警火灾的安全保护系统。
该系统通过感应器、控制器和报警器等硬件设备的组合,以及相应的控制程序,能够实时检测火灾相关的信号,并在火灾发生时迅速触发报警装置,提醒人们及时采取逃生措施。
2. 控制程序模版以下是一个简化的火灾自动报警系统控制程序的模版,供参考:2.1 初始化程序- 初始化系统参数,如传感器感应灵敏度、报警装置的声音和灯光等;- 检测硬件设备是否正常工作,并进行相应的故障处理,如报警装置无法发出声音时进行声音测试;- 初始化火灾检测数据采集模块,确保能够准确获取火灾相关的信息。
2.2 数据采集程序- 定时采集传感器所对应的环境变量,如温度、烟雾浓度、气体浓度等;- 将采集到的数据进行处理,如去噪、滤波等,得到可用的火灾相关信号。
2.3 火灾检测程序- 根据采集到的数据计算火灾指标,如温度上升速度、烟雾密度等;- 判断当前是否存在火灾,可以根据预定的阈值进行火灾判定,如当温度上升速度超过某一临界值或烟雾密度超过某一预设值时,判定为火灾。
2.4 报警处理程序- 当火灾检测程序判定为火灾时,触发报警装置发出警报声音和闪烁灯光;- 同时,系统应该向相关人员发送火灾报警信息,可以通过短信、电话、邮件等方式通知;- 将火灾相关数据保存在日志文件中,以便事后分析火灾原因和采取相应措施;- 触发其他应急措施,如关闭电源、开启灭火装置等。
2.5 即使火灾处理程序- 当火势得到有效控制后,触发解除报警装置的警报,停止警报声音和闪烁灯光;- 向相关人员发送火灾处理完成的通知。
2.6 异常处理程序- 监测系统运行状态,如检测火灾检测采集模块是否正常工作;- 如果发现异常情况,应及时报警并采取措施进行处理。
3. 代码实现以上是一个简化的火灾自动报警系统控制程序模版,具体的实现可以根据具体的硬件设备和需求进行定制。
可以使用各种编程语言进行开发,如C++、Python等,并配合相应的硬件驱动程序进行集成。
智能火灾报警系统仿真源程序资料
智能火灾报警系统仿真源程序#include <reg52.h>#include eepom52.h#define uchar unsigned char#define uint unsigned int#include <intrins.h>//数码管段选定义0 1 2 3 4 5 6 7 8 9 uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};//断码//数码管位选定义uchar code smg_we[]={0x7f,0xbf,0xdf,0xef};//uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7};uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};uchar smg_i = 3; //显示数码管的个位数sbit SCL=P3^4; //SCL定义为P1口的第3位脚,连接ADC0832SCL脚//DO定义为P1口的第4 位脚,连接ADC0832DO脚sbit DO=P3^3;脚ADC0832CS位脚,连接4口的第P1定义为sbit CS=P3^2; //CS口的定义//18b20 IO= P3^5; sbit dqsbit beep = P3^6; //蜂鸣器IO口定义uint temperature,s_temp ; //温度的变量uchar dengji,s_dengji; //烟物等级uchar shoudong; //手动报警键uint huoyan;bit flag_300ms ;uchar key_can;//按键值的变量uchar menu_1; //菜单设计的变量bit flag_lj_en; //按键连加使能//按键连3次连加后使能加的数就越大了bit flag_lj_3_en;uchar key_time,flag_value; //用做连加的中间变量bit key_500ms ;uchar flag_clock;uchar zd_break_en,zd_break_value; //自动退出设置界面uchar a_a;/***********************1ms延时函数*****************************/void delay_1ms(uint q){uint i,j;for(i=0;i<q;i++)for(j=0;j<120;j++);}/***********************小延时函数*****************************/void delay_uint(uint q){while(q..);}******************/ eepom中/******************把数据保存到单片机内部void write_eepom(){SectorErase(0x2000);byte_write(0x2000, s_temp);byte_write(0x2001, s_dengji);byte_write(0x2060, a_a);}*****************/ /******************eepom中读出来把数据从单片机内部void read_eepom(){= byte_read(0x2000); s_temps_dengji = byte_read(0x2001);= byte_read(0x2060); a_a}*****************/ /**************初始化开机自检eepomvoid init_eepom(){先读read_eepom(); //EEPOMif(a_a != 1) 新的单片机初始单片机内问//{s_temp = 50;s_dengji = 5;a_a = 1;write_eepom();}}/***********************18b20初始化函数*****************************/ void init_18b20(){bit q;dq = 1; //把总线拿高delay_uint(1); //15usdq = 0; //给复位脉冲//750usdelay_uint(80);dq = 1; 等待//把总线拿高delay_uint(10); //110usq = dq; 读取//18b20初始化信号delay_uint(20); //200usdq = 1; 释放总线把总线拿高//}***************/ 写/*************18b20内的数据void write_18b20(uchar dat) {uchar i;for(i=0;i<8;i++){ 写数据是低位开始//dq = 0; // 把总线拿低写时间隙开始总线写数据了18b20向dq = dat & 0x01; //delay_uint(5); // 60usdq = 1; //释放总线dat >>= 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;}***************/ 读出来的是小数读取温度的值/*************uint read_temp(){uint value;在读取温度的时候如果中断的太频繁了,就应该把中uchar low;//断给关了,否则会影响到18b20的时序init_18b20(); //初始化18b20ROM位64跳过// write_18b20(0xcc);write_18b20(0x44); //启动一次温度转换命令delay_uint(50);//500usinit_18b20(); //初始化18b20write_18b20(0xcc); // 跳过64位ROMwrite_18b20(0xbe); //发出读取暂存器命令EA = 0;low = read_18b20();//读温度低字节value = read_18b20(); //读温度高字节EA = 1;value <<= 8; //把温度的高位左移8 位//把读出的温度低位放到value |= low; value 的低八位中value *= 0.0625; //转换到温度值return value; //返回读出的温度}/***********读数模转换数据********************************************************///请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的// 1 0 0 通道// 1 1 1 通道unsigned char ad0832read(bit SGL,bit ODD){unsigned char i=0,value=0,value1=0;SCL=0;DO=1;CS=0; //开始//第一个上升沿SCL=1;SCL=0;DO=SGL;SCL=1; //第二个上升沿SCL=0;DO=ODD;SCL=1; //第三个上升沿SCL=0; //第三个下降沿DO=1;for(i=0;i<8;i++){SCL=1;SCL=0; //开始从第四个下降沿接收数据value<<=1;if(DO)value++;}for(i=0;i<8;i++){ 接收校验数据//value1>>=1;if(DO)value1+=0x80;SCL=1;SCL=0;}CS=1;SCL=1;与校验数据比较,正确就返回数据,否则返// if(value==value1)回return value;return 0;}/***********************数码显示函数*****************************/ void display(){uchar i;for(i=0;i<smg_i;i++){// 位选P2 = smg_we[i];P1 = dis_smg[i]; //段选delay_1ms(1);P1 = 0xff; //消隐P2 = 0xff; //位选}}***************/ 0定时器初始化程序/************* void time_init(){// EA = 1;开总中断TMOD = 0X01; 1、定时器定时器// 0工作方式1ET0 = 1; 中断0开定时器//= 1;TR0 定时0允许定时器//}***************/按键处理数码管显示函数/****************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){取温度的个位数显示// dis_smg[0] = smg_du[temperature % 10];dis_smg[1] = smg_du[temperature / 10 % 10]; //取温度的十位显示smg_i = 3;}if(menu_1 == 1){dis_smg[0] = smg_du[s_temp % 10]; // 取个位显示取十位显示dis_smg[1] = smg_du[s_temp / 10 % 10] ; //dis_smg[2] = 0xbf ;Adis_smg[3] = smg_du[10]; 显示//smg_i = 4;}if(menu_1 == 2){dis_smg[0] = smg_du[s_dengji % 10]; //取个位显示dis_smg[1] = 0xbf ;dis_smg[2] = 0xbf ;dis_smg[3] = smg_du[11]; // 显示Bsmg_i = 4;}}if(menu_1 == 0){if((key_can == 2) || (key_can == 3))shoudong = 0; //取消手动报警}//设置高温报警if(menu_1 == 1){if(key_can == 2){if(flag_lj_3_en == 0)按键按下未松开自动加三次s_temp ++ ; //elses_temp += 10; //按键按下未松开自动加三次之后每次自动加10 if(s_temp > 99)s_temp = 99;dis_smg[0] = smg_du[s_temp % 10]; //取个位显示dis_smg[1] = smg_du[s_temp / 10 % 10]; //取十位显示dis_smg[2] = 0xbf ;A显示//dis_smg[3] = smg_du[10];}if(key_can == 3){if(flag_lj_3_en == 0)按键按下未松开自动加三次// s_temp .. ;elses_temp .= 10; // 按键按下未松开自动减三次之后每次自动减10if(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] = 0xbf;A//显示dis_smg[3] = smg_du[10];}}//设置低温报警if(menu_1 == 2){if(key_can == 2){if(flag_lj_3_en == 0)s_dengji ++ ;elses_dengji ++ ;if(s_dengji >= 9)s_dengji = 9;取个位显示// dis_smg[0] = smg_du[s_dengji % 10];dis_smg[1] = 0xbf ;dis_smg[2] = 0xbf ;dis_smg[3] = smg_du[11];//B显示}if(key_can == 3){if(flag_lj_3_en == 0)s_dengji .. ;elses_dengji ..;if(s_dengji <= 1)s_dengji = 1;dis_smg[0] = smg_du[s_dengji % 10]; // 取个位显示dis_smg[1] = 0xbf ;dis_smg[2] = 0xbf;dis_smg[3] = smg_du[11];//显示B}}}/****************独立按键处理函数************************/ void key(){static uchar key_new = 0,key_old = 0,key_value = 0;if(key_new == 0)//按键松开的时候做松手检测{if((P2 & 0x0f) == 0x0f)key_value ++;elsekey_value = 0;if(key_value >= 5){write_eepom();key_value = 0;key_time = 0;key_new = 1;flag_lj_en = 0; // 关闭连加使能flag_lj_3_en = 0; // 关闭3秒后使能flag_value = 0; // 清零}}else{if((P2 & 0x0f) != 0x0f)key_value ++; 按键按下的时候//elsekey_value = 0;if(key_value >= 5){key_value = 0;key_new = 0;flag_lj_en = 1; //连加使能zd_break_en = 1; //自动退出设置界使能zd_break_value = 0; //自动退出设置界变量清零}}key_can = 20;if(key_500ms == 1){key_500ms = 0;zd_break_en = 1; //自动退出设置界使能zd_break_value = 0; //自动退出设置界变量清零key_new = 0;key_old = 1;}if((key_new == 0) && (key_old == 1)){switch(P2 & 0x0f){case 0x0e: key_can = 4; break; //得到k1键值case 0x0d: key_can = 3; break; //得到k2键值case 0x0b: key_can = 2; break; //得到k3键值case 0x07: key_can = 1; break;//得到k4键值}}key_old = key_new;}/****************报警函数***************/void clock_h_l(){static uchar value;报警//if((dengji >= s_dengji) || (temperature >= s_temp) || (shoudong == 1)) {value ++;if(value >= 3){value = 10;beep = ~beep; // 蜂鸣器报警}}else{if((dengji < s_dengji) && (temperature < (s_temp . 1)) && (shoudong == 0)) //取消报警{value = 0;beep = 1;}}}void main(){static uchar value;读取温度值temperature = read_temp(); // 数据读init_eepom(); //eepom// 初始化定时器time_init();delay_1ms(650);while(1){key();//独立按键程序if(key_can < 10){按键按下要执行的程序// key_with();}temperature = read_temp(); //读取温度值if(flag_300ms == 1){flag_300ms = 0;clock_h_l();dengji = ad0832read(1,0);dengji = dengji * 10 / 250;huoyan = ad0832read(1,1);huoyan = 10 . huoyan * 10 / 250;if(menu_1 == 0){if(temperature >= 99)temperature = 99;if(value > 20)value = 0;if(huoyan < 2){smg_i = 4;显示烟物报警等级// dis_smg[3]=smg_du[dengji];// . dis_smg[2]= 0xbf;dis_smg[1]=smg_du[temperature/10_x0010_]; //十位dis_smg[0]=smg_du[temperature_x0010_]; //个位ADC0832为8位ADC,数值为0~255,我们将其分开放入l_tmpdate数组中显示}else{shoudong = 1;smg_i = 4;dis_smg[3]=0x89; //H;//H; dis_smg[2]=0x89;//H; dis_smg[1]=0x89;//H;dis_smg[0]=0x89;}}if(zd_break_en == 1) 自动退出设置界面程序//{加一次300ms每// zd_break_value ++;if(zd_break_value > 100) //30秒后自动退出设置界面{menu_1 = 0; //smg_i = 3;zd_break_en = 0;zd_break_value = 0;}}}display(); //数码管显示函数}}/*************定时器0中断服务程序***************/ void time0_int() interrupt 1{static uchar value;TH0 = 0x3c;TL0 = 0xb0; // 50msvalue ++;if(value % 6 == 0){flag_300ms = 1; //300msvalue = 0;}按下按键使能if(flag_lj_en == 1) //{key_time ++;if(key_time >= 10) //500ms{key_time = 0;key_500ms = 1; //500msflag_value ++;if(flag_value > 3){flag_value = 10;flag_lj_3_en = 1; //3次后1.5 秒连加大些}}}}。
毕业设计5:基于MicroPython的智能火灾报警器系统的设计与实现
毕业设计5:基于MicroPython的智能⽕灾报警器系统的设计与实现随着现代家庭⽤⽕、⽤电量的增加,家庭⽕灾发⽣的频率越来越⾼。
家⾥⼀旦发⽣⽕灾,如果出现扑救不及时、灭⽕器材缺乏、以及在场⼈惊慌失措、逃⽣迟缓等不利情况下,最终就会导致产⽣重⼤的⽣命财产的损失。
消防部门的统计显⽰,在所有的⽕灾⽐例中,家庭⽕灾已经占到了全国⽕灾的30%左右。
家庭起⽕的原因林林种种,可能在我们注意得到的地⽅,也可能就隐藏在我们根本就注意不到的地⽅。
所以为了保护家庭⼈⾝财产的安全,为了悲剧不再上演,研究家庭⽕灾的特点及防⽕对策,对于预防家庭⽕灾,减少⽕灾损失具有很重要的现实意义。
本次我们使⽤TPYBoard v102结合烟雾检测模块(MQ-2)、温度传感器、LCD5110液晶显⽰屏以及蜂鸣器模块等,模拟实现智能⽕灾报警器。
系统主要的技术特点:检测系统:1)采⽤烟雾检测模块(MQ-2),实时检测当前环境中的烟雾浓度值。
2)采⽤温度传感器(DS18B20),实时检测当前环境中的温度值。
显⽰系统:采⽤LCD5110液晶显⽰屏,将温度数据和烟雾报警状态实时显⽰,⽅便⼈员第⼀时间获取到数据。
主控系统:采⽤TPYBoard v102开发板为主控系统,将温度数据和烟雾浓度数据进⾏实时的采集与判断。
当烟雾浓度和温度达到阈值时,启动蜂鸣器报警,告知⼈员发现⽕情,请快速处理。
所需器件实物图:(部分主要器件)程序设计(1)初始化模块后,循环不断启动超声波进⾏障碍物检测;(2)获取到超声波数据后,判断是否⼩于安全距离值;(3)⼩于安全距离值后,启动蜂鸣器模块进⾏报警提⽰,反之关闭;实物连接先连接电源部分。
电源部分主要涉及到降压模块和按键开关。
先⽤万⽤表,找出按键开关中哪两个引脚是按下导通,弹起不导通的。
这⾥,我们假设为引脚A和引脚B。
接下来,我们做开发板与MQ-2模块、温度传感器、LCD5110显⽰屏、蜂鸣器等期间之间的连线。
ds18b20器件引脚图:程序调试接线完毕后,就要将最重要的程序放到开发板上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能火灾报警监测系统【摘要】本系统由检测装置烟雾传感器SS-168、光电传感器ST-178和温度传感器DS18B20,显示装置LCD和声光报警装置组成,并由单片机AT89S51来控制。
单片机巡回检测温度、红外辐射、烟雾并用LCD显示当前温度,当温度采集、红外检测、烟雾检测模块中任意两项检测到异常时系统发出声光报警,只到任意一项异常排除时系统才自动停止声光报警。
当检测模块出现故障时可使用手动控制模块,只需按下控制按键系统发出声光报警,直到按下复位按键,系统复位并停止报警。
该系统适用于居民住宅区、机房、办公室等小型防火单位。
【关键词】单片机,检测装置,声光报警,显示装置Intelligent Frie Alarm Detecting SystemAbstrsct:This system is controlled by SCM A T89S51 and comprised of display device LCD,sound and light alarm and detector,which include smoke sensor SS-168,photoelectric sensor ST-178,temperature sensor DS18B20. The SCM is for circuitously measuring temperature,infra-red radiation,smoke and display the temperature through LCD screen.The system will sent sound and light alarm when abnormalities occur during the detecting of temperature,sound and light and smoke.If any abnormality is eliminated,it will automatically stop sound and light alarm. The manual control module is a standby when the automatical system has breakdown. The system will sent sound and light alarm when pressing the controlling button.It will reset and stop the alarming when pressing the reset button. The system be appropriate for small fire prevention units,such as residential areas,machine rooms,offices.Key Words: SCM, detector,sound and light alarm, display device1、引言近年来随着人民生活水平的不断提高,家庭物质条件有了很大的改善,致使家庭用火用电增多,而由此引发的家庭火灾更是连续不断。
据近几年的火灾统计,城镇居民家庭火灾占有相当的比例,人员伤亡和经济损失都不容忽视。
现代家庭陈设、装修日趋增多,用电、用火、用气不断改善,发生火灾机率相应地增大。
居民家庭起火,往往具有燃烧猛烈、火势蔓延迅速、烟雾弥漫、易造成人员伤亡等火灾特点。
一些城乡结合部居民住在平房里,其房顶有些是用可燃材料建造的,起火后,火势极易烧到顶棚,沿屋顶可燃物迅速蔓延,造成火灾扩大蔓延,导致建筑倒塌破坏。
居民家庭中,发生火灾后往往因为缺少自救能力而造成人员伤亡和严重的经济损失。
家庭起火后如果得不到及时控制,还会殃及四分邻,使整幢居民楼或整个村庄遭受到火灾危害。
因而我们除了要增强对火灾的自防自救能力和消防法制观念外,还需在房间合适位置装火灾报警系统,以便尽早检测到火灾并给予及时控制于减少人员伤亡和经济损失。
目前国内厂家多偏重用于大型仓库、商场、高级写字楼、宾馆等场所大型火灾报警系统的研发,他们采用集中区域报警控制方式,其系统复杂、成本较高。
而在居民住宅区、机房、办公室等小型防火单位,需要设置一种单一或区域联网、廉价实用的火灾自动探测报警装置,因此,研制一种结构简单、价格低廉的语音数字联网火灾报警器是非常必要的。
2、系统硬件设计2.1硬件组成单片机巡回检测温度、红外辐射、烟雾并用LCD显示当前温度,当温度采集、红外检测、烟雾检测模块中任意两项检测到异常时系统发出声光报警,只到任意一项异常排除时系统才自动停止声光报警。
当报警系统出现故障时可使用手动控制模块,只需按下控制按键系统发出声光报警,直到按下复位按键,系统复位并停止报警[4]。
图2-1如图2-1所示本系统主要由单片机控制模块、烟雾检测模块、温度采集模块、红外检测模块、LCD显示模块、声光报警模块、手动控制模块组成。
2.2:单片机控制模块因本系统要求实时显示环境温度,同时考虑到功耗等问题,通过与89C51 程序存储器写入方式、电源范围、工作频率、市场价格、兼容型、加密功能、抗干扰性、烧写寿命更长综合考虑后选择AT89S51作为本系统的中央控制器[10]。
采用Atmel公司的AT89S51单片机作为主控制器,AT89S51是一个低功耗,高性能的51内核的CMOS 8位单片机,片内含8K空间的可反复擦些1000次的Flash只读存储器,具有256bytes的随机存取数据(RAM),32个IO口,2个16位可编程定时计数器。
且该系统的51单片机可以不用烧写器而直接用串口或并口就可以向单片机中下载程序。
2.2.1系统各模块控制端口说明图2-2单片机控制、手动控制模块接线图如图2-2所示P1.1用于控制发光二极管,P0口接LCD显示数据口,P0口上拉电阻为1K,P2.1、P2.2、P2.3分别接LCD使信号端(E),读写选择端(R/W),数据命令选择端(RS)。
P1.2 接温度传感器DS18B20的数据脚,用于读入温度。
P1.3接红外辐射的检测口。
P1.4接烟雾传感器的检测口。
P1.5作为蜂鸣器的控制口。
P2.0接控制开关按钮,当系统检测出现故障时按下控制按键即发出声光报警。
20脚接地,40脚接电源,18、19接12MHZ晶振输入端,31脚接电源端。
2.3:温度采集模块图2-3温度采集模块2.3.1:DS18B20设计要求这里用到温度芯片DS18B20。
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式。
测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出。
其工作电源既可在远端引入,也可采用寄生电源方式产生。
CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路[1]。
DS18B20支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
对硬件结构简单的单线数字温度传感器DS18B20 进行操作,需要用较为复杂的程序完成。
编制程序时必须严格按芯片数据手册提供的有关操作顺序进行,读、写时间片程序要严格按要求编写[3]。
尤其在使用DS18B20 的高测温分辨力时,对时序及电气特性参数要求更高,根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉640微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功[2]。
本系统用于居民住宅区、机房、办公室等小型防火单位,然而室内温度一般不会超过40℃,只有发生特殊情况才会达到40℃以上。
因而本系统设置在温度大于或等于40℃时为异常(单片机P1.2口检到异常),接线如图2-3可知。
2.3.2: DS18B20的内部结构DS18B20内部结构图DS18B20有4个主要的数据部件:① 64位激光ROM。
64位激光ROM从高位到低位依次为8位CRC、48位序列号和8位家族代码(28H)组成。
②温度灵敏元件。
③非易失性温度报警触发器TH和TL。
可通过软件写入用户报警上下限值。
④配置寄存器。
配置寄存器为高速暂存存储器中的第五个字节。
DS18B20在0工作时按此寄存器中的分辨率将温度转换成相应精度的数值,其各位定义如图所示。
TM R1 R0 1 1 1 1 1 MSB DS18B20配置寄存器结构图LSB其中,TM:测试模式标志位,出厂时被写入0,不能改变;R0、R1:温度计分辨率设置位,其对应四种分辨率如下表所列,出厂时R0、R1置为缺省值:R0=1,R1=1(即12位分辨率),用户可根据需要改写配置寄存器以获得合适的分辨率。
配置寄存器与分辨率关系表:R0 R1 温度计分辨率/bit 最大转换时间/us0 0 9 93.750 1 10 187.51 0 11 3751 1 12 750(2)高速暂存存储器高速暂存存储器由9个字节组成,其分配如下图所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如图所示。
对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。
LSB DS18B20 存储器映像图MSB温度值格式图DS18B20 温度数据表:典型对应的温度值表:DS18B20最大的特点是单总线数据传输方式,DS18B20的数据I/O均由同一条线来完成。
2.4:烟雾,红外检测模块图2-4烟雾,红外检测模块接线图如图2-4所示,当没有检测到火光时,光电传感器1脚(检测口)电压约为0.5V;当光电传感器检测到火光时,1脚(检测口)电压约为4.2V。
烟雾传感器没有检测到烟雾时,YW脚(检测口)电压约为0.2V,当检测到烟雾时,YW脚(检测口)电压约为3V。
烟雾传感器供电电压为9V,因此烟雾检测模块要单独供电。
而系统其它模块的供电电压为5V,因此要把烟雾传感器的电源负极与系统的地相连接。
才能达到设计目的。