1、任务二:机器人触觉导航该任务要求机器人碰到障碍物时,接触开关会有所察觉,通过编程让机器人 避开障碍物。在安装胡须时,需要注意胡须距传感立柱既不能太远也不能太近, 太远会导致机器人碰到障碍物后反应过慢,太近则会使机器人在前方没有障碍物 的情况下进行避障操作,影响小车正常行进。胡须机器人避障程丿宇如下:#i ncludeOttincludeOint Pl_4state (void) /获取 Pl_4 的状态,右胡须return (Pl&OxlO)1:0;int P2_3state(void)/获取 P2_3 的状态,左胡须return (P2&0x0S)1:void Forward(void)Pl
2、_l=l:delay_nus(1700);Pl_l=0:delay_nus (1300);delay_nras (20);void Left Turn (void)int i;for (i=l; i=26; i+)delay_nus(1300); delay_nras (20);void Right_Turn(void)for(i=l;ii+)Pl_l=l;void Backward(void)=65:i+) delay_nus(1300);int main(void)printf (Program Running! nwhiled)辻(Pl_4state()=0)&(P2_3state()=
3、0)Backward () ; /向后 Left_Turn();/ 向左 Left_Turn() ;/向左else if(Pl_4state()=0)/向后Left_Turn() ;else 辻(P2_3state()=0) / 向后Right_Turn () ;/向右elseForward():/向前任务三:机器人红外线导航任务二触须接触导航是依靠接触变形来探测物体,而本任务是依靠红外线探测机器人前进路线,然后确定何时有光线从被探测物体反射回来,通过检测反射回來的红外光就可以确定前方是否有物体。在本次任务中,我们需要使用三极管9013,这是因为C51的10驱动能力较弱,这里我们加入三极管使其
4、工作在开关状态。三极管是一种控制元件,主要用來控ttincludeO ttincludeO ftincludeOdefine LeftIRPl_2/左边红外接收连接到Pl_2define RightIRP3_5/右边红外接收连接到P3 5#define LeftLaunchPl_3/左边红外发射连接到Pl_3ftdefine RightLaunchP3_6/右边红外发射连接到P3 6void IRLaunch(unsignedchar IR)int counter;if(IR= L)for (counter=0;counter38;counter+)辻(IR= R counter counte
5、r+) /右边发射void Forward (void) /向前彳丁走子程序 delay_nus (1300);delay_nnis (20):void Left_Turn (void) /左转子程序for( i=l;i=26;void Right_Turn(void) /右转子程序 delay_nnis (20);void Backward (void) /向后行走子程丿字int 1;for ( 1=1;i=65; delay_nus(1700);int irDetectLeft, irDetectRight; uart_Init ();IRLaunch ( R) ; /右边发射 irDet
6、ectRight = RightIR;/ 右边接收 L) ; /左边发射irDetectLeft = LeftIR:/左边接收辻(irDetectLef t=0) & (irDetectRight=O) /两边同时接收到红外线Backward ():Left_Turn();else辻(irDetectLeft=O)/只有左边接收到红外线Backward ();Right_Turn ();else辻(irDetectRight=O) /只有右边接收到红外线 Left_Turn();Forward 0;任务四:尾随小车 该任务的设计线路与任务三相同,故完成较为简单,试验程序如下:ttinclude
7、O ftincludeO #1 ncludeO int main(void) if(IR= L)/左边发射 counterOS; counter+)/右边发射int pulseLeft,pulseRight;doIRLaunchR /右边发射irDetectRight = RightIR:/右边接收IRLaunchC L /左边发射 irDetectLeft = LeftIR;/左边接收 if (irDetectLef t=0) & (irDetectRight=O) / 向后退pulseLeft=1300; pulseRight=1700;else 辻(irDetectLeft=O)& (i
8、rDetectRight=l) /右转pulseLeft=1700:else 辻(irDetectLeft=l)& (irDetectRight=O) /左转 pulseRight=1300;else /前进pulseLeft=1700;delay_nus(pulseLeft);P1_1=O;P1_O=1;delay_nus(pulseRight);P1_O=O;delay_nms (20);while 仃);任务五:机器人的距离检测用同样的IR LED/探测电路检测距离,高灵敏度的频率可以探测远距离的物 体,低灵敏度的频率可以探测距离较近的物体。这使得距离探测就简单了。选择5 个不同频率,从
9、最低灵敏度到最高灵敏度进行测试,依赖于探测器不能再检测到 物体的红外线频率,就可以推断物体的大概位置。测试扫描频率程序如下:include /ttdefine RightLaunch P3_6 /右边红外发射连接到P3_6unsigned int time;int leftdistance;/左边的距离/int rightdistance; /右边的距离int distanceLeft, irDetectLeft;/int distanceRight, irDetectRight;unsigned int frequency5 = 29370,31230, 33050, 35700, 3846
10、0:void timer_init(void)定时器模式void FreqOut(unsigned int Freq)time = 256 - (500000/Freq) ; /根据频率计算初值void Timer0_Interrupt(void) interrupt 1Left Launch = LeftLaunch; /取反 /RightLaunch= RightLaunch;重新设值THO = OXFF:TLO = time:void Get_lr_Distances()unsigned int count:for (count = 0:count5:count+)FreqOut (fr
11、equency count)/irDetectRight = RightIR: /右边接收 /printf Cf=%dn time);printf (irDetectLeft = %dn, irDetectLeft);/printfirDetectRight = %dn ,irDetectRight);if (irDetectLeft = 1)leftdistance+;/if (irDetectRight = 1)/rightdistance+;Progam Running! n);printfCFREQENCY ETECTEDnwhile(l)Get_lr_Distances (): pr
12、intf(distanceLeft = %dn, leftdistance);/printf distanceRight=%dn, rightdistance);):printfC delay_nras (1000);在进行串口调试时,应注意串口的接线位置,安装符合白己电脑的串口调试 助手。任务六:寻线搬运机器人可能是前儿个任务完成太轻松的原因,是我们对实训产生了懈怠的想法,但 最后的任务再一次提醒了我需要学习的东西还有很多,永远都不能骄傲自满。经过一天多的调试,在机器人的运行和编程中,出现了以下儿方面的问题:一、转弯出现问题。在一些路口中转弯出现了问题。所以提倡用自定义转 弯,提高成功率。2
13、.在运行机器人前要检查螺丝,检查机器人的性能是否良好,以免在运行 过程中发生意外。三、遇到错误时,要耐心,细心检查问题,分析问题,要互相讨论出解决方 案。4.电池的电量对小车运行影响极大最好选用质量较好的电池。5.伺服电机的角度没有调好,导致机器人在运行过程中影响程序的运行。人熟悉自己的机器人,了解一些运行、编程的小技巧。寻线搬运机器人编程如下:#1 ncludeO#define uint unsigned int #define uchar unsigned char uchar QTIState ;void Timel_init(void)EA =TM0DSCON1;/硬件串口使用定时器1
14、,供AT89S52与PC机通信使用 1= 0x20;=0x50;TH1 = OxFD:TLl = OxFD:TRI = 1;TI = 1;/定时器1方式位自动重装模式/模式1, 8位数据/波特率为9600/起动定时器void Pivot_Left (void) /左转子程序 delay_nus (1350);delay_nus(1650); delay_nus (1500);void Rotate_right(void)delay_nus (1650);void Rotate_Left(void)delay_nus(1350); delay_nus(1350);void Backward (v
15、oid) /向后行走子程序 delay_nus(1300);Pl_0=l:Pl_0=0: delay_nms (20);QTIState = P2&0x0e ;void Follow_Line(void)Get_QTI_State(); switch(QTIState)void main(void)int counter;Timel_init ():run ok!program350; count er+) / / 寻线Follow_Line ();/ *for (counter=0;20; counter+) /直走*/33; counter+) / / 左转 90Pivot_Left 0;
16、65; counter+) / / 直走Forward 0:55; counter+) /后转Rotate_Left (); counter+) / / 寻线/*for (counter=0; counter+) /右转调整Pivot_Right 0 ; counterOO;180;for(counter=0;counter+)/后彳亍Backward 0;40;80;for (counter=0: count er 135: count er+) /右转70;while(l);这次实训是我感触很深,收获很大,作为一名大学生,我应该多学习了解一些先进的科学技术和最新的研究理论,时刻更新丰富H己的知识,用最新的理论指导自己的学习,使自己有更大的收获和进步,为社会多做贡献。特别是这次实训的形式我感觉非常好,十分符合大学应有的教学模式,作为一洛工科学生学习很有必要。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1