打印

红外发射与接收. 如何用一个MCU的控制?

[复制链接]
3991|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Galway-Zhang|  楼主 | 2010-9-26 12:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Galway-Zhang 于 2010-9-26 13:07 编辑

CH1    OUT1  为第一组发射接收端
CH2    OUT2  为第二组发射接收端
CH3    OUT3  为第三组发射接收端
CH4    OUT4  为第四组发射接收端

当OUT1-4都能检测到信号时,SW为0,
当其中一无法检测不到信号时,SW为1,

请教高人.如何实现?

本人刚学MCU..

自动吹风机.pdf

39.35 KB

红外发射与接收

相关帖子

沙发
Galway-Zhang|  楼主 | 2010-9-26 12:26 | 只看该作者
#include<reg52.h>

//***********脚位定义****************//
sbit        LED1=P2^5;
sbit        dptp=P1^6;

sbit        CH1        =P1^0;
sbit        CH2        =P1^1;
sbit        CH3        =P1^2;
sbit        CH4        =P1^3;

sbit        OUT1=P3^0;
sbit        OUT2=P3^1;
sbit        OUT3=P3^3;
sbit        OUT4=P3^4;

//***********延迟时间****************//
void Delay(unsigned int time)                //延时ms时间
{
        unsigned int i,j;
        for(i=time;i>0;i--)                                        //不断的减1,直到i>0,条件不成立为止
                for(j=112;j>0;j--);                                //不断的减1,直到j>0,条件不成立为止
}

void main(void)
{
P1=0xff;
P2=0xff;
P3=0xff;
while(1)
{
  {
   CH1=~CH1;
   Delay(10);
  }
  if(CH2==0)
  {
   Delay(15);
   if(CH2==0)
   {
    LED1=0;
   }
  }
  else
  {
   dptp=0;
  }
}
}

初步用单组实验未成功

使用特权

评论回复
板凳
hotpower| | 2010-9-26 19:43 | 只看该作者
应该先学学红外原理

使用特权

评论回复
地板
Galway-Zhang|  楼主 | 2010-9-26 23:06 | 只看该作者
3# hotpower

原理了解了.
只是程序基础不是很好...

目前只好把红外信号过来后...用比较器比较后.输出高低电平..

用MCU去检测高低电平.

但这样的情况.易产生误操作.

所以想了解更高深些的.

朋友说用中断.还未了解其...

初学者.都应以参考别人的程序..然后自己再修改.

这样容易对学习有信心.而且更易开发自己对程序的好奇心..

使得自己更加努力的钻.

使用特权

评论回复
5
程序匠人| | 2010-9-27 00:14 | 只看该作者
你是要做什么?

是做类似于红外感应、避障吗?

使用特权

评论回复
6
程序匠人| | 2010-9-27 00:19 | 只看该作者
哦,刚才下载了你的pdf,知道了,你是要做红外感应吧。

红外感应,一般是发射端发射一定频率的信号。然后读取接收端的信号。

要注意的几个方面:
1、外界光线(如阳光)的干扰。所以要多次检测,进行消抖。
2、感应的距离。一般是通过调节发射端的功率(电流)和接收端的灵敏度来实现。

使用特权

评论回复
7
yao1314520shi| | 2010-9-27 15:54 | 只看该作者
新来的,顶顶顶起再说

使用特权

评论回复
8
alamo2009| | 2010-9-27 23:08 | 只看该作者
哦,刚才下载了你的pdf,知道了,你是要做红外感应吧。

红外感应,一般是发射端发射一定频率的信号。然后读取接收端的信号。

要注意的几个方面:
1、外界光线(如阳光)的干扰。所以要多次检测,进行消抖。
2、感 ...
程序匠人 发表于 2010-9-27 00:19

和阳光有个毛关系呢!
一个是可见光,一个是红外,根本谈不上干扰。
而且红外是经过调制的!

使用特权

评论回复
9
程序匠人| | 2010-9-28 00:26 | 只看该作者
太阳光是由多种光组合而成的,其中就有红外光。

而且,如果是做红外感应,并不一定都是用调制信号。有的只是简单的开关信号而已。

使用特权

评论回复
10
Galway-Zhang|  楼主 | 2010-9-29 11:20 | 只看该作者
本帖最后由 Galway-Zhang 于 2010-9-29 11:22 编辑

感谢匠人!

红外感应,一般是发射端发射一定频率的信号。然后读取接收端的信号。

要注意的几个方面:
1、外界光线(如阳光)的干扰。所以要多次检测,进行消抖。
2、感应的距离。一般是通过调节发射端的功率(电流)和接收端的灵敏度来实现。

已经实验成功单个点的
1.已经做二次消抖.
2.发射与接收之间的距离是完全由发射功率决定.


目前我选择的方式是:
多点.但分开单点扫描.
当任意一点有障碍时,持续在该点上不断的发射,然后检测信号,若是障碍一直在,就在里面死循环,障碍消除后,跳出死循环

不知道这样会不会有问题.

还有一个问题:

在网上搜索到的资料,常看到红外的频率在38KHZ,

但我直接给发射管恒定的电流,接收管那边也能正常接收.

这否决了频率的关系了吗?

使用特权

评论回复
11
Galway-Zhang|  楼主 | 2010-9-29 11:30 | 只看该作者
#include"reg52.h"

/***********************************
***************单点程序**************
**********************************/
//***********脚位定义****************//
sbit        LED1=P3^5;
sbit        dptp=P1^6;

sbit        AA        =P1^2;                        //通道选择IO定义
sbit        BB        =P1^5;                        //通道选择IO定义
sbit        CC        =P1^6;                        //通道选择IO定义

sbit        FIN        =P1^0;                        //红外发射IO定义
sbit        FOUT=P1^1;                        //红外接收IO定义

sbit        SW        =P1^7;                        //输出控制IO定义

sbit        CH1        =P3^0;
sbit        CH2        =P3^1;

//***********延迟时间****************//
void Delay(unsigned int time)                //延时ms时间
{
        unsigned int i,j;
        for(i=time;i>0;i--)                                        //不断的减1,直到i>0,条件不成立为止
                for(j=112;j>0;j--);                                //不断的减1,直到j>0,条件不成立为止
}

//******************主程序****单组****//
void main(void)
{
        P1=0xff;
        P2=0xff;
        P3=0xff;
        while(1)
        {
                CH1=1;                                        //开启红外发射
                if(CH2==1)                                //检测是否有障碍
                {               
                        Delay(10);                        //延时
                        if(CH2==1)                        //再检测是否有障碍
                        {
                                LED1=0;                        //若无障碍,则LED1亮
                                Delay(1562.5);                       //延时
                        }
                }
                else
                {
                        P3=~P3;                                                 //有障碍则P3闪烁
                        Delay(3125);                              //6250为1S,灭0.5S,亮0.5S
                }
        }
}

使用特权

评论回复
12
fj_Bird| | 2010-10-5 16:43 | 只看该作者
路过,顶起来!!

使用特权

评论回复
13
haiping0823| | 2010-10-8 22:40 | 只看该作者
学习............

使用特权

评论回复
14
lxfstephen| | 2010-10-8 23:11 | 只看该作者
学习了!!!

使用特权

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

本版积分规则

个人签名:LED电源,移动电源,充电器开发,PCBlayout, 电池研发设备开发,动力电池保护板 电池测试仪 QQ:551708558 E-mail:dy188@qq.com 淘宝:http://diy-power.taobao.com

0

主题

267

帖子

2

粉丝