毕业论文-基于机器人项目的开发设计_第1页
毕业论文-基于机器人项目的开发设计_第2页
毕业论文-基于机器人项目的开发设计_第3页
毕业论文-基于机器人项目的开发设计_第4页
毕业论文-基于机器人项目的开发设计_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于机器人项目的开发摘要随着人类工作环境变得更加恶劣,危险。避障机器人得到了广泛应用,环境对机器人避障技术要求也越来越高。以AT89S52为控制基本单元,采用C语言和汇编语言对AT89S52进行编程,进行避障机器人设计。分别采用触觉传感器,红外线传感器采集单一地面信息并将信息输入到单片机内部,单片机基于传感器信息做出决策,执行程序通过控制PWM脉冲来调节电机转速,实现机器人的两种不同导航控制,最后通过将上述两种传感器进行结合,实现多传感器信息采集,最终完成机器人的多传感器导航,并将状态信息显示在LCD上。最终能够让机器人在充满不同障碍的弯道环境中顺利避障,走出弯道,实现避障功能,并能在LCD上同步显示机器人的运行状态。最终设计机器人能够成功避障,达到设计要求。关键词:AT89S52单片机,避障,触觉,红外线,延时程序I基于机器人项目的开发AbstractAshumanworking,environmentbecomesevenworse,dangerous.Robotofobstacleavoidancehasbeenwidelyused,Environmentdemandsrobotmoreandmoretechnology.DesignregardstherobotasaprojectobjectandAT89S52asthecontrolofthebasicunit,usingSCMprinciplesandapplicationofsystemsandusingofClanguageprogrammingontheAT89S52,sotherobottoachievedetectionofthesurroundingenvironment.separatelyusetactilesensorsandinfraredsensorstocollectthesinglegroundinformationandinputittotheinternalMCU,microcontrollermakesdecisionsbasedonsensorinformation,executesproceduresthroughPWMpulsetoadjustthemotorspeed,finishtwodifferentrobotnavigationcontrol,atlast,bythecombinationofthetwosensors,therobotachievesmultisensordataacquisition,thefinalcompletionofmulti-sensorrobotnavigationandstatusinformationdisplayedintheLCD.Eventuallytherobotcanbefilledwithdifferentbarrierssmoothcurveenvironment,obstacleavoidance,outofthecorners,toachieveobstacleavoidancecapabilities,andcansynchronizetheLCDdisplayontherobotsoperatingstatus.Finaldesignoftherobotcansuccessfullyavoidobstacles,meetthedesignrequirements.Keywords:AT89S52,singlechip,avoidance,touch,infraredII基于机器人项目的开发目录第一章绪论.11.1选题背景.11.2研究意义.11.3设计目标.21.4论文内容与安排.2第二章软件设计.32.1使用定时器/计数器实现精确延时.32.2软件延时.32.2.1短暂延时.42.2.2C51中嵌套汇编程序段实现延时.4第三章单片机伺服电机控制与巡航控制.73.1单灯闪烁控制.73.2机器人伺服电机控制.73.3机器人的巡航控制.10第四章机器人触觉导航.124.1安装测试机器人胡须.124.1.1元件清单.124.1.2胡须安装.124.2胡须导航.13第五章机器人红外线导航.165.1搭建并测试IR发射和探测器对.175.1.1元件清单.175.1.2红外线安装.175.2红外线导航.18第六章机器人距离检测.206.1定时/计数器的运用.206.2红外线测距.21第七章多传感器智能机器人.237.1电路搭建.237.2设计思路.23第八章多传感器和LCD应用显示编程.26III基于机器人项目的开发8.1LCD显示器介绍.278.1.1LCD显示器连接.278.1.2LCD控制器接口说明.288.2编写LCD模块驱动程序.288.3LCD显示多传感器机器人运动状态.33第九章结论与展望.419.1结论.419.2展望.41参考文献.42致谢.43附录1.44附录2.45附录3.48附录4.51附录5.52附录6.53附录8.58声明.63IV基于机器人项目的开发第一章绪论1.1选题背景21世纪是世界科学与技术快速发展的时代,而机器人的发展代表着科技的最高成就。机器人是一种智能型的机器,它能够代替人类的部分工作,从处理个别问题的速度和可靠性来看,它在一定程度上已经超过了人类,所以机器人的出现改变了社会各个领域的发展现状。从第一台工业机器人出现开始,到现在也就短短的几十年的时间,机器人技术飞速发展,出现了日新月异的变化。如今,世界上有上百万个机器人在为我们服务,机器人已经和我们的生产、生活密不可分。它作为人类的新型生产工具,在减轻劳动强度,提高生产率,改变生产模式,把人从危险,恶劣的工作环境下解放出来等方面,显示出机套的优越性;它在原子能利用,海洋开发,宇宙探测及社会生活等方面也具有重要的应用价值。机器人的研制和应用充分反映了机器进行和生产系统的发展方向,并将对人类的生产和生活方式产生深远的影响。因此机器人技术已成为当今应用广泛,发展迅速,最引人瞩目的高技术之一。自20世纪80年代以来,许多国家把机器人作为高技术领域的战略目标列入国家计划,各种机器人的研制和生产方兴未艾。可以预料,它将成为21世纪先进制造技术的重要组成部分。机器人已经逐渐成为人类的好助手、好朋友。1.2研究意义随着人类认知领域的不断扩展和研究层次的不断深入,人类的工作环境也开始身着更为复杂的空间发展,例如核辐射场所,深海,太空,有毒环境或高温高压等,这些环境的作业远远走出了人类所能承受的极限。因此人们就开始寻找可以代替人来完成作业的物体,而机器人能很好解决上述问题。它作为人类的新型生产工具,在减轻劳动强度,提高生产率,改变生产模式,把人从危险、恶劣的工作环境下解放出来等方面,显示出极大的优越性;它在原子能利用、海洋开发、宇宙探测及社会生活方面具有重要的应用价值。由于当今工作环境经常变得更复杂,更恶劣,所以对机器人的性能要求也大大的提高了。为了能够推动生产力的发展,能够为人类提供更优质的服务,我们就必须提高机器人运动的灵敏性,鲁棒性和适应性,而这就需要我们先从根本入1基于机器人项目的开发手,研究如何实现机器人的巡航,导航基本功能,如何让机器人通过触觉,视觉等各种传感器准确获取外部环境信息,研究多传感器信息融合技术在机器人中的应用,因为这是机器人能完成更多功能的一个基本铺垫。例如避障在机器人的工作中起着非常重要的作用,特别是在矿井救援等任务中,要顺利完成救援任务,机器人首先必须通过传感器准确获取外部环境信息,正确导航,躲开障碍物,才能顺利完成任务,所以对机器人的基本功能和属性的研究意义非常重要。1.3设计目标本次设计最终能够让机器人完成一般的避障功能,机器人可以在充满不同障碍的弯道环境中顺利避障,走出弯道,并在LCD上同步显示机器人的运行状态。1.4论文内容与安排本文的内容安排总体思路是先进行软件总体设计,然后介绍伺服电机工作原理和如何完成机器人基本巡航控制,随后分别触觉导航,红外线导航设计,最后才将前两者进行结合实现带LCD的多传感器机器人。第一章就避障机器人研究的背景、意义进行了分析,确定设计目标。第二章软件总体设计。第三章熟悉单片机伺服电机的工作原理,了解上些机器人基本巡航控制。第四章利用触觉传感器进行机器人触觉导航控制。第五章利用红外线传感器进行机器人红外线导航控制。第六章进行机器人距离检测。第七章将前面触觉导航与红外线导航相结合,设计多传感器机器人。第八章总结论文,介绍研究成果,给出展望。2基于机器人项目的开发第二章软件设计AT89S52单片机支持的编程语言有C语言和汇编语言,它们可以被单独分开进行编程,也可以进行混合编程。所以在进行基础机器人的设计之前一定要掌握如何用C语言或汇编语言进行软件编程。在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖、数据传输等操作都要在程序中插入一段或几段延时,时间从几十微秒到几秒。本设计中也必不可少的要用到单片机延时功能,舵机的启动关键是调节PWM脉冲,而这就是一个延时实现的过程。所以必须先掌握延时子程序的编写。实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。2.1使用定时器/计数器实现精确延时单片机系统一般常选用11.0592MHz、12MHz或6MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1s和2s,便于精确时。由于AT89S52的时钟频率为12MHz的晶振。最长的延时时间可216=65536s。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSHACC、PUSHPSW、POPPSW和POPACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。2.2软件延时在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延时,以下为几种常见的软件延时方法:3基于机器人项目的开发2.2.1短暂延时可以在C文件中通过使用带_NOP_()语句的函数实现,定义一系列不同的延时函数,如Delay10us()、Delay25us()、Delay40us()等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10s的延时函数可编写如下:voidDelay10us()_NOP_();_NOP_();_NOP_();_NOP_();_NOP_();_NOP_();Delay10us()函数中共用了6个_NOP_()语句,每个语句执行时间为1s。主函数调用Delay10us()时,先执行一个LCALL指令(2s),然后执行6个_NOP_()语句(6s),最后执行了一个RET指令(2s),所以执行上述函数时共需要10s。2.2.2C51中嵌套汇编程序段实现延时DEL:MOVR7,#200DEL1:MOVR6,#125DEL2:DJNZR6,DEL2DJNZR7,DEL1;RET延时总时间为(250+1+2)*200+1=50ms.C51语言兼顾了多种高级语言的特点,提供了丰富的库函数,具有很强的数据处理能力,但是在编写延时程序时要求时间精确,时序要求严格,所以该设计所有延时程序皆采用汇编实现。这样一来用C51来编写主程序,采用汇编编写延时程序。这就涉及到C51与ASM混合编程实现问题。以下为几种实现方法:方法一:直接在函数体内的每个汇编语句前加“asm”预编译指令.4基于机器人项目的开发voidreset_data(void)asmMOVR1,#0AHasmLOOP:INCAasmDJNZR0,LOOPreturn;方法二:把asm作为关键字后续汇编用大括号括起来即可.voidreset_data(void)asmMOVR1,#0AHLOOP:INCADJNZR0,LOOPreturn;方法三:在C模块内通过语句“#pragma”嵌入汇编代码.voidreset(void)#pragmaasmMOVR1,#0AHLOOP:INCADJNZR0,LOOP#pragmaendasmreturn;方法四:通过C51主函数调用汇编函数。nameshi1/定义子函数名称为shi1?PR?_DELAY100?shi1SEGMENTCODE/函数以“?PR?函数名?模块名”为名PUBLIC_DELAY100的命名规则被分配到一个独立的段CODE5基于机器人项目的开发RSEG?PR?_DELAY100?shi1/程序代码段_DELAY100:/以下为汇编程序USING0MOVR1,#0AHLOOP:INCADJNZR0,LOOPRETEND在用方法四时就会有C51函数与汇编函数相互调用的问题,这就涉及到参数传递问题。这里主要介绍通过寄存器传递函数参数,如下表2-1所示:表2-1寄存器参数传递规则数目charintLong,float一般指针1R7R6,R7R4,R5,R6,R7R1,R2,R32R5R4,R5R4,R5,R6,R7R1,R2,R33R3R2,R3R1,R2,R3假设一函数:delaynus(chara,intb)则a传递到R7中,而b传递到R4,R5中。最后要运行带有汇编的C51程序还需进行以下设置:将嵌有汇编语句源文件加入要编译的工程文件,将鼠标指向此文件,如下图3-1选择菜单“optionforfileshi.c”,将属性单“properties”中的“GenerateAssemblerSRCFile”与“AssembleSRCFile”两项设置成黑体的“”,将“LinkPublicOnly”的“”去掉,如图3-2所示。然后编译即可。用此方法可以在c源程序里嵌入汇编程序。如果编译时未用SRC指令则C51中的汇编代码会被编译器忽略.6基于机器人项目的开发第三章单片机伺服电机控制与巡航控制3.1单灯闪烁控制在进行伺服电机控制实验之前要先验证单片机输出端口电平是否是本人编写的程序输出的电平,采取验证的端口位接一个发光二极管。当输出高电平时,发光二极管灭;输出低电平时,发光二极管亮。电路图如图3-1所示用P1_0端口引出一根导线接上一470欧电阻,电阻另一端与一二极管相连,二极管再接VCC。这样就形成了一个简单的电路。实物图如图3-2所示。图3-1发光二极管接线原理图图3-2发光二极学接线实物图操作如下:1)接通板上的电源2)输入、保存、下载并运行程序HighLowLed.c(见附录1)3)观察与P1_0连接的LED是否每隔一秒发光、关闭一次。3.2机器人伺服电机控制机器人舵机是通过PWM来控制的,如图所示,图3-3所示是高电平持续1.5ms低电平持续20ms,然后不断重复的控制脉冲序列。该脉冲序列发给经过零点标定后的伺服电机,伺服电机不会旋转。如果此时你的电机旋转,表明电机需要标定,需要对伺服电机进行调零操作。由于控制电机运动转速的是高电平持续的时间,当高电平持续时间为1.3ms时,电机顺时针全速旋转,如图3-4所示。当高电平持续时间1.7ms时,电机逆时针速旋转,如图3-5所示。7基于机器人项目的开发图3-3电机转速为零时序图图3-4电机顺时针旋转时序图图3-5电机顺时针时序图在进行舵机实验之前,先确认机器人两个伺服电机的控制线是否正确连接到了C51单片机教学板的两个专用电机控制接口上。照图3-6所示的电机连接原理图和实际接线图进行检查。从图3-6可知,P1_0引脚的控制输出用来控制右的伺服电机,而P1_1则用来控制左边的伺服电机。图3-6伺服电机与教学底板的连线图(左)和实际接线图(右)显然这里对微控制器编程发给伺服电机的高、低电平信号必须具备更精确的时间。因为单片机只有整数,没有小数,所以要生成伺服电机的控制信号,要求具有比delay_nms()函数的时间更精确的函数,这就需要用另一个延时函数delay_nus(unsignedintn)。这个函数可以实现更小的延时,它的延时单位是微秒,即千分之一毫秒,参数n为延时微秒数。以下程序实现机器人两个轮子全速运行:#include#includesbitP1_0=P10;sbitP1_1=P11;voiddelay_nus()#pragmaasm8基于机器人项目的开发MOVR1,#13MOVR2,#50TEMP:DJNZR1,TEMPMOVR1,#13DJNZR2,TEMPRET#pragmaendasmvoiddelay_nus1()#pragmaasmMOVR1,#17MOVR2,#50TEMP1:DJNZR1,TEMP1MOVR1,#17DJNZR2,TEMP1RET#pragmaendasmvoiddelay_nms()#pragmaasmMOVR1,#50MOVR2,#200TEMP2:DJNZR1,TEMP2MOVR1,#50DJNZR2,TEMP2RET#pragmaendasm9基于机器人项目的开发voidmain()UART_init();while(1)P1_0=1;delay_nus();P1_0=0;P1_1=1;delay_nus1();P1_1=0;delay_nms();以上程序有三个延时函数:delay_nus(),delay_nus1(),delay_nms().其中delay_nus()使与右轮相接的P1_0高电平延时1.3ms,delay_nus1()使与左轮相接的P1_1高电平延时1.7ms。右轮全速顺时针旋转,左轮全速逆时针旋转,最终使得机器人全速向前运行。3.3机器人的巡航控制通过上面可以知道通过调节PWM我们可以实现机器人的各种巡航动作。在这介绍通过编程实现机器人在无感情况下完成前后左右转基本动作。如果按照图3-7前进方向的定义,机器人向前走时,从机器人的左边看,它向前走时轮子是逆时针旋转的;从右边看另一个轮子则是顺时针旋转的。发给单片机控制引脚的高电平持续时间决定了伺服电机旋转的速度和方向。for循环的参数控制了发送给电机的脉冲数量。由于每个脉冲的时间是相同的,因而for循环的参数也控制了伺服电机运行的时间。运行程序turnaround.c(见附录2)是使机器人完成向前走,左转,右转及向后走。10基于机器人项目的开发图3-7机器人及其前进方向的定义示意图11基于机器人项目的开发第四章机器人触觉导航4.1安装测试机器人胡须4.1.1元件清单编程让机器人通过触觉胡须导航之前,首先安装并测试胡须。安装机器人触觉胡须所需的硬件元件清单包括:1)金属丝2根2)平头M322盘头螺钉2个3)13mm圆形立柱2个4)M3尼龙垫圈2个5)3-pin公-公接头2个6)220电阻2个7)10k电阻2个4.1.2胡须安装1)拆掉连接主板到前支架的两颗螺钉,参考图4-1,进行下面操作2)螺钉依次穿过M3尼龙垫圈、13mm圆形立柱3)螺钉穿过主板上的圆孔之后,拧进主板下面的支架中,但不要拧紧4)把须状金属丝的其中一个钩在尼龙垫圈之上,另一个钩在尼龙垫圈之下,调整它们的位置使它们横向交叉但又不接触,拧紧螺钉到支架上5)参考接线图4-2,搭建胡须电路。注意:右边胡须状态信息输入是通过P1口的第4脚完成,而左边胡须状态信息输入是通过P2口的第3脚完成6)确定两条胡须比较靠近,但又不接触面包板上的3-pin头。推荐保持3mm的距离。图4-1胡须安装实物图图4-2胡须电路示意图12基于机器人项目的开发实际的参考接线图和安装好触觉胡须的机器人如图5-3所示:图4-3实际接线图如图4-3所示胡须电路示意图,每条胡须都是一个机械式的、接地常开的开关。胡须接地(GND)是因为教学板外围的镀金孔都连接到GND。金属支架和螺丝钉提供电气连接给胡须。通过编程让单片机探测什么时候胡须被触动。连接到每个胡须电路的I/O引脚监视着10K上拉电阻上的电压变化。当胡须没有被触动,连接胡须的I/O管脚的电压是5V;当胡须被触动时,I/O短接到地,所以I/O管脚的电压是0V。4.2胡须导航由图5-1可知右胡须是与单片机输入端口P1_4相连,而左胡须是与单片机输入端口P2_3相连。当右胡须被触动时,P1_4信号为低电平,当左胡须被触动时,P2_3信号为低电平,所以可以通过检测这两个输入端信号的状态,当P1_4为低电平时,编程实现机器人左转,同样当P2_3为低电平时,编程实现机器人右转,从而实现避障功能。但是当机器人进入墙角时,发现其只能进行不断的死循环左右转,并不能走出死区,这时考虑如何编程使机器人走出死区。解决这一问题的方法是通过记下胡须交替触动的总次数。程序记住每个胡须的前一次触动状态,并和当前触动状态对比。如果状态相反,就在交替总数上加1.如果这个交13基于机器人项目的开发替总数超过了程序给定的阈值,那么就该做一个“U”形转变,并且把胡须交替计数器复位。以下为实现机器人胡须触觉导航的源程序,该程序包括三个文件touch.c(见附录3),delay1.a51(见附录4)和delay2.a51(见附录5)touch.c为主程序,另外两个都为延时程序。touch.c用delay1.a51和delay2.a51实现机器人触觉避障功能。主程序中的语句首先检查胡须的状态。如果两个胡须都触动了即P1_4state()和P2_3state()都为0,调用backward(),紧接着调用leftturn()两次;如果只是右胡须被触动即只有P1_4state()=0,程序调用Backward(),然后再leftturn();如果左胡须被触动即只有P2_3state()=0,程序调用Backward(),然后再调用rightturn();如果两个胡须都没有触动,在这种情况下,在else中调用forward()语句。函数leftturn(),rightturn()以及backward()看起来应该相当熟悉,但是函数Forward()有一个变动。它只发送一个脉冲,然后返回。这点相当重要,因为机器人可以在向前行走中的每两个脉冲之间检查胡须的状态。意味着,机器人在向前行走的过程中,每秒检查触须状态大概43次(1000ms/23ms=43)。因为每个全速前进的脉冲都使得机器人前进大约半厘米。只发送一个脉冲,然后回去检查胡须的状态是一个好主意。每次程序从forward()返回后,程序再次从while循环的开始处执行,此时ifelse语句会再次检查胡须的状态。三个特别的变量用于探测墙角。Int型变量counter用来存储交替探测的次数。设定的交替探测的最大值为3。int型变量old2、old3存储胡须旧的状态值。每当old2、old3交替变化一次,counter值加一。当counter值大于4时,就表明机器人已处于死角,必须通过两个左转逃离死区,同时counter重新复位,这就完整的实现机器人的触觉导航控制。流程图如4-4所示。14基于机器人项目的开发图4-4触觉导航流程图15基于机器人项目的开发第五章机器人红外线导航前一章的触须接触导航是依靠接触变形来探测物体,而在许多情况下,人们希望机器人不必接触物体就能探测到物体。许多机器人使用雷达(RADAR)或者声纳(SONAR)来探测物体而不需同物体接触。本章的方法是使用红外光来照射机器人前进的路线,然后确定何时有光线从被探测目标反射回来,通过检测反射回来的红外光就可以确定前方是否有物体。在机器人上建立的红外光探测物体系统在许多方面就像汽车的前灯系统。当汽车前灯射出的光从障碍物体反射回来时,人的眼睛就发现了障碍物体,然后大脑处理这些信息,并据此控制身体动作驾驶汽车。机器人使用红外线二极管LED作为前灯,如图5-1所示。图5-1红外光探测障碍物实物图图5-2本章需要用到零件红外线二极管发射红外光,如果机器人前面有障碍物,红外线从物体反射回来,相当于机器人眼睛的红外检测(接收)器,检测到反射回的红外光线,并发出信号来表明检测到从物体反射回红外线。机器人的大脑单片机AT89S52基于这个传感器的输入控制伺服电机。红外线(IR)接收/检测器有内置的光滤波器,除了需要检测的980nm波长的红外线外,它几乎不允许其它光通过。红外检测器还有一个电子滤波器,它只允许大约38.5kHz的电信号通过。检测器只寻找每秒闪烁38,500次的红外光。这就防止16基于机器人项目的开发了普通光源像太阳光和室内光对IR的干涉。太阳光是直流干涉(0Hz)源,而室内光依赖于所在区域的主电源,闪烁频率接近100或120Hz。由于120Hz在电子滤波器的38.5kHz通带频率之外,它完全被IR探测器忽略。5.1搭建并测试IR发射和探测器对6.1.1元件清单1)两个红外检测器2)两个IRLED3)四个470电阻4)两个9013三极管5.1.2红外线安装电路板的每个角安装一个IR组(IRLED和检测器)。1)断开主板和伺服系统的电源2)建立图5-3所示的电路.图5-3左侧和右侧IR组原理图17基于机器人项目的开发由于C51的IO驱动能力较弱,这时我们加入三极管使其工作在开关状态。三极管是一种控制元件,主要用来控制电流大小,是用小电流去控制大电流。通过工艺的方法,把两个二极管背靠背地连接起来就组成了三极管。按PN结的组合方式不同分为PNP型和NPN型,NPN型三极管型号为9013,结构示意图及符号图如图5-4,管脚如图5-5.图5-49013结构示意图图5-59013管脚图9013的工作原理:9013基区做得很薄,当按图2连接时,发射结正偏。集电结反偏,发射区基区注入电子,这时由于集电结反偏。对基区的电子有很强的吸引力。所以由发射区注入基区的电子大部分进入集电区,于是集电极的电流得到了增大。三极管相当于一个开关:当P1_3(P3_6)置高时,从集电区经基区到发射区电路导通,加载在IRLED上的电压为VCC(5V),IRLED向外发射红外线;当P1_3(P3_6)置低时,电路又断开,IRLED停止发射。5.2红外线导航由图6-3可知右检测器是与单片机输入端口P3_5相连,而左检测器是与单片机输入端口P1_2相连。当右检测器检测到反射回来的红外线时,P3_5信号为低电平,当左检测器检测到反射回来的红外线时,P1_2信号为低电平,所以可以通过检测这两个输入端信号的状态,当P1_2为低电平时,编程实现机器人右转,同样当P3_5为低电平时,编程实现机器人左转,从而实现避障功能。该程序包括三个文件infrared.c(见附录6),delay1.a51(见附录4)和delay2.a51(见附录5).infrared.c为主程序,另外两个都为延时程序。infrared.c调用delay1.a51和delay2.a51实现机器人红外线避障功能。18基于机器人项目的开发主程序中的语句首先执行IRlaunch(R)和IRlaunch(L)这两条语句,发射稳定的红外线信号,然后检查左右两个检测器的状态。如果两个检测器都检测到反射红外线了,即P1_2state()和P3_5state()都为0,调用backward(),紧接着调用leftturn()两次;如果只是右检测器检测到信号即只有P3_5state()=0,程序调用backward(),然后再leftturn();如果左检测器检测到信号即只有P1_2state()=0,程序调用backward(),然后再调用rightturn();如果两个检测器都没有检测到信号,这种情况下在else中调用forward()语句。程序流程图如5-6所示。图5-6红外线导航流程图19基于机器人项目的开发第六章机器人距离检测6.1定时/计数器的运用单片机AT89S52有两个定时/计数器,通过TCON和TMOD这两个特殊功能寄存器控制。TCON和TMOD你都可以在头文件uart.h中看到其应用。TCON为定时器控制寄存器,有8位,每个位的含义为如表6-1所示。TCON的低4位与定时器无关,它们用于检测和触发外部中断。表6-1TCON控制寄存器位符号描述TCON.7TF1定时器1溢出标志位。由硬件置位,由软件清除TCON.6TR1定时器1运行控制位。由软件置位或清除:置1为启动;置0为停止TCON.5TF0定时器0溢出标志位TCON.4TR0定时器0运行控制位TCON.3IE1外部中断1边沿触发标志TCON.2IT1外部中断1类型标志位TCON.1IE0外部中断0边沿触发标志TCON.0IT0外部中断0类型标志位表6-2TMOD模式寄存器位名字定时器描述7GATE1门控制。当被置为1时,只有INT为高电平时,定时器才开始工作6C/T1定时/计数器选择位:1计数器;0定时器5M11模式位1(见表3)4M01模式位0(见表2)3GATE0定时器0的门控制位2C/T0定时器0的定时/计数选择位1M10定时器0的模式位10M00定时器0的模式位020基于机器人项目的开发表6-3定时器工作模式M1M0模式000011102113每个定时/计数器都有一个16位的寄存器Tn(n=0或1)来控制计数长度,由高8位THn和低8位TLn置初值。定时/计数器有四种工作模式表7-3。模式0:定时/计数器按13位自加1计数器工作。这13位由TH的全部8位和TL中的低5位组成,TL中的高3位没有用到。模式1:定时/计数器按16位自加1计数器工作。模式2:定时/计数器被拆成一个8位寄存器TH和一个8位计数器TL,以便实现自动重载。这种模式使用起来非常方便,一旦设置好TMOD和THn,定时器就可以按设定好的周期溢出。模式3:TH0和TL0均作为两个独立的8位计数器工作。定时器1在模式3下不工作。定时/计数器是在计数初值的基础上加法记数的,假设Tn(TLn和THn)中写入的值为TC,在该模式下最大计数值为2m,程序运行的计数值为CC,TC=2n-CC.6.2红外线测距图6-1显示的是教材所使用的红外线探测器频率与灵敏度关系。该图显示了红外线探测器在接收到频率不同于38.5kHz时红外线信号时其敏感程度随频率变化的曲线图。例如,当你发送频率为40kHz的信号给探测器时,它的灵敏度是频率38.5kHz的80%;如果红外LED发送频率为42kHz,探测器的灵敏度是频率38.5kHz的50%左右。对于灵敏度很低的频率,为了让探测器探测到反射的红外线,物体必须离探测器更近。另一个角度来考虑就是,高灵敏度的频率可以探测远距离的物体,低灵敏度的频率可以探测距离较近的物体。这使得距离探测就简单了。选择5个不同频率,从最低灵敏度到最高灵敏度进行测试,依赖于探测器不能再检测到物体的红外线频率,就可以推断物体的大概位置。图6-2举例说明机器人如何用红外发射频率做距离测试。在这个例子中,目标物体在区域3。也就是说,发送35700Hz和38460Hz频率能发现物体,发送29370Hz、21基于机器人项目的开发31230Hz以及33050Hz频率就不能发现物体。如果你移动物体到区域2,那么发送33050Hz、35700Hz及38460Hz可以发现物体,发送29370Hz和31230Hz频率不能发现物体。按照上述思路即可编写程序testdistance.c(见附录7)。图6-1灵敏度与频率关系图图6-2频率与探测区域图根据图6-2所示的描述原理,如果检测结果irDetectLeft为1,即没有发现物体,则距离leftdistance加1。循环描述,当5个频率描完后,可根据leftdistance的值来判断物体离机器人的大致距离。运行程序时,在机器人前端放一白纸,前后移动白纸,调试终端将会显示白纸所在的区域,如图6-3所示。图6-3距离探测输出实例图22基于机器人项目的开发第七章多传感器智能机器人前面分别实现了对基础机器人的触觉导航和红外线导航,但实际生活中机器人如果只用一种传感器来探测外界环境实现避障,那么他的导航精度是很不准确的,一般需要多个传感器实现互补进行导航,只有这样才能顺利实现机器人的导航。视觉传感器虽然采取更精确的外部信息,但是由于其比较复杂,所以不与采用,将胡须和红外线进行结合使用,设计一款多传感器智能机器人,使它能够结合传感器检测到的信息进行综合判断,执行理想的行走方案。7.1电路搭建1)按下图7-1所示搭建机器人。触觉及红外电路前面已经给出。2)搭建IRLED时,可适当将红外LED向两边偏移,减少两只红外LED检测区域的重叠。图7-1多传感器智能机器人7.2设计思路多传感器机器人最终有以下几个部分组成:AT89S52单片机,电机模块,复位23基于机器人项目的开发电路模块,晶振电路模块,触须导航电路模块,红外线导航电路模块和LCD液晶显示模块,如图7-2所示:复位电路与晶振电路是单片机工作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论