基于单片机的家用防盗装置设计.docx
《基于单片机的家用防盗装置设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的家用防盗装置设计.docx(8页珍藏版)》请在冰豆网上搜索。
基于单片机的家用防盗装置设计
热释电红外传感器简单介绍
热释电红外线(PIR)传感器是80年代发展起来的一种新型高灵敏度探测元件。
是一种能检测人体发射的红外线而输出电信号的传感器,它能组成防入侵报警器或各种自动化节能装置。
它能以非接触形式检测出人体辐射的红外线能量的变化,并将其转换成电压信号输出。
将这个电压信号加以放大,便可驱动各种控制电路[2]。
如图1示为热释电红外传感器的内部电路框图。
图1热释电红外传感器的内部电路框图
2.2PIR的原理特性
热释电红外线传感器主要是由一种高热电系数制成的探测元件,在每个探测器内装入一个或两个探测元件,并将两个探测元件以反极性串联,以抑制由于自身温度升高而产生的干扰。
由探测元件将探测并接收到的红外辐射转变成微弱的电压信号,经装在探头内的场效应管放大后向外输出。
人体辐射的红外线中心波长为9--10um,而探测元件的波长灵敏度在0.2--20um范围内几乎稳定不变。
在传感器顶端开设了一个装有滤光镜片的窗口,这个滤光片可通过光的波长范围为7--10um,正好适合于人体红外辐射的探测,而对其它波长的红外线由滤光片予以吸收,这样便形成了一种专门用作探测人体辐射的红外线传感器。
一旦人侵入探测区域内,人体红外辐射通过部分镜面聚焦,并被热释电元接收,但是两片热释电元接收到的热量不同,热释电也不同不能抵消,经信号处理而输出电压信号。
硬件原理图:
仿真图:
注意:
传感器与单片机借口电路修改为以下图:
BISS0001的热释电红外开关应用电路图
上图中,运算放大器OP1将热释电红外传感器的输出信号作第一级放大,然后由C3耦合给运算放大器OP2进行第二级放大,再经由电压比较器COP1和COP2构成的双向鉴幅器处理后,检出有效触发信号Vs去启动延迟时间定时器,输出信号Vo经晶体管T1放大驱动继电器去接通负载。
上图中,R3为光敏电阻,用来检测环境照度。
当作为照明控制时,若环境较明亮,R3的电阻值会降低,使9脚的输入保持为低电平,从而封锁触发信号Vs。
SW1是工作方式选择开关,当SW1与1端连通时,芯片处于可重复触发工作方式;当SW1与2端连通时,芯片则处于不可重复触发工作方式。
图中R6可以调节放大器增益的大小,原厂图纸选10K,实际使用时可以用3K,可以提高电路增益改善电路性能。
输出延迟时间Tx由外部的R9和C7的大小调整,触发封锁时间Ti由外
部的R10和C6的大小调整,R9/R10可以用470欧姆,C6/C7可以选0.1U。
电阻R2=47KΩ
传感器要使用菲涅尔透镜罩住,以此扩大监测范围
以下为软件设计流程图:
程序部分:
#include
sbitbeep=P3^1;
sbitled=P3^0;
sbitsensor=P1^0;
sbitled1=P1^2;
sbitreset=P3^2;
unsignedintflag;
voidinit0()
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;//设置初值
TL0=(65536-50000)%256;//
EA=1;//打开总中断开关
ET0=1;//打开定时器中断
//TR0=1;//启动定时器
}
voidinit1()
{
EA=1;//打开总中断开关
EX0=1;//开外部中断0
IT0=1;//设置外部中断的触发方式
}
/*voiddelay(unsignedintk)
{
unsignedintj;
for(;k>0;k--)
for(j=200;j>0;j--);
}*/
voiddelayms(unsignedcharms)//延时子程序
{
unsignedchari;
while(ms--)
{
for(i=0;i<120;i++);
}
}
voidmain()
{
//beep=0;
P1=0xfe;
P3=0xfd;
P2=0xff;
init0();
init1();
while
(1)
{
if(sensor==1)
{
delayms(20);
if(sensor==1)
{
led1=0;
led=0;
beep=1;
TR0=1;
flag=0;
}
}
}
}
voidint0()interrupt0
{
EX0=0;
if(reset==0)
{
delayms(20);
if(reset==0)
{
led1=1;
led=1;
beep=0;
TR0=0;
//init0();
}
}
EX0=1;
}
voidint1()interrupt1
{
TH0=(65536-50000)/256;//设置初值
TL0=(65536-50000)%256;//
flag++;
if(flag==200)
{
flag=0;
led1=1;
led=1;
beep=0;
TR0=0;
}
/*else
{
led1=0;
led=0;
beep=1;
}
*/
}