利用红外发射接收传感器进行距离检测.docx

上传人:b****1 文档编号:2172471 上传时间:2023-05-02 格式:DOCX 页数:26 大小:295.29KB
下载 相关 举报
利用红外发射接收传感器进行距离检测.docx_第1页
第1页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第2页
第2页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第3页
第3页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第4页
第4页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第5页
第5页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第6页
第6页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第7页
第7页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第8页
第8页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第9页
第9页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第10页
第10页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第11页
第11页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第12页
第12页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第13页
第13页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第14页
第14页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第15页
第15页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第16页
第16页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第17页
第17页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第18页
第18页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第19页
第19页 / 共26页
利用红外发射接收传感器进行距离检测.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

利用红外发射接收传感器进行距离检测.docx

《利用红外发射接收传感器进行距离检测.docx》由会员分享,可在线阅读,更多相关《利用红外发射接收传感器进行距离检测.docx(26页珍藏版)》请在冰点文库上搜索。

利用红外发射接收传感器进行距离检测.docx

利用红外发射接收传感器进行距离检测

利用红外发射接收传感器进行距离检测

一、实验要求

对红外的发射接收作进一步的探讨。

红外可以用来测距离,理解红外测距的基本原理,能够掌握简单的比例控制方法,以及编程。

掌握定时/计数器的使用。

对循迹效果作分析。

二、实验概要

本实验将探讨红外测距的内容。

利用红外检测器的内置电子滤波功能,调节发射红外的载波频率,而检测器对不同频率的信号有不同的“敏感度”,这样,就能大概的知道距离。

1.测试红外的扫描频率。

记录红外发射接收的距离。

2.尾随小车。

让一个小车跟着另一个小车前行。

要将前后距离控制在一定的范围内,若前后距离较大,后面跟随的小车应该加速,跟上去;若距离小于预定值,则减速。

3.跟踪黑色条纹带。

红外测距的另一种形式的应用。

也能让小车实现循迹功能。

三、实验内容

红外技术发展到现在,已经为大家所熟知,这种技术已经在现代科技、国防和工农业等领域获得了广泛的应用。

红外传感系统是用红外线为介质的测量系统,按照功能能够分成五类:

(1)辐射计,用于辐射和光谱测量;

(2)搜索和跟踪系统,用于搜索和跟踪红外目标,确定其空间位置并对它的运动进行跟踪;(3)热成像系统,可产生整个目标红外辐射的分布图像;(4)红外测距和通信系统;(5)混合系统,是指以上各类系统中的两个或者多个的组合。

红外传感器根据探测机理可分成为:

光子探测器(基于光电效应)和热探测器(基于热效应)。

本次试验将尝试用红外来测距。

1.测试扫描频率

下图9-1显示的是一个特殊品牌的红外线探测器数据表(PanasonicPNA4602M)的部分摘录。

这个摘录显示了红外线探测器在接收到频率不同于kHz时红外线信号时其敏感程度随频率变化的曲线图。

例如,当你发送频率为40kHz的信号给探测器时,它的灵敏度是频率为kHz的50%。

如果红外LED发送频率为42kHz,探测器的灵敏度是频率为kHz的20%左右。

尤其是对于让探测器的灵敏度很底的频率,为了让探测器探测到红外线的反射,物体必须离探测器更近让反射的红外光更强。

另一个角度来考虑就是最高灵敏度的频率可以探测最远距离的物体,较低灵敏度的频率可以探测距离较近的物体。

这使得距离探测就简单了。

选择5个不同频率,然后从最高灵敏度到最低灵敏度进行测试。

首先尝试最高灵敏度频率,如果物体被探测到了,就让仅次于它的高灵敏度频率测试,观察是否可以探测到。

依赖于探测器不能再检测到物体的红外线频率,我们就可以推断物体的大概位置。

图9-1滤波器灵敏度由载波频率决定

 

图9-2探测区域

例程:

例程要做两件事情:

首先,测试IRLED/探测器(分别与P1_3和P1_2连接)以确认它们的距离探测功能正常;然后,完成图9-2所示的频率扫描。

#include<>

#include<>

#defineLeftIRP1_2//左边红外接受连接到P1_2

#defineLeftLaunchP1_3//左边红外发射连接到P1_3

unsignedinttime;//定时时间值

intleftdistance;//左边的距离

intdistanceLeft,irDetectLeft;

unsignedintfrequency[5]={29370,31230,33050,35700,38460};

voidtimer_init(void)

{

IE=0x82;//开总中断EA,允许定时器0中断ET0

TMOD|=0X01;//定时器0工作在模式1:

16位定时器模式

}

voidFreqOut(unsignedintFreq)

{

time=256-(500000/Freq);//根据频率计算初值

TH0=0XFF;//高八位设FF

TL0=time;//低八位根据公式计算

TR0=1;//启动定时器

delay_nus(800);//延时

TR0=0;//停止定时器

}

voidTimer0_Interrupt(void)interrupt1//定时器中断

{

LeftLaunch=~LeftLaunch;//取反

TH0=0xFF;//重新设值

TL0=time;

}

voidGet_lr_Distances()

{

unsignedintcount;

leftdistance=0;//初始化左边的距离

for(count=0;count<5;count++)

{

FreqOut(frequency[count]);//发射频率

irDetectLeft=LeftIR;

printf("irDetectLeft=%d",irDetectLeft);

if(irDetectLeft==1)

leftdistance++;

}

}

intmain(void)

{

uart_Init();

timer_init();

printf("ProgamRunning!

\n");

printf("FREQENCYETECTED\n");

while

(1)

{

Get_lr_Distances();

printf("distanceLeft=%d\n",leftdistance);

printf("-----------------\n");

delay_nms(1000);

}

}

Tips:

是如何工作的

还记得“数组”吗这里你将用整数型数组存储五个频率值:

unsignedintfrequency[5]={29370,31230,33050,35700,38460};

uart_Init();

串口的初始化,这个函数已多次用到。

timer_init();

定时器的初始化。

此例程使定时器0工作在模式1,16位定时模式,不具备自动重载功能。

注意,timer_init()并没有开启定时器。

Get_lr_Distances();

机器人要发射某一频率,该给定时器设定多大的值呢

频率为f时,周期T=1/f,高低电平持续时间为t=1/(2T),根据公式TC=2n-CC可算定时器初值time:

但实际上,time值并未占满低八位,所以你可以这样简化计算:

高八位设0xFF,低八位根据n=8时计算,即函数FreqOut(frequency[count])中用的time=256-(500000/Freq)来计算。

当低八位计满后,整个寄存器将溢出。

根据图6-2所示的描述原理,如果检测结果irDetectLeft为1,即没有发现物体,则距离leftdistance加1。

循环描述,当5个频率描完后,可根据leftdistance的值来判断物体离机器人的大致距离。

运行程序时,在机器人前端放一白纸,前后移动白纸,调试终端将会显示白纸所在的区域,如图9-3所示。

图9-3距离探测输出实例

程序通过计算“1”出现的数量,就可以确定目标在哪个区域。

紧记,这种距离测量方法是相对的而非绝对地精确。

然而,它为机器人跟随,跟踪和其他行为提供了一个足够好的探测距离的能力。

输入、保存并运行程序

用一张纸或卡片面对IRLED/探测器做距离探测

改变纸片与机器人距离,记录使distanceLeft变化的位置

该你了――测试右边的IRLED/探测器

修改程序,对右边的IRLED/探测器做距离探测测试

运行该程序,检验这对IRLED/探测器能否测量同样的距离。

你可参考教材配套光盘对应例程中的注释部分。

例程:

修改程序,添加右边IRLED/探测器部分

输入、保存并运行程序

用纸片重复对每个IRLED进行距离探测,然后对两个IRLED同时进行测试

该你了――更多的距离测试

尝试测量不同物体的距离,弄清物体的颜色和(或)材质是否会造成距离测量的差异

2.尾随小车

让一个宝贝车跟随另一个宝贝车行走,跟随的宝贝车,也叫尾随车,必须知道距离引导车有多远。

如果尾随车落在后面,它必须能察觉并加速。

如果尾随车距离引导车太近,它也要能察觉并减速。

如果当前距离正好合适,它会等待直到测量距离变远或变近。

距离仅仅是由机器人和其它自动化机器需要控制一种数值之一。

当一个机器被设计用来自动维持某一数值,比如距离、压力或液位等,它一般都包含一个控制系统。

这些系统有时由传感器和阀门组成,或者由传感器和电机组成。

在宝贝车里面,由传感器和连续旋转电机组成。

还必须有某些处理器可以接受传感器的测量结果并把它们转化为机械运动。

必须对处理器编程来基于传感器的输入做出决定,从而控制机械输出。

闭环控制是一种常用的维持控制目标数据的方法,它很好地帮助宝贝车保持与一个物体之间的距离。

闭环控制算法类型多种多样,最常用的有滞后、比例、积分以及微分控制。

所有这些控制方法都将在《过程控制》教材中详细介绍。

事实上,图9-4所示的方框图描述了宝贝车用到的比例控制过程的步骤,即宝贝车用右边的IRLED/探测器探测距离并用右边的伺服电机调节机器人之间的位置以维持适当的距离。

图9-4右边的伺服电机及IRLED/探测器的比例控制方框图

让我们仔细观察一下图9-4的数字,学习一下比例控制是如何工作的。

这个特殊的例子是右边的IRLED/探测器和右边的伺服电机的比例控制方框图。

设定位置为2,说明我们想宝贝车维持它和任何它探测到的物体之间的距离是2。

测量的距离为4,距离太远。

误差是设定值减去测量值的差,即2-4=-2,这在圆圈的左方以符号的形式指出,这个圆圈叫求和点。

接着,误差传入一个操作框。

这个操作框显示,误差将乘以一个比例常数Kp。

Kp的值为70。

该操作框的输出显示为–2×70=–140,这叫输出校正。

这个输出校正结果输入到另一个求和点,这时它与电机的零点脉冲宽度1500相加。

相加的结果是1360,这个脉宽可以让电机大约以3/4全速顺时针旋转。

这让宝贝车右轮向前、朝着物体的方向旋转。

第二次经过闭环,测量距离可能发生变化,但是没有问题,因为不管测量距离如何变,这个控制环路将会计算出一个数值,让电机旋转来纠正任何误差。

修正值与误差总是成比例关系,该误差就是设定位置和测量位置的关系的偏差。

控制环都有一组方程来主导系统行为。

图9-4中的方框图是对该组方程的可视化描述方法。

下面是从方框图中归纳出来的方程关系及结果:

Error=Rightdistancesetpoint–Measuredrightdistance

=2–4

Outputadjus=error·Kp

=–2·70

=–140

Rightservooutput=Outputadjust+Centerpulsewidth

=–140+1500

=1360

通过一些置换,上面三个等式可被简化为一个,提供你相同的结果:

Rightservooutput=(Rightdistancesetpoint–Measuredrightdistance)Kp+Centerpulsewidth

代入数值,我们可以看到结果一致:

=((2–4)·70)+1500

=1360

左边的IRLED/探测器以及左边的伺服电机的控制框图如图9-5所示,与右边的运算法则类似。

不同的是比例系数Kp的值由+70变为为-70。

假设与右边的测量值一样,输出修正的脉冲宽度应该为1640。

下面是该框图的计算等式:

Leftservooutput=(Leftdistancesetpoint–Measuredleftdistance)Kp+Centerpulsewidth

=((2–4)·(–70))+1500

图9-5机器人左伺服电机及IRLed/探测器的比例控制方框图

例程:

该例程实现刚才讨论过的各个伺服脉冲比例控制。

换句话说,在每个脉冲发送之前,需要测量距离,决定误差信号,然后将误差值乘以比例系数Kp,再将结果加上(或减去)发送到左(或右)伺服电机的脉冲宽度值。

输入、保存并运行程序

把大小为20×28cm的纸片置于机器人的前面,就像障碍物墙。

机器人应该维持它和纸片之间的距离为预定的距离

尝试轻轻旋转一下纸片,机器人应该跟随之旋转

尝试用纸片引导机器人四处运动,机器人应该跟随它

移动纸片距离机器人特别近时,机器人应该后退,远离纸片

#include<>

#include<>

#defineLeftIRP1_2//左边红外接受连接到P1_2

#defineRightIRP3_5//右边红外接收连接到P3_5

#defineLeftLaunchP1_3//左边红外发射连接到P1_3

#defineRightLaunchP3_6//右边红外发射连接到P3_6

#defineKpl-70

#defineKpr70

#defineSetPoint2

#defineCenterPulse1500

unsignedinttime;

intleftdistance,rightdistance;//左边和右边的距离

intdelayCount,distanceLeft,distanceRight,irDetectLeft,irDetectRight;

unsignedintfrequency[5]={29370,31230,33050,35700,38460};

voidtimer_init(void)

{

IE=0x82;//开总中断EA,允许定时器0中断ET0

TMOD|=0X01;//定时器0工作在模式1:

16位定时器模式

}

voidFreqOut(unsignedintFreq)

{

time=256-(50000/Freq);

TH0=0XFF;

TL0=time;

TR0=1;

delay_nus(800);

TR0=0;

}

voidTimer0_Interrupt(void)interrupt1

{

LeftLaunch=~LeftLaunch;

RightLaunch=~RightLaunch;

TH0=0XFF;

TL0=time;

}

voidGet_lr_Distances()

{

unsignedcharcount;

leftdistance=0;//初始化左边的距离

rightdistance=0;//初始化右边的距离

for(count=0;count<5;count++)

{

FreqOut(frequency[count]);

irDetectRight=RightIR;

irDetectLeft=LeftIR;

if(irDetectLeft==1)

leftdistance++;

if(irDetectRight==1)

rightdistance++;

}

}

voidSend_Pulse(unsignedintpulseLeft,unsignedintpulseRight)

{

P1_1=1;

delay_nus(pulseLeft);

P1_1=0;

P1_0=1;

delay_nus(pulseRight);

P1_0=0;

delay_nms(18);

}

intmain(void)

{

unsignedintpulseLeft,pulseRight;

uart_Init();

timer_init();

while

(1)

{

Get_lr_Distances();

pulseLeft=(SetPoint-leftdistance)*Kpl+CenterPulse;

pulseRight=(SetPoint-rightdistance)*Kpr+CenterPulse;

Send_Pulse(pulseLeft,pulseRight);

}

}

Tips:

是如何工作的

主程序做的第一件事是调用Get_lr_Distances子函数。

Get_lr_Distances函数运行完成之后,变量leftdistance和rightdistance分别包含一个与区域相对应的数值,该区域里的目标被左、右红外线探测器探测到。

随后两行代码对每个电机执行比例控制计算:

pulseLeft=(SetPoint-leftdistance)*Kpl+CenterPulse

pulseRight=(SetPoint–rightdistance)*Kpr+CenterPulse

最后调用子函数Send_Pulse对电机的速度进行调节。

因为你要做的实验是尾随,串口线的连接影响了机器人的运动,故可去掉。

该你了

图9-6所示是引导车和尾随车。

引导车运行的程序是修改后的版本,尾随车运行的程序是。

比例控制让尾随车成为忠实的追随者。

一个引导车可以引导一串大概6到7个尾随车。

只需要把导引车的侧面板和后挡板加到其它的尾随车上。

图9-6导引机器人(左)和尾随机器人(右)

如果你是班级成员之一,把纸板安装在导引小车的两侧和尾部,参考图9-6

如果你不属于班级成员的一部分(并且只有一个机器人),可以让尾随车跟随一张纸或你的手来运动,就和跟随导引车一样

用阻值为1kΩ或2kΩ的电阻替换掉连接机器人红外线发光二极管的470Ω电阻

使用程序修改后的版本对导引机器人编程来做避障试验,打开程序重命名为

对程序做以下修改:

把1300的增加为1420

把1700的减少为1580

尾随车运行程序,不用做任何修改

机器人都运行自己的程序,把尾随车放在引导车的后面。

尾随车应该跟随一个固定的距离,只要它不被其它的诸如手或附近墙壁等引开

你可以通过调整SetPoint和比例常数来改变尾随车的行为。

用手或一张纸片来引导尾随车,做下面练习:

尝试用30到100范围内的常量Kpr和Kpl来运行程序,注意机器人在跟随目标运动的时候的响应有何差异

尝试调节常量SetPoint的值,范围从0到4

3.跟踪条纹带

图9-8是你可以搭建的一个路径并编程使机器人跟它运动的例子。

路径中每个条纹带是由三条1/4英寸宽的聚乙烯绝缘带边对边并行放置在白色招贴板上组成的,绝缘带条纹之间不能漏出白色板。

1)搭建和测试路线

为了成功跟踪该路径,测试和调节机器人是必要的。

需要的材料:

(1)一张招贴板――大概尺寸:

22X28英寸(56X71cm)

(2)1/4英寸(19mm)宽黑色聚乙烯绝缘带一卷

参考图9-7用白色招贴板和绝缘带搭建运行路径

图9-7条纹带跟踪图9-8红外探测器朝下扫描条纹带

2)测试条纹带

调节IRLED/探测器的位置向下和向外,如图6-8所示

确保绝缘带路径不受荧光灯干扰

用1k电阻代替与IRLED串联的470Ω电阻,使机器人更加近视

运行程序。

机器人与串口电缆相连,以便你能看到显示的距离

如图9-9所示,把机器人放在白色招贴板上

验证你的区域读数是否表示被探测的物体在很近的区域,两个传感器给你的读数都是1或0

放置机器人使两个IRLED/检测器都直接指向三条绝缘带的中心,如图9-10和9-11所示,然后调整机器人的位置(靠近或远离绝缘带)直到两个区域的值都达到4或者5,这表明要么发现一个很远的物体,要么没有发现物体图9-9低区域测试俯视图

如果在你的绝缘带路径上很难获得比较高的读数值,参考绝缘带路径排错部分

图9-10高区域测试顶视图图9-11高区域测试(侧视图)

3)绝缘带路径排错

如果当IRLED/检测器指向绝缘带路径的中心的时候你不能获得比较高的读数值,代替原来三条绝缘带用四条绝缘带搭建路径。

如果区域读数仍然低,确认你是用1kΩ电阻串联在IRLED上。

你可以试用2kΩ电阻使机器人更加近视。

如果都不行,试试不同的绝缘带。

调整IRLED/探测器,使它们指向更靠近或更远离机器人的前部可能有帮助。

如果当读白色表面时你的低区域测试有问题。

试试将IRLED/探测器朝机器人的方向再向下调整,但是要注意不要让底盘带来干扰。

你也可以试试一个更低阻值的电阻。

如果你用老的缩小包装的IRLED代替带套筒的IRLED,当IRLED/探测器聚焦在白色背景上时你要得到一个低区域的值可能有问题。

这些IRLED可能需要串联220Ω电阻。

也要确保IRLED的脚没有相互接触。

现在,将机器人放在绝缘带路径上,它的轮子正好跨在黑色线上。

IR探测器应该稍稍向外,如图9-12。

验证两个距离读数是否又是0或者1。

如果读数较高,意味着IR探测器需要再稍微朝远离绝缘带边缘的方向向外调整一下

图9-12IR检测器朝向放大图

当你把机器人沿图中双箭头所示的任何一个方向移动,两个IR中的一个会指向绝缘带上。

当你做了这些后,这个指向绝缘带上的IR的读数应该增加到4或5。

记住如果你将机器人向左移动,右边检测器的值会增加,如果你将机器人向右移动,左边检测器的值会升高。

调整IRLED/检测器直到机器人通过这个最后的测试,然后你可以试验下面的例程使机器人沿着条纹带行走

4)编程跟踪条纹带

你只需对程序做一点小小的调整,就可以使机器人跟踪条纹带行走。

首先,机器人应当向目标靠近,以使到目标的距离比SetPoint要小;或远离目标,以使距离比SetPoint大,这同程序的表现相反。

当机器人离物体的距离不在SetPoint的范围内时,让机器人向相反的方向运动。

只需简单地更改Kpl和Kpr的符号,换句话说,将Kpl由-70改为70;由Kpr由70改为-70。

你应该做试验,当SetPoint从2到4时,看哪个值使系统工作稳定。

下面的例程将SetPoint值改为3。

例程:

打开程序另存为

将SetPoint的值由2改为3

将Kpl由-70改为70

将Kpr由70改为-70

运行程序

将机器人放在图9-7所示的“Start”位置,机器人将静止。

如果你把手放在IR组前面,然后它会向前移动,当它走过了开始的条纹带时,把手移开,它会沿着条纹带行走。

当它看到“Finish”条纹带时,它应该停止不动

假定你从绝缘带获得的距离读数为5,从白色招贴板获得的读数为0,SetPoint的常量值为2、3以及4时都可以正常工作。

尝试不同的SetPoint值,注意机器人在条纹带上运行时的性能

附录:

定时/计数器的运用

实验需要用到单片机更精确的定时功能,因此再回顾一下51单片机定时/计数器的使用方法。

单片机的定时/计数器能够提供更精确的时间。

前面已经介绍了几种延时方法,除了空操作函数_nop_()外,定时/计数器能产生更精确的延时,它的最小延时单位为1个机器周期。

前面讲过:

若晶振频率为12MHz,则

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2