打印

动态扫描红外对射式报警电路及程序研发

[复制链接]
2490|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jey3282|  楼主 | 2013-1-31 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/******************************************************************************************
用STC12C2052AD制作动态扫描红外对射式报警程序
设计思路:
红外线发射管的角度通常在30度以上随着与接收管的距离增大其散射的角度亦随之增大,如何才能有效的避免多光束且束间距只有2.5cm左右,相邻的两光束之间不相互干扰是个最为难的难点,在物理结构上可以通过发射管端加聚焦镜的方式来解决,此亦为最简单有效的方法;当然还可以通过电路或程序来解决,例如每个光束发射不同的频率或编码,接收端通过选频或解码来达到消除干扰的目的。
本程序为比较简易且发射与接收距1~60cm以内比较稳定的一种方式即:

先让P1口全部输出高电平再判断P3口是否也全部为高电平如果不是则表明接收回路有故障或某一路光束有障碍物的遮挡则输出报警信号,如果P3口亦为全高则表示接收回路正常和没有人为强光造成的干扰继续让P1.0~P1.4口以15ms速度逐个输出低电平(其间并插入判断P3口是否为全高),使连接在输出低电平端口上的发射管发射出红外光束,经红外接收管接收及CD40106反相后到P3.0~P3.4口.且每发射一路后就判断对应的那路是否正常接收,如果正常则扫描下一路,然后循环,如果任一路红外光束被故障物阻断则P3.x口的电平会与P1.x口不一置,此时CPU的P3.7口输出低电平且启动定时器,如果一直有故障物则P3.7口一直输出低电平直到故障物排除后延时约0.3s才输出高电平。

用料如下:IC:  CD40106
CPU:  STC12C2052AD
晶振:使用内部振荡器

电路连接简述:
本电路的红发射管正端接VCC,负端串接一个270欧电阻后分别接P1.0~P1.4口,低电平有效,接收管负端接VCC,正端接CD40106的输入端及接一个200K精密可调电阻对地,CD40106的输出端分别对应接到CPU的P3.0~P3.4口,即与P1.0对射的CD40106输出端接P3.0口~~~~与P1.4对射的CD40106输出端接P3.4口
电路调试:
将红外发射和接收管成直线互对,按下P3.5口的开关使P1.0~P1.7全部输出低电平则点亮所有红外发射管,调节每路的可调电阻使P3.0~P3.4的电平与P1.0~P1.4一样即可(其实直接用200k固定电阻亦行免调试)。

程序设计:红尘有你QQ:691477940      2013-01-30
/******************************************************************************************/
原理图:

用洞洞板制作的PCB:

发射及接收模组:


/******************************************************************************************/
# include <STC12C20.h>
#include <intrins.h>//此头文件中包含_crol_左移指令等
#define uint unsigned int
#define uchar unsigned char
static uchar j;
//单片机引脚重新定义
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;sbit P1_2 = 0x92;
sbit P1_3 = 0x93;sbit P1_4 = 0x94;
sbit P1_5 = 0x95;sbit P1_6 = 0x96;
sbit P1_7 = 0x97;sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;void delay(uint a);//延时函数声明
void P3ff(void);//判P3口是否全部端口为高电平函数声明
/******************************************************************************************
函数名:1ms延时函数全局变量:无
参数说明:无返回说明:无
说明:a参数为1ms的倍数
/******************************************************************************************/
void delay (unsigned int a)  // 1ms延时程序
{
unsigned int i;while( --a != 0)
{
for(i = 0; i < 300; i++);//STC单片机在外部晶振为12MHz时i值上限为600
//for(i = 0; i < 125; i++);//AT89C51单片机在外部晶振为12MHz时i值上限为125
}      
}/******************************************************************************************
函数名:判P3口是否为全1全局变量:无
参数说明:无返回说明:无
说明:如果有某一个接收管短路或用人造光照射接收端在此判断
/******************************************************************************************/
void P3ff(void)//判P3口是否全部端口为高电平
{
WDT_CONTR = 0x30;//时钟2分平/喂狗Pre-scale x 393216 / 6000000 = 131ms
P1 = 0xff;//关闭所有发射管发射
delay(8);//延时
if((P3 | 0xe0) != 0xff)//如果P3口不是全部高说明有可能有某一路有强光干扰或接收管短路
{//屏蔽高3位不计0001 1111
delay(5);//延时
if((P3 | 0xe0) != 0xff)//如果P3口不是全部高说明有可能有某一路有强光干扰或接收管短路
{//屏蔽高3位不计0001 1111
P3_7 = 0;//报警输出
j = 0;//保证每次时间一样故将其清0
TH0 = (65536 - 50000) / 256;//6MHZ约100MS定时器初值
TL0 = (65536 - 50000) % 256;//6MHZ约100MS定时器初值
TR0 = 1;//开启定时器0
}
}
}
/******************************************************************************************
函数名:main函数
全局变量:无参数说明:无
返回说明:无
/******************************************************************************************/
void main(void)
{


相关帖子

沙发
angerbird| | 2013-2-1 16:45 | 只看该作者
楼主还是蛮有心的,这个我顶一下的,希望继续啦

使用特权

评论回复
板凳
simac| | 2013-6-18 17:08 | 只看该作者
你这个方案能用在电梯的红外安全光幕吗    我想搞一个电梯光幕一样的红外对射检测器

使用特权

评论回复
地板
shenmu2012| | 2013-6-18 22:41 | 只看该作者
红外线发射管的角度通常在30度以上随着与接收管的距离增大其散射的角度亦随之增大,如何才能有效的避免多光束且束间距只有2.5cm左右,相邻的两光束之间不相互干扰是个最为难的难点,在物理结构上可以通过发射管端加聚焦镜的方式来解决,此亦为最简单有效的方法;当然还可以通过电路或程序来解决,例如每个光束发射不同的频率或编码,接收端通过选频或解码来达到消除干扰的目的。

使用特权

评论回复
5
vivilzb1985| | 2013-6-19 22:30 | 只看该作者
楼上了解的还是清楚的,对于红外的应用,现在越来越受到重视了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:最新的合肥二手家具回收http://www.hfxuewen.com/信息平台,你还等什么呢?赶紧去看看吧!

10

主题

10

帖子

0

粉丝