ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:726.80KB ,
资源ID:4462952      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4462952.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用红外发射接收传感器进行距离检测.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、利用红外发射接收传感器进行距离检测利用红外发射接收传感器进行距离检测一、 实验要求对红外的发射接收作进一步的探讨。红外可以用来测距离,理解红外测距的基本原理, 能够掌握简单的比例控制方法,以及编程。掌握定时/讣数器的使用。对循迹效果作分析。二、 实验概要本实验将探讨红外测距的内容。利用红外检测器的内置电子滤波功能,调卩发射红外的 载波频率,而检测器对不同频率的信号有不同的“敏感度”,这样,就能大槪的知道距离。1.测试红外的扫描频率。记录红外发射接收的距离。2.尾随小车。让一个小车跟着另一个小车前行。要将前后距离控制在一定的范用内, 若前后距离较大,后面跟随的小车应该加速,跟上去:若距离小于预泄

2、值,则减速。3.跟踪黑色条纹带。红外测距的另一种形式的应用。也能让小车实现循迹功能。三、 实验内容红外技术发展到现在,已经为大家所熟知,这种技术已经在现代科技、国防和工农业等 领域获得了广泛的应用。红外传感系统是用红外线为介质的测量系统,按照功能能够分成五 类:(1)辐射计,用于辐射和光谱测量;(2)搜索和跟踪系统,用于搜索和跟踪红外目标, 确定義空间位巻并对它的运动进行跟踪;(3)热成像系统,可产生整个目标红外辐射的分布 图像:(4)红外测距和通信系统:(5)混合系统,是指以上各类系统中的两个或者多个的组 合。红外传感器根据探测机理可分成为:光子探测器(基于光电效应)和热探测器(基于热 效应

3、)。本次试验将尝试用红外来测距。1.测试扫描频率下图9-1显示的是一个特殊品牌的红外线探测器数据表(Panasonic PNA4602M)的部 分摘录。这个摘录显示了红外线探测器在接收到频率不同于38.5 kHz时红外线信号时其敏 感程度随频率变化的曲线图。例如,当你发送频率为40 kHz的信号给探测器时,它的灵敏度是频率为38.5 kHz的 50%。如果红外LED发送频率为42 kHz,探测器的灵敏度是频率为38.5 kHz的20%左右。 尤其是对于让探测器的灵敏度很底的频率,为了让探测器探测到红外线的反射,物体必须离 探测器更近让反射的红外光更强。另一个角度来考虑就是最高灵敏度的频率可以探

4、测最远距离的物体,较低灵敏度的频率 可以探测距离较近的物体。这使得距离探测就简单了。选择5个不同频率,然后从最高灵敏 度到最低灵敏度进行测试。首先尝试最髙灵敏度频率,如果物体被探测到了,就让仅次于它 的高灵敏度频率测试,观察是否可以探测到。依赖于探测器不能再检测到物体的红外线频率, 我们就可以推断物体的大概位垃。图9-2探测区域例程:TestLeftFrequencySweep.c例程要做两件事情:首先,测试IRLED/探测器(分別与P1_3和P1_2连接)以确认它们 的距离探测功能正常:然后,完成图9-2所示的频率扫描。ffincludettincludetfdefine LeftIR P(

5、_2 II左边红外接受连接鈿/_2tfdefine LeftLaunch P/_3 /左边红外发射连接到P/_3unsigned int time; 11 定时时间值int leftdistance; H 左边的距离int distanceLeft, irDetectLeft;unsigned int frequency5=29370,31230,33050,35700,38460;void timerjnit(void)圧二0x82; /开总中雌,允许定时器0中耐0TMOD 1=0X0/; /宦时器0工作在模式I: 6位定时器模式void FreqOutfunsigned int Freq)

6、time = 256 - (500000/Freq); 11 根据频率汁算初值THO = OXFF; TLO = time;TRO 二 1; delay_nus(800);TRO = 0;/為7(位如11低八位根据公式计算 H启动定时器II延时1丨停止左时器void TimerOJnterrupt(void) interrupt I 11 左时器中断LeftLaunch = -LeftLaunch; 11 取反THO = OxFF; 11重新设值TLO = time;void G e t_lr_Dis tances ()unsigned int count;leftdistance = 0;

7、II初始化左边的距禽for (count = 0;count5;count)FyqOut(frcqucncy(count); 口发射频率 irDetectLeft = LeftIR;printfCirDetectLeft = 96dn, irDetectLeft); if(irDetectLeft = 1)leftdistance+;int main (void)uartjnitf); timerjnit();printfCProsam Running!nn); printfCFREQENCY ETECTEDXn1); while Getr_Distances();printf(udistan

8、ceLeft = 96dn leftdistance);printfC- n);delay_nms( 1000);Tips: TestLeftFrequencySweep.c是如何工作的?还记得“数组”吗?这里你将用整数型数组存储五个频率值:unsigned int frequency5=29370,31230,33050,35700,38460;uartjnit();串口的初始化,这个函数已多次用到。timerjnitf);泄时器的初始化。此例程使立时器0工作在模式1, 16位泄时模式,不具备自动重载功 能。注意,timer_init()并没有开启泄时器。Get_lr_Distances()

9、;机器人要发射某一频率,该给定时器设定多大的值呢?频率为f时,周期T=1/f,高低电平持续时间为t=1/(2T),根据公式TC=2n-CC可算泄时器 初值time:曲”亠= 65536 -竺巴1x10 f但实际上,time值并未占满低八位,所以你可以这样简化计算:高八位设OxFF,低八 位根据n=8时汁算,即函数FreqOut(frequencycount)中用的time = 256 - (500000/Freq) 来计算。当低八位计满后,整个寄存器将溢岀。根据图6-2所示的描述原理,如果检测结果irDetectLeft为1,即没有发现物体,则距藹 leftdistancelU o循环描述,当

10、5个频率描完后,可根leftdistance的值来判断物体离机器 人的大致距离。运行程序时,在机器人前端放一白纸,前后移动白纸,调试终端将会显示白纸所在的区 域,如图9-3所示。图9-3距离探测输出实例程序通过计算“1”出现的数量,就可以确定目标在哪个区域。紧记,这种距离测量方法是相对的而非绝对地精确。然而,它为机器人跟随,跟踪和苴 他行为提供了一个足够好的探测距离的能力。输入、保存并运行程序Test Left F req ue ncySweep. c用一张纸或卡片而对IR LED/探测器做距离探测改变纸片与机器人距离,记录使distanceLeft变化的位宜该你了 一一测试右边的IR LED

11、/探测器修改程序TestLeftFrequencySweep.c,对右边的IR LED/探测器做距离探测测试运行该程序,检验这对IR LED/探测器能否测量同样的距离。你可参考教材配套光盘对应例程中的注释部分。例程:DisplayBothDistances.c修改程序TestLeftFrequencySv/eep.c,添加右边IR LED/探测器部分输入、保存并运行程序DisplayBothDistances.c用纸片重复对每个IR LED进行距离探测,然后对两个IR LED同时进行测试该你了一一更多的距离测试尝试测量不同物体的距离,弄淸物体的颜色和(或)材质是否会造成距离测疑的差异2.尾随小

12、车让一个宝贝车跟随另一个宝贝车行走,跟随的宝贝车,也叫尾随车,必须知道距离引导 车有多远。如果尾随车落在后而,它必须能察觉并加速。如果尾随车距离引导车太近,它也 要能察觉并减速。如果当前距离正好合适,它会等待直到测量距离变远或变近。距离仅仅是由机器人和其它自动化机器需要控制一种数值之一。当一个机器被设计用来 自动维持某一数值,比如距离、压力或液位等,它一般都包含一个控制系统。这些系统有时 由传感器和阀门组成,或者由传感器和电机组成。在宝贝车里面,由传感器和连续旋转电机 组成。还必须有某些处理器可以接受传感器的测疑结果并把它们转化为机械运动。必须对处 理器编程来基于传感器的输入做岀决左,从而控制

13、机械输出。闭环控制是一种常用的维持控制目标数据的方法,它很好地帮助宝贝车保持与一个物体 之间的距离。闭环控制算法类型多种多样,最常用的有滞后、比例、积分以及微分控制。所 有这些控制方法都将在过程控制教材中详细介绍。事实上,图9-4所示的方框图描述了宝贝车用到的比例控制过程的步骤,即宝贝车用右 边的IR LED/探测器探测距离并用右边的伺服电机调节机器人之间的位置以维持适当的距 离。Center pulse width1500图9-4右边的伺服电机及IR LED/探测器的比例控制方框图让我们仔细观察一下图9-4的数字,学习一下比例控制是如何工作的。这个特殊的例子 是右边的IR LED/探测器和右

14、边的伺服电机的比例控制方框图。设左位置为2,说明我们想 宝贝车维持它和任何它探测到的物体之间的距藹是2。测疑的距离为4,距离太远。误差是 设定值减去测量值的差,即2-4=-2 ,这在圆圈的左方以符号的形式指岀,这个圆圈叫 求和点。接着,误差传入一个操作框。这个操作框显示,误差将乘以一个比例常数Kp。Kp 的值为70。该操作框的输出显示为-2X70 = -140,这叫输出校正。这个输出校正结果输入 到另一个求和点,这时它与电机的零点脉冲宽度1500相加。相加的结果是1360,这个脉宽 可以让电机大约以3/4全速顺时针旋转。这让宝贝车右轮向前、朝着物体的方向旋转。第二次经过闭环,测量距离可能发生变

15、化,但是没有问题,因为不管测量距离如何变, 这个控制环路将会计算出一个数值,让电机旋转来纠正任何误差。修正值与误差总是成比例 关系,该误差就是设定位置和测量位置的关系的偏差。控制环都有一组方程来主导系统行为。图9-4中的方框图是对该组方程的可视化描述方 法。下而是从方框图中归纳出来的方程关系及结果:Error = Right distance set point - Measured right distance= 2-4Output adjus = error Kp=-2 70= -140Right servo output = Output adjust + Center pulse v/

16、idth=-140 +1500=1360通过一些苣换,上而三个等式可被简化为一个,提供你相同的结果:Right servo output = (Right distanee set point - Measured right distance) Kp+ Centerpulse width代入数值,我们可以看到结果一致:= (2-4) * 70)+ 1500=1360左边的IR LED/探测器以及左边的伺服电机的控制框图如图9-5所示,与右边的运算法 则类似。不同的是比例系数Kp的值由+70变为为-70。假设与右边的测量值一样,输出修正 的脉冲宽度应该为1640.下面是该框图的计算等式:Lef

17、t servo output = (Left distance set point - Measured left distance) Kp + Center pulse width=(2 - 4) (-70) +1500Center pulse width1500图9-5机器人左伺服电机及IR Led/探测器的比例控制方框图例程:FollowingRobot.c该例程实现刚才讨论过的各个伺服脉冲比例控制。换句话说,在每个脉冲发送之前,需 要测量距离,决左误差信号,然后将误差值乘以比例系数Kp,再将结果加上(或减去)发 送到左(或右)伺服电机的脉冲宽度值。输入.保存并运行程序Following

18、Robot.c把大小为20X28cm的纸片置于机器人的前而,就像障碍物墙。机器人应该维持它和 纸片之间的距离为预定的距离尝试轻轻旋转一下纸片,机器人应该跟随之旋转尝试用纸片引导机器人四处运动,机器人应该跟随它移动纸片距离机器人特别近时,机器人应该后退,远离纸片tfinclude #include P /_2 /左边红外接受连接到PJLP3_5 11右边红外接收连接至陀3主P L3 /左边红外发射连接到P i_3tfdefine Kpl 70tfdefine Kpr 70tfdefine SetPoint 2tfdefine CenterPulse 1500unsigned int time;i

19、nt leftdistance,rishtdistance;/ 左边和右边的距离int delayCount,distanceLeft.distanceRightJrDetectLeftJrDetectRight;unsigned int frequency5=29370f 31230,33050,35700,38460;void timerjnit(void)IE=0x82; H开总中,允许圭时器0中耐0TAOD |=0X0/; I丨定时器0工作在模式I: (6位宦时器模式void FreqOutfunsigned int Freq)time = 256 (50000/Freq);THO =

20、 OXFF;TLO = time ;TR0= 1;delay_nus(800);TRO = 0;void TimerOJnterrupt(void) interrupt ILeftLaunch = -LeftLaunch;RishtLaunch= RightLaunch;THO = OXFF;TLO = time;void Get_lr_Distances()unsigned char count;leftdistance = 0; /初始化左边的距离rightdistance = 0; II初始化右边的距离for (count = 0;count5;count)FreqOut(frequen

21、cycount);irDetectRight = Right IR;irDetectLeft = LeftIR;if (irDetectLeft = I)leftdistance+;if (irDetectRight = I) rightdistance;void Send_Pulse(unsisned int pulseLeft,unsigned int pulseRight)PL 口;delay_nus(pulseLeft);P/./=0;PI_O;delay_nus(pulseRight);P1_0=0;delay_nms( 18);int main(void)unsigned int

22、pulseLeft,pulseRight;uartjnitf);timerjnit();while( 1)Getr_Distances(); pulseLeft=(SetPoint-leftdistance)Kpl+CenterPulse; pulseRisht=(SetPoint-rightdistance)tKprCenterPulse; Send_Pulse(pulseLeft,pulseRight);Tips: FollowingRobot.c是如何工作的?主程序做的第一件事是调用Get_lr_Distances子函数。Get_lr_Distances函数运行完成 之后,变量leftd

23、istance和rightdistance分别包含一个与区域相对应的数值,该区域里的目 标被左、右红外线探测器探测到。随后两行代码对每个电机执行比例控制计算:pulseLeft = (SetPoint - leftdistance ) * Kpl + CenterPulse pulseRight -(SetPoint - rishtdistance) * Kpr + CenterPulse 最后调用子函数Send_Pulse对电机的速度进行调节。因为你要做的实验是尾随,串口线的连接影响了机器人的运动,故可去掉。该你了图96所示是引导车和尾随车。引导车运行的程序是FastlrRoaming.c修

24、改后的版本,尾 随车运行的程序是FollowingRobot.co比例控制让尾随车成为忠实的追随者。一个引导车可 以引导一串大槪6到7个尾随车。只需要把导引车的侧而板和后挡板加到英它的尾随车上。图9-6导引机器人(左)和尾随机器人(右)如果你是班级成员之一,把纸板安装在导引小车的两侧和尾部,参考图9-6如果你不属于班级成员的一部分(并且只有一个机器人),可以让尾随车跟随一张纸 或你的手来运动,就和跟随导引车一样用阻值为1kQ或2kQ的电阻替换掉连接机器人红外线发光二极管的470Q电阻使用程序FastlrRoaming.c修改后的版本对导引机器人编程来做避障试验,打开程序FastlrRoamin

25、g.c 重命名为 Slov/erlrRoamingForLeadRobot.c对程序 Slov/erlrRoamingForLeadRobot.c 做以下修改:把1300的增加为1420把1700的减少为1580尾随车运行程序FollovvingRobot.c,不用做任何修改机器人都运行自己的程序,把尾随车放在引导车的后而。尾随车应该跟随一个固泄的 距离,只要它不被其它的诸如手或附近墙壁等引开你可以通过调整SetPoint和比例常数来改变尾随车的行为。用手或一张纸片来引导尾随 车,做下而练习:尝试用30到100范囤内的常量Kpr和Kpl来运行程序FollowingRobot.c,注意机器人在

26、跟随目标运动的时候的响应有何差异尝试调肖常量SetPoint的值,范国从0到43.跟踪条纹带图9-8是你可以搭建的一个路径并编程使机器人跟它运动的例子。路径中每个条纹带是 由三条1/4英寸宽的聚乙烯绝缘带边对边并行放置在白色招贴板上组成的,绝缘带条纹之间 不能漏岀白色板。D搭建和测试路线为了成功跟踪该路径,测试和调节机器人是必要的。需要的材料:(1)-张招贴板一一大槪尺寸:22 X 28英寸(56 X 71 cm)(2)1/4英寸(19 mm)宽黑色聚乙烯绝缘带一卷参考图97用白色招贴板和绝缘带搭建运行路径2)测试条纹带调节IR LED/探测器的位置向下和向外,如图68所示确保绝缘带路径不受荧

27、光灯干扰用你电阻代替与IR LED串联的470Q电阻,使机器人更加近视运行程序DisplayBothDistances.ee机器人与串口电缆相连,以便你能看到显示的距图99低区域测试俯视图如果在你的绝缘带路径上很难获得比较髙的读数值,参考绝缘带路径排错部分3)绝缘带路径排错如果当IRLED/检测器指向绝缘带路径的中心的时候你不能获得比较髙的读数值,代替 原来三条绝缘带用四条绝缘带搭建路径。如果区域读数仍然低,确认你是用1kO电阻串联 在IR LED上。你可以试用2kQ电阻使机器人更加近视。如果都不行,试试不同的绝缘带。 调整IR LED/探测器,使它们指向更靠近或更远离机器人的前部可能有帮助。

28、如果当读白色表面时你的低区域测试有问题。试试将IR LED/探测器朝机器人的方向再 向下调整,但是要注意不要让底盘带来干扰。你也可以试试一个更低阻值的电阻。如果你用老的缩小包装的IRLED代替带套筒的IRLED,当IR LED/探测器聚焦在白色背 景上时你要得到一个低区域的值可能有问题。这些IR LED可能需要串联220Q电阻。也要 确保IR LED的脚没有相互接触。现在,将机器人放在绝缘带路径上,它的轮子正好跨在黑色线上。IR探测器应该稍稍 向外,如图9-12。验证两个距离读数是否又是0或者仁如果读数较高,意味着IR探测 器需要再稍微朝远离绝缘帯边缘的方向向外调整一下图9-12 IR检测器朝

29、向放大图当你把机器人沿图中双箭头所示的任何一个方向移动,两个IR中的一个会指向绝缘带 上。当你做了这些后,这个指向绝缘带上的IR的读数应该增加到4或5。记住如果你将机器人 向左移动,右边检测器的值会增加,如果你将机器人向右移动,左边检测器的值会升髙。调整IR LED/检测器直到机器人通过这个最后的测试,然后你可以试验下而的例程使 机器人沿着条纹带行走4)编程跟踪条纹带你只需对程序Follov/ingRobot.c做一点小小的调整,就可以使机器人跟踪条纹带行走。 首先,机器人应当向目标靠近,以使到目标的距离比SetPoint要小:或远离目标,以使 距离比SetPoint大,这同程序Followi

30、ngRobot.c的表现相反。当机器人离物体的距离不在 SetPoint的范囤内时,让机器人向相反的方向运动。只需简单地更改Kpl和Kpr的符号,换句 话说,将Kpl由-70改为70;由Kpr由70改为-70。你应该做试验,当SetPoint从2到4时,看哪 个值使系统工作稳定。下而的例程将SetPoint值改为3。例程:StripeFollowingRobot.c打开程序 FollowingRobot.c 另存为 StripeFollowingRobot.c将SetPoint的值由2改为3将Kpl由-70改为70将Kpr由70改为-70运行程序将机器人放在图9-7所示的“Start”位亂 机器人将静此 如果你把手放在IR组前而, 然后它会向前移动,当它走过了开始的条纹带时,把手移开,它会沿着条纹带行泄。 当它看到“Finish”条纹带时,它应该停止不动假立你从绝缘带获得的距离读数为5,从白色招贴板获得的读数为0, SetPoint的常量 值为2、3以及4时都可以正常工作。尝试不同的SetPoint值,注意机器人在条纹带上 运行时的性能附录:定时/计数器的运用实验需要用到单片机更精确的左时功能,因此再回顾一下51单片机泄时/汁数器的使用 方法。单片机的宦时/计数器能够提供更精确的时间。前而已经介绍了几种延时方法,除了空操作函数_nop_()外

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1