红外防盗报警系统毕业论文正文

红外防盗报警系统毕业论文

1 引言

随着社会的不断进步和科学技术、经济的不断发展随着社会的发展,科学技术的进步和安全防范意识的增强,,对私有财产的保护意识在不断的增强,因而对防盗措施提出了新的要求。本设计就是为了满足现代住宅防盗的需要而设计的家庭式电子防盗系统。就目前市面上装备主要有压力触发式防盗报警器、开关电子防盗报警器和压力遮光触发式防盗报警器等各种报警器,但这几种比较常见的报警器都存在一些缺点。而本设计中所使用的红外线是不可见光,有很强的隐蔽性和保密性,本设计它集红外报警、温湿度测量显示、实时时钟为一体,简单实用,抗干扰能力强、灵敏度高、安全可靠,具有较高的应用价值。

1.1 设计任务与要求

红外报警监控系统由红外热释电传感器、温湿度传感器、DS1302时钟电路、EEPROM存储电路、液晶屏和键盘组成。其主要功能有:

(1)红外热释电传感器获取人体入侵信息,当监控功能打开并且有人入侵时,驱动蜂鸣器报警,LED报警灯亮。

(2)报警时间自动存储至EEPROM存储器,当按查询按钮时显示上次报警时间。

(3)不间断测量当前温度和湿度数据,并在液晶屏上实时显示。

(4)具备不间断时钟电路,当前时间在液晶屏显示。时钟电路具有后备电池,系统掉电后始终依然运行,再次上电显示当前时间,无须重新调时。

(5)四键键盘可以调校时钟初始值,具体方法是连续按设置键直至“年”、“月”、“日”、“时”、“分”、“秒”相应的位置闪烁,再通过Up键和Down 键调整数值,调整完毕继续按设置键进入正常状态。

(6)可以通过设置键打开或关闭监控报警功能。

(7)可以查询上次报警时间,再次按查询键退出查询状态。

2、基础知识介绍

2.1、热释电效应原理

热释电传感器是一种将热量变化转换为电量变化的能量转换器件。因红外线具有很强的热效应,当交互变化的红外线照射到晶体表面时,晶体温度迅速变化,这时会发生电荷的变化,从而形成一个明显的外电场,这种现象称为热释电效应。热释电红外传感器内部的热释电晶体的极化,随着温度的变化而变化。当恒定的红外辐射照射在探测器探头上时,热释电晶体温度不变,晶体对外呈电中性,探测器没有电信号输出,因而恒定的红外辐射不能被检测到。另外热释电晶体输出的是电信号,不能直接使用,需要用电阻将其转换为电压形式,该电阻阻抗高达104M欧,故引入N 沟道结型场效应管接成共漏形式来完成阻抗变换。热释电红外线元件是一种典型的热量传感器,常用红外光发射能量作为整个防盗报警装置中检测入侵者及其活动的手段。

2.2、被动式热释电传感器防盗报警工作原理

热释电人体红外线传感器是上世纪80年代末期出现的一种新型传感器件,现在电子防盗报警设备研制中已得到广泛的应用。通常我们采用的热释电传感器防盗报警电路,是利用该电路检测到有人进入防范区时通过能量变化导致产生电信号,最终电声报警。其工作原理如下:一般人体体温是37℃,所以会发出波长10um左右的红外线,被动式红外传感器探头就是靠探测人体发射的10um 左右的红外线进行工作的。人体发射的10um 左右的红外线通过菲涅耳滤光片增强后聚集到红外感应源上,红外感应源通常采用热释电元件,这种元件接收到人体红外辐射温度发生变化时就会失去电荷平衡,向外释放电荷,经后续电路检测处理后就能产生报警信号了。

在红外探头中有两个关键性的器件,一个是热释电红外传感器,它能将波长为8~ 12um 之间的红外信号的变化转变为电信号,并对自然界中的可见光信号具有抑制作用,因此在红外探测器的有效警戒区内,当无人体移动时,热释电红外感应器感应到的只是背景温度,没有信号变化,所以不能产生电信号,也不会报警;当人体进人警戒区,通过菲涅耳透镜,热释电红外感应器感应到的是人体温度与背景温度的差异信号,此时产生电信号,从而报警。另外一个器件就是菲涅耳透镜,它具有聚焦--即将热释电的红外信号反射在红外传感器上的作用,还能将警戒区内分为若干个明区和暗区,使进入警戒区的移动物体能以温度变化的形式在热释电红外传感器上产生变化热释红外信号,这样热释电红外传感器产生变化的电信号,后续电路经检测处理后产生报警信号。

2.3、被动式红外报警器组成结构

被动式红外报警器主要由菲涅耳光学系统、热释电红外传感器、信号滤波和放大电路、信号处理和报警电路等几部分组成( 如图2-1 所示) 。

热释电红外传感器菲涅耳透镜物体

放大滤波

电路

电压比较器驱动电路报警器

基准电压

图2-1 被动式红外报警器组成框图

菲涅尔透镜一般采用聚乙烯塑料片制成,颜色为乳白色或黑色,呈半透明状,但对波长为10Lm左右的红外线来说却是透明的。菲涅耳透镜的焦点一般为5 厘米左右,除有聚焦作用还可形成可见区和盲区,实际应用时一般把菲涅耳透镜固定在传感器正前方1~ 5 厘米的地方。当物体射出的红外线通过菲涅耳透镜后,传到热释电红外探测器,这时热释电红外探测器将输出脉冲信号,脉冲信号经放大和滤波后,由电压比较器将其与基准值进行比较,当输出信号达到一定值时,报警电路发出警报。

被动式热释电红外探头的优点是本身不发生各种类型的辐射,器件的功耗

小、隐蔽性好、价格低。缺点是具有容易受各种热源、光源及射频辐射的干扰;被动红外穿透力差,人体的红外辐射容易被遮挡,不易被探头接收;当环境温度和人体温度接近时,探测和灵敏度下降,有时还会短时失灵。

目前市场上经常采用P288型热释电红外传感器作为敏感元件,能以非接触方式检测出人体辐射出的红外能量,并将其转化为电信号输出。该传感器外接12V电源,内部装有菲涅耳透镜,检测区域为球形,有效警戒距离为12~ 15m,方向角为85度。当红外警戒区内无移动物体时,传感器无输出信号,报警电路不工作;当有人闯入警戒区时,只要人体移动,其辐射出的红外线便会被热释电红外传感器所接收,并输出微弱的电信号。该信号经运算放大器A1和A2放大后,会输出一个较强的电信号。再输送给由A3 和A4 组成的双限电压比较器。

2.4、DYP-ME003人体感应传感器

图2所示电路比较繁琐,调试难度也较大。目前市场上有集成红外人体感应传感器,将热释电传感器、菲涅耳透镜和调理电路集成在一个模块上,可以实现5伏电压供电,性能稳定,使用方便。DYP-ME003人体感应传感器就是这样一款基于红外线技术的自动控制产品,灵敏度高,可靠性强,超低电压工作模式,广泛应用于各类自动感应电器设备,尤其是干电池供电的自动控制产品中。其功能特点:

●全自动感应:人进入其感应范围则输出高电平,人离开感应范围则自动

延时关闭高电平,输出低电平。

●光敏控制(可选择,出厂时未设):可设置光敏控制,白天或光线强时

不感应。

●温度补偿(可选择,出厂时未设):在夏天当环境温度升高至30~32℃,

探测距离稍变短,温度补偿可作一定的性能补偿。

●两种触发方式:a.不可重复触发方式:即感应输出高电平后,延时时间段

一结束,输出将自动从高电平变为低电平;b.可重复触发方式:即感应

输出高电平后,在延时时间段内,如果有人体在其感应范围活动,其输

出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应

模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)。

●具有感应封锁时间(默认设置:2.5S封锁时间):感应模块在每一次感应输

出后(高电平变成低电平),可以紧跟着设置一个封锁时间段,在此时间段内感应器不接受任何感应信号。

●工作电压范围宽:默认工作电压DC4.5V-20V。

●微功耗:静态电流<50微安,特别适合干电池供电的自动控制产品。

●输出高电平信号:可方便与各类电路实现对接。

DYP-ME003人体感应传感器的感应范围如图2-2所示:

图2-2 DYP-ME003人体感应传感器的感应范围

DYP-ME003人体感应传感器的电气参数如表1所示:

表2-1 DYP-ME003人体感应传感器的电气参数

电气参数DYP-ME003人体感应模块

工作电压范围DC 4.5-20V

静态电流<50uA

电平输出高3.3 V /低0V

触发方式L不可重复触发/H重复触发

延时时间5-200S(可调)可制作范围零点几秒-几十分钟封锁时间 2.5S(默认)可制作范围零点几秒-几十秒

电路板外形尺寸32mm*24mm

感应角度<100度锥角

感应距离7米以内

工作温度-15-+70度

感应透镜尺寸 直径:23mm(

默认)

其外型如图2-3所示:

图2-3 DYP-ME003人体感应传感器外型图

3、硬件设计

本研究设计的温湿度控制器框图如图3-1所示。

DHT11温湿度传感器

STC89C52单片机外部EEPROM

温湿度上限

温度、湿度数据

LCD 显示温湿度值

声光报警

按键输入DYP-ME003红外人体传感器

DS1032时钟电路

图3-1 红外报警监控系统方框图

图中STC89C52单片机随时监控DYP-ME003红外人体传感器送来的报警信号。当报警功能打开并且传感器检测到有人侵入时,单片机通过声(蜂鸣器)光(LED 发光管)报警,同时将入侵时间记录在外部存储芯片AT24C04中。

系统还可以即时显示当前环境温湿度值。单片机每2秒钟从DHT11温湿度传感器中读入温度和湿度,在液晶屏上即时显示。

系统通过DS1302时钟电路获得并显示当前时间。该时间初始值可以通过设置键、上调键和下调键设定,由于具有后备电池,主控系统断电后时钟仍然继续运行。

系统通过四键键盘切换开、关报警状态,设定时钟初始值,查询报警时间等。

系统各单元电路介绍如下。

3.1、单片机电路

本设计选用宏晶公司高性能单片机STC89C52采用主控芯片,该芯片为52内核8位单片机,兼容Intel等52内核单片机,支持ISP下载,适用于常用检测控制电路。由STC89C52组成的单片机系统原理图如图3-2所示。

图3-2 单片机系统电路

图中ALERT引脚输入DYP-ME003红外人体传感器信号,该信号为高电平时有人入侵,为低电平时表示没有检测到人。DATA引脚为温湿度传感器单总线引脚。2402_SCL和2402_SDA为外存芯片AT24C04通信引脚,该芯片为IIC接口芯片,通过时钟线和数据线二线接口通信。K1、K2、K3、K4为四只按键,分别为设置键、上调键、下调键和查询键。L2为报警LED发光管。P0.0—P0.7为LCD数据线,P2.5—P2.7为LCD控制线。系统采用11.0572MHz外部晶振电路。

3.2、红外热释电报警传感器电路

图3-3 DYP-ME003红外人体传感器电路

传感器使用DYP-ME003红外人体传感器,图中ALERT引脚输出信号,该信号为高电平时有人入侵,为低电平时表示无人入侵。R17电阻为下拉电阻,防止管脚误报。

3.3、温湿度传感器器及检测电路

图3-4 DHT11温湿度传感器外型及管脚

DHT11温湿度传感器外型及管脚如图3-4所示。其中电源引脚的供电电压为

3.5--5.5V。传感器上电后,要等待 1s 以越过不稳定状态在此期间不要发送任

何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。

DHT11典型应用电路如图3-5所示,其连接电路简单,只需要占用控制器

一个I/O口即可完成上下位的连接。建议连接线长度短于20时用5K上拉电阻,

大于20米时根据实际情况使用合适的上拉电阻。

图3-5 DHT11典型应用电路

DHT11数字湿温度传感器采用单总线数据格式,即单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。一次通讯时间最大3ms,数据分小数部分和整数部分。一次完整的数据传输为40bit,高位先出。数据格式如表3-1:

表3-1 DHT11数据格式

3.4、DS1302实时时钟电路

DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息。每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM指示决定采用24或12小时格式。其芯片管脚如图3-6所示。

图3-6 DS1302管脚图

DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口:线1-RES复位,2-I/O数据线和3-SCLK串行时钟。时钟/RAM 的读/写数据以一个字节或多达31个字节的字符组方式通信,DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。DS1302是由DS1202改进而来,增加了以下的特性,双电源管脚用于主电源和备份电源,供应Vcc1为可编程涓流充电电源,附加七个字节存储器。它广泛应用于电话、传真、便携式仪器以及电池供电的仪器仪表等。

●实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰

年调整的能力;

●31*8位暂存数据存储RAM;

●串行I/O 口方式使得管脚数量最少;

●宽范围工作电压2.0--5.5V;

●工作电流:2.0V 时,小于300nA;

●读/写时钟或RAM 数据时有两种传送方式:单字节传送和多字节传送字符组

方式;

●8 脚DIP封装或可选的8脚SOIC封装,根据表面装配;

●简单3线接口;

●与TTL兼容,VCC=5V;

●可选工业级温度范围-40--+85;

●与DS1202 兼容;

●双电源管用于主电源和备份电源供应,备份电源管脚可由电池或大容量电

容输入;

●附加的7字节暂存存储器。

DS1302与单片机系统连接电路如图3-7所示。

图3-7DS1302电路连接图

如图3-7所示,DS1302的SCLK、I/O和RST三个引脚通过上拉电阻连接单片机的P1.4、P1.5和P1.6。

3.5、LCD显示电路

显示部分采用SMC 1602液晶屏进行数据显示,其主要技术参数为:

表3-2 液晶屏技术指标

接口信号说明如表3-3所示。

表3-4 液晶屏接口信号说明

单片机接口电路如图3-8所示。其中P0.0—P0.7接LCD数据线,P2.5—P2.7接

LCD控制线。

图3-8 LCD与单片机接口电路

3.6、EEPROM存储器电路

红外报警监控系统的报警时间存储在EEPROM芯片AT24C04中,并可以通过查询按键查看。AT24C04是IIC芯片,其管脚连接如图3-6-1所示,与单片机连接电路如图3-6-2所示。

图3-9 AT24C04管脚图图3-10 与单片机连接图

3.7、键盘电路

本设计采用四键键盘,电路如图3-11所示。

图3-11 四键键盘电路

3.8、供电及程序下载电路

本设计采用USB接口供电,电源电压5V。同时,USB接口通过内含PL2303芯片的转换电路对单片机进行程序编写。其电路原理如图3-12所示。

图3-12供电及程序下载电路

4、软件编程

4.1、软件流程图

本设计软件主程序流程图如图4-1所示。

数据初始化

定时器初始化

显示初始化

进入后台while 循环

查询报警信号

有报警否?

温湿度测量显示

声光报警有

时钟中断入口

RHCounter 累加

置时间显示标志

返回

当前时间显示

键盘响应入口

取键值

设置、上调、下调、查询键处理

返回

报警时间存储

键盘响应程序

有回波否?

图4-1 软件流程图

4.2、主程序

下面介绍main.c 主程序编写,其他程序略。 (1) 头文件和一些宏定义 #include #include

#include "1602.h"

#include "dht.h"

#include "2402.h"

#include "DS1302.h"

(2) 管脚定义

sbit Led_Alert=P3^6; //报警灯

sbit In_Alert=P2^1; //报警信号输入

sbit Beep=P2^0; //蜂鸣器

sbit Key_Up = P3^2;

sbit Key_Down = P3^5;

sbit Key_Set = P3^3;

sbit Key_Review = P3^4;

(3) 常量、变量定义和函数声明

//定义标识

volatile bit FlagStartRH = 0; //开始温湿度转换标志

volatile bit FlagKeyPress = 0; //有键按下标志

volatile bit FlagAlert = 0; //报警状态标志

volatile bit FlagReview = 0; //查询标志

//定义温湿度传感器用外部变量

extern U8 U8FLAG,k;

extern U8 U8count,U8temp;

extern U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

extern U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_t emp;

extern U8 U8comdata;

extern U8 count, count_r;

//温湿度传感器用变量

U16 temp;

S16 temperature, humidity;

U16 RHCounter;

//按键响应用变量

U8 keyvalue, keyUp, keyDown, keySet, keyReview;

U8 FlagSet;

//DS1302时钟用变量

SYSTEMTIME CurrentTime;

uchar year, month, day, hour, minute, second;

//报警及存储用变量

//char * pSave;

//字符串显示用变量

uchar str1[6] = "000000";

uchar AlertDate[9]="00-00-00", AlertTime[9]="00:00:00"; uchar hide;

//函数声明

void int2str(int x, char* str);

void Delay1ms(unsigned int count);

void Data_Init();

void Timer0_Init();

void Timer0_ISR () ;

void SaveAlert();

void LoadAlert();

void KeyProcess(uint num);

(4) 各子程序

//整型转字符串的函数,转换范围0--65536

void int2str(int x, char* str)

{

int i=1;

int tmp=10;

while(x/tmp!=0)

{

i++;

tmp*=10;

}

tmp=x;

str[i]='\0';

while(i>1)

{

str[--i]='0'+(tmp%10);

tmp/=10;

}

str[0]=tmp+'0';

}

void Delay1ms(unsigned int count)

{

unsigned int i,j;

for(i=0;i

for(j=0;j<120;j++);

}

//数据初始化

void Data_Init()

{

RHCounter = 0;

Led_Alert = 1;

keyvalue = 0;

keyUp = 1;

keyDown = 1;

keySet = 1;

keyReview = 1;

FlagSet = 0;

hide = 0;

AlertDate[8]='\0';

AlertTime[8]='\0';

}

//定时器0初始化

void Timer0_Init()

{

ET0 = 1; //允许定时器0中断

TMOD = 1; //定时器工作方式选择

TL0 = 0x06;

TH0 = 0xf8; //定时器赋予初值

TR0 = 1; //启动定时器

}

//定时器0中断

void Timer0_ISR (void) interrupt 1 using 0

{

TL0 = 0x06;

TH0 = 0xf8; //定时器赋予初值

//每2秒钟启动一次温湿度转换

RHCounter ++;

if (RHCounter >= 450)

{

FlagStartRH = 1;

RHCounter = 0;

//设定闪烁标志

if (hide == 1) hide = 0;

else hide = 1;

}

}

//存入报警日期时间

void SaveAlert()

{

wrteeprom(0, year);

DELAY(1500);

wrteeprom(1, month);

DELAY(1500);

wrteeprom(2, day);

DELAY(1500);

wrteeprom(3, hour);

DELAY(1500);

wrteeprom(4, minute);

DELAY(1500);

wrteeprom(5, second);

DELAY(1500);

}

//载入报警日期时间

void LoadAlert()

{

uchar value;

value = rdeeprom(0);

AlertDate[0]=value/10+48;

AlertDate[1]=value%10+48;

value = rdeeprom(1);

AlertDate[3]=value/10+48;

AlertDate[4]=value%10+48;

value = rdeeprom(2);

AlertDate[6]=value/10+48;

AlertDate[7]=value%10+48;

value = rdeeprom(3);

AlertTime[0]=value/10+48;

AlertTime[1]=value%10+48;

value = rdeeprom(4);

AlertTime[3]=value/10+48;

AlertTime[4]=value%10+48;

value = rdeeprom(5);

AlertTime[6]=value/10+48;

AlertTime[7]=value%10+48; }

void KeyProcess(uint num)

{

switch (num)

{

case 1: //Up键被按下

switch (FlagSet)

{

case 0:

case 1:

break;

case 2: //年

if (year<99) year++;

Write1302(0x8e,0x00); //写入允许

DS1302_SetTime(DS1302_YEAR,year);

Write1302(0x8e,0x80); //禁止写入

break;

case 3: //月

if (month<12) month++;

Write1302(0x8e,0x00); //写入允许

DS1302_SetTime(DS1302_MONTH,month);

Write1302(0x8e,0x80); //禁止写入

break;

case 4: //日

if (day<31) day++;

Write1302(0x8e,0x00); //写入允许

DS1302_SetTime(DS1302_DAY,day);

Write1302(0x8e,0x80); //禁止写入

break;

case 5: //时

if (hour<23) hour++;

Write1302(0x8e,0x00); //写入允许

DS1302_SetTime(DS1302_HOUR,hour);

Write1302(0x8e,0x80); //禁止写入

break;

case 6: //分

if (minute<60) minute++;

Write1302(0x8e,0x00); //写入允许

DS1302_SetTime(DS1302_MINUTE,minute);

Write1302(0x8e,0x80); //禁止写入

break;

case 7: //秒

if (second<60) second++;

Write1302(0x8e,0x00); //写入允许

DS1302_SetTime(DS1302_SECOND,second);

Write1302(0x8e,0x80); //禁止写入

相关文档
最新文档