红外报警系统.docx
- 文档编号:7241573
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:11
- 大小:107.52KB
红外报警系统.docx
《红外报警系统.docx》由会员分享,可在线阅读,更多相关《红外报警系统.docx(11页珍藏版)》请在冰豆网上搜索。
红外报警系统
红外报警系统
1设计目的:
为个人家居以及公共场所提供一个防盗报警的有力保障。
目前市场上的主流红外线防盗系统大都由红外对管加简单外围电路直接驱动报警器,这样虽然节省了成本却达不到一定的精度要求。
我们设计基于AVRMega16单片机的红外防盗系统的目的就在于使防盗系统有更高的灵敏度和精确度,并且很重要的一点是我们在这个装置中加入了一个时钟系统,能够记录下有人擅自或非法闯入的准确时刻,为破案取证提供了重要的线索。
同时将所学的单片机知识应用于实践。
2设计用途及功能:
本产品可安置在一些禁止入内的场所的入口,如军火库、金库、危险物品存放地等,能够起到提示警告的作用。
同时也可以用于家居或办公场所,安置于隐蔽处,当有盗贼闯入时,报警将盗贼吓跑或提示主人采取行动,同时记录下的闯入的时刻有助于警方破案。
3电路原理图:
4硬件设计及使用:
如以上原理图所示,PB0、PB1和PB5为输出口,分别驱动红色LED、绿色LED和蜂鸣器,所连电阻即R0和R1、R2、R3都是电路板自带的。
蜂鸣器的两个引脚分别为正负极,当正负极两端加上5V电压后,蜂鸣器发出响声。
注意,该蜂鸣器两脚不能接反,否则蜂鸣器会烧毁。
PB7为输入口,设置内部上拉使能,外接红外探测器。
红外探测器实为红外光电开关,采用实验室里的12V直流电源供电,其特性为:
当光电开关发出的光线在探测距离内未被反射时,OUT输出9V高电平;当光电开关发出的光线在探测距离内被反射时,OUT输出0V低电平。
根据这一电平特性,采用上图分压电路,该分压电路采用串联分压,使红外探测器高电平时有4.7伏左右电压输入到MAGE16单片机,从而达到输入电平的变化。
此分压电路为自己焊接而成,电路板上没有。
七段数码管的七个端口分别连接180欧姆的电阻,再连接至单片机的PA0-PA6端口。
4个位选端口分别与PD0-PD3连接。
5软件设计思想及功能:
软件在设计的时候也是分为两个部分,即报警部分和时钟部分。
设计的思路来自市面上流行的防盗系统的运作方式。
简单的说就是用单片机控制各个硬件的状态变化,从而达到报警的效果。
报警部分比较简单,大体就是判断PB7端口输入的是高电平还是低电平,若输入低电平,则命令单片机,使驱动红色LED灯闪亮,同时蜂鸣器报警。
时钟部分比较复杂,但也是比较常规的程序设计,与常见的主流时钟程序类似,在此不多做介绍,可参看我们的源程序。
6系统的检测与调试:
对于时钟精确度的检测,我们给系统提供电源使其运行12个小时后,再与标准时间对照,确定时钟系统在12小时内几乎无误差,精确运行。
对于报警系统的检测,我们甚至用一根细线在光电开关前迅速划过,结果系统及时精确报警,灵敏度极高。
所需资源:
Mega16单片机、CourseProject实验板、4位的七段数码管、光电开关、红色LED,电阻若干,导线若干。
应用拓展:
见证了我们作品的实际效果之后,我们联想到可以把此装置加以改进,制成短跑冲刺时的精确记录统计装置。
当运动员冲过终点线(光电开关正对的水平直线)时,此装置精确记录下时刻,十分精确灵敏。
当然,要实现这种用途,在软硬件上还要做出少许改动。
参考资料:
《AVR单片机嵌入式系统原理与应用实践》
《大学生科技创新大赛培训教程》
《单片机与C语言开发》
7源程序:
//ICC-AVRapplicationbuilder:
2009-6-722:
20:
51
//Target:
M16
//Crystal:
4.0000Mhz
#include
#include
voidport_init(void)
{
PORTB=0x1E;
DDRB=0x23;
PORTA=0x00;
DDRA=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
}
voidinit_devices(void)
{
CLI();
port_init();
MCUCR=0x00;
GICR=0x00;
TIMSK=0x00;
SEI();
}
voiddelay_nus(unsignedintn);
voiddelay_nms(unsignedintn);
voidmain(void)
{PORTB=0x1E;
DDRB=0x23;
while
(1)
{if((PINB&0b10000000)==0)
{
PORTB=0x7D;
DDRB=0x23;
delay_nms(30000);
}
}
}
voiddelay_nus(unsignedintn)
{
unsignedinti;
for(i=0;i { asm("nop"); } } voiddelay_nms(unsignedintn) { unsignedinti; for(i=0;i delay_nus(1000); } /******************************************************* Filename;时钟 Chiptype;ATmega16 Programtype;Application Clockfrequency;1.000000MHz Memorymodel;Small ExternalSPAMsize;0 Datastacksize;256 ********************************************************/ #include #include unsignedcharled_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsignedcharposition[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; unsignedintt[9]={0,956,865,759,716,638,568,506,470}; unsignedchard[9]={0,105,116,132,140,157,176,198,209}; #defineMax_note32 unsignedcharmusic[Max_note]={5,2,8,2,5,2,4,2,3,2,2,2,1,4,1,2,1,2,2,3,2,3,2,1,2,3,2,4,2,5,8}; unsignedcharnote_n; unsignedintint_n; intplay_on; unsignedchartime[3],time_set[3]; unsignedchardis_buff[6]; unsignedchartime_counter,key_stime_counter; unsignedcharclock_state=6,return_time; intpoint_on,set_on,time_1s_ok,key_stime_ok; voiddisplay(void) { staticunsignedcharposit=0; PORTD=0xff; PORTA=led_7[dis_buff[posit]]; if(set_on&&(posit==clock_state))PORTA=0x00; if(point_on&&(posit==2||posit==4))PORTA|=0x80; PORTD=position[posit]; if(++posit>=6)posit=0; } #pragmainterrupt_handlertimer0_comp_isr: iv_TIMER0_COMP voidtimer0_comp_isr(void) { display(); if(++key_stime_counter>=5) { key_stime_counter=0; key_stime_ok=1; if(! (++time_counter%25))set_on=! set_on; if(time_counter>=100) { time_counter=0; time_1s_ok=1; } } } #pragmainterrupt_handlertimer1_compa_isr: iv_TIMER1_COMPA voidtimer1_compa_isr(void) { if(! play_on) { note_n=0; int_n=1; play_on=1; } else { if(--int_n==0) { TCCR1B=0x08; if(note_n { OCR1A=t[music[note_n]]; int_n=d[music[note_n]]; note_n++; int_n=int_n*music[note_n]; note_n++; TCCR1B=0x09; } else play_on=0; } } } voidtime_to_disbuffer(unsignedchar*time) { unsignedchari,j=0; for(i=0;i<=2;i++) { dis_buff[j++]=time[i]%10; dis_buff[j++]=time[i]/10; } } #definekey_inputPINC #definekey_mask0b11000000 #definekey_no0 #definekey_k11 #definekey_k22 #definekey_state_00 #definekey_state_11 #definekey_state_22 unsignedcharread_key(void) { staticunsignedcharkey_state=0,key_old; unsignedcharkey_press,key_return=key_no; key_press=key_input&key_mask; switch(key_state) { casekey_state_0: if(key_press! =key_mask) { key_old=key_press; key_state=key_state_1; } break; casekey_state_1: if(key_press==key_old) { if(key_press==0b01000000)key_return=key_k1; elseif(key_press==0b01000000)key_return=key_k2; key_state=key_state_2; } else key_state=key_state_0; break; casekey_state_2: if(key_press==key_mask)key_state=key_state_0; break; } returnkey_return; } voidmain(void) { unsignedcharkey_temp,i; DDRA=0xFF; PORTD=0xFF; DDRD=0x3F; OCR0=0xF9; TCCR0=0x0A; TCCR1A=0x40; TCCR1B=0x08; TIMSK=0x12; time[2]=23;time[1]=58;time[0]=55 SEI(); while (1) { if(time_1s_ok) { time_1s_ok=0; point_on=~point_on; if(++time[0]>=60) { time[0]=0; if(! play_on)TCCR1B=0x09; if(++time[1]>=60) { time[1]=0; if(++time[2]>=24)time[2]=0; } } if((++return_time>=20)&&(clock_state! =6))clock_state=6; if(clock_state==6)time_to_disbuffer(time); } if(key_stime_ok) { key_stime_ok=0; key_temp=read_key(); if(key_temp) { return_time=0; if(key_temp==key_k1) { if(++clock_state>=7)clock_state=0; if(clock_state==0) { for(i=0;i<=2;i++)time_set[i]=0; time_to_disbuffer(time_set); } if(clock_state==6) { for(i=0;i<=2;i++)time[i]=time_set[i]; time_to_disbuffer(time); } } if((clock_state! =6)&&(key_temp==key_k2)) { if(clock_state%2)time_set[clock_state/2]+=10; else { if((time_set[clock_state/2]%10)==9) time_set[clock_state/2]-=9; else time_set[clock_state/2]+=1; } if(time_set[0]>=60)time_set[0]-=60; if(time_set[1]>=60)time_set[1]-=60; if(time_set[2]>=24)time_set[2]-=10; time_to_disbuffer(time_set); } } } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 红外 报警 系统