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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

机器人实训总结.docx

1、机器人实训总结机器人实训总结学 院: 专业班级: 姓名学号: -指导教师: 2013年7月为期一周的机器人实训转眼就过去了,个人认为这是我上大学以来参加的最有意思的 一次课程设计了,在实训期间,同学们亲自动手组装机器人小车并通过修改调试程序使自 己的小车完成要求的任务,将平时学习的 C语言和单片机知识运用到了实际操作中,极大地调动了我们学习的积极性并提高了动手能力,是我们受益匪浅!任务一:组装小车并完成基本调试实训第一天我们的主要任务便是将实训机器人小车按要求组装好,这看似简单的任务 是极其需要耐心与细致的,每一个螺丝都要拧紧,每一个电子元件都要安装于指定位置, 特别要注意左右轮的接线,如果反

2、接将会使小车反向运行。经过半小时的摸索,我们的小 车终于成形,但当给它录入一个前行程序时,小车竟然莫名其妙的在原地打转,我们仔细 查阅了实训指导书,才发现问题所在,原来,每一个新组装的机器人都需要进行调零检测 才能保证其运行的准确,调零程序如下:#in clude#in cludeint main(v oid)uart_I ni t();prin tf(The LED conn ected to P1_0 is bli nkin g!n);while(1);P1_0=1;delay_nus(1500);P1_0=0;delay_nus(20000); _将程序录入小车并运行,旋转车轮旁的旋钮直

3、至车轮停转便达到了调零的目的。接下 来,我们便要完成实训要求的第一个程序:控制小车 LED灯的亮灭。通过参考指导书的已有程序,我们比较顺利的完成了该任务,任务程序如下: (在试验中需要注意LED灯的正负极)#include#includeint main(void)uart_Init();printf(The LED connected to P1_0 is blinking!n);while(1)P1_0=0;P1_1=1;delay_nms(500);P1_0=1;P1_1=0;delay_nms(500);任务二:机器人触觉导航该任务要求机器人碰到障碍物时,接触开关会有所察觉,通过编程让

4、机器人避开障碍 物。在安装胡须时,需要注意胡须距传感立柱既不能太远也不能太近,太远会导致机器人 碰到障碍物后反应过慢,太近则会使机器人在前方没有障碍物的情况下进行避障操作,影 响小车正常行进。胡须机器人避障程序如下:#include#includeint P1_4state(void) 获取P1_4的状态,右胡须return (P1&0x10)?1:0;int P2_3state(void) 获取P2_3的状态,左胡须return (P2&0x08)?1:0;void Forward(void)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(130

5、0);P1_0=0;delay_nms(20);void Left_Turn(void)int i;for(i=1;i=26;i+)P1_1=1; delay_nus(1300);P1_1=0;P1_0=1; delay_nus(1300);P1_0=0; delay_nms(20);void Right_Turn(void)int i;for(i=1;i=26;i+)P1_1=1; delay_nus(1700);P1_1=0;P1_0=1; delay_nus(1700);P1_0=0; delay_nms(20);void Backward(void)int i;for(i=1;i=65

6、;i+)P1_1=1; delay_nus(1300);P1_1=0;P1_0=1; delay_nus(1700); P1_0=0; delay_nms(20);int main(void)uart_Init();printf(Program Running!n);while(1) if(P1_4state()=0)&(P2_3state()=0)Backward(); / 向后Left_Turn();/ 向左Left_Turn();/ 向左else if(P1_4state()=0)Backward();/ 向后 Left_Turn();/ 向左else if(P2_3state()=0)

7、Backward();/ 向后Right_Turn();/ 向右elseForward();/ 向前任务三:机器人红外线导航任务二触须接触导航是依靠接触变形来探测物体,而本任务是依靠红外线探测机器人 前进路线,然后确定何时有光线从被探测物体反射回来,通过检测反射回来的红外光就可 以确定前方是否有物体。在本次任务中,我们需要使用三极管 9013 ,这是因为C51的10驱动能力较弱,这里我 们加入三极管使其工作在开关状态。三极管是一种控制元件,主要用来控制电流大小,简 单地说,是用小电流去控制大电流。红外导航避障程序如下:#include#include#include#define LeftIR

8、 P1_2 / 左边红外接收连接到 P1_2#define RightIR P3_5 / 右边红外接收连接到 P3_5#define LeftLaunch P1_3 / 左边红外发射连接到 P1_3#define RightLaunch P3_6 / 右边红外发射连接到 P3_6void IRLaunch(unsigned char IR)int counter;if(IR=L)for(counter=0;counter38;counter+) LeftLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_();

9、_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LeftLaunch=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); if(IR=R) for(counter=0;counter38;counter+)/ 右边发射 RightLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _

10、nop_(); _nop_(); _nop_(); _nop_(); RightLaunch=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); void Forward(void)/ 向前行走子程序P1_1=1; delay_nus(1700);P1_1=0;P1_0=1; delay_nus(1300);P1_0=0; delay_nms(20);void Left_Turn(void)/ 左转子程序int i;for( i

11、=1;i=26;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1; delay_nus(1300);P1_0=0; delay_nms(20);void Right_Turn(void)/ 右转子程序int i;for( i=1;i=26;i+)P1_1=1; delay_nus(1700);P1_1=0;P1_0=1; delay_nus(1700);P1_0=0; delay_nms(20);void Backward(void)/ 向后行走子程序int i;for( i=1;i=65;i+)P1_1=1; delay_nus(1300);P1_1=0;P1_

12、0=1; delay_nus(1700);P1_0=0; delay_nms(20);int main(void)int irDetectLeft,irDetectRight; uart_Init();printf(Program Running!n); while(1)IRLaunch(R); / 右边发射 irDetectRight = RightIR;/ 右边接收IRLaunch(L); / 左边发射irDetectLeft = LeftIR;/ 左边接收两边同时接收到红外线if(irDetectLeft=0)&(irDetectRight=0)/ Backward(); Left_Tu

13、rn(); Left_Turn();只有左边接收到红外线else if(irDetectLeft=0)/Backward();Right_Turn();只有右边接收到红外线else if(irDetectRight=0)/Backward();Left_Turn();elseForward();任务四:尾随小车该任务的设计线路与任务三相同,故完成较为简单,试验程序如下:#include#include#include左边红外接收连接到 P1_2右边红外接收连接到 P3_5左边红外发射连接到 P1_3右边红外发射连接到 P3_6#define LeftIR P1_2 / #define Righ

14、tIR P3_5 / #define LeftLaunch P1_3 / #define RightLaunch P3_6 / void IRLaunch(unsigned char IR) int counter;if(IR=L)/ 左边发射for(counter=0;counter38;counter+)LeftLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();LeftLaunch=0;_nop_(); _nop

15、_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); if(IR=R)/ 右边发射 for(counter=0;counter38;counter+)RightLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); RightLaunch=0;_nop_(); _nop_(); _no

16、p_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();int main(void)int pulseLeft,pulseRight;int irDetectLeft,irDetectRight;uart_Init();printf(Program Running!n);doIRLaunch(R); / 右边发射 irDetectRight = RightIR;/ 右边接收 IRLaunch(L); / 左边发射 irDetectLeft = LeftIR;/ 左边接收 if(i

17、rDetectLeft=0)&(irDetectRight=0)/ pulseLeft=1300;pulseRight=1700;else if(irDetectLeft=0)&(irDetectRight=1)/pulseLeft=1700;pulseRight=1700;else if(irDetectLeft=1)&(irDetectRight=0)/pulseLeft=1300;pulseRight=1300;else / 前进pulseLeft=1700;pulseRight=1300;P1_1=1;delay_nus(pulseLeft);P1_1=0;P1_0=1;delay_n

18、us(pulseRight);P1_0=0;delay_nms(20);while(1);任务五:机器人的距离检测向后退右转左转用同样的IR LED探测电路检测距离,高灵敏度的频率可以探测远距离的物体,低灵敏 度的频率可以探测距离较近的物体。这使得距离探测就简单了。选择 5个不同频率,从最低 灵敏度到最高灵敏度进行测试,依赖于探测器不能再检测到物体的红外线频率,就可以推 断物体的大概位置。测试扫描频率程序如下:#include #include #define LeftIRP1_2 / 左边红外接受连接到 P1_2/#define RightIRP3_5 / 右边红外接收连接到 P3_5#de

19、fine LeftLaunchP1_3 / 左边红外发射连接到 P1_3/#define RightLaunch P3_6 / 右边红外发射连接到 P3_6unsigned int time;int leftdistance;/左边的距离/int rightdistance;/右边的距离int distanceLeft, irDetectLeft;/int distanceRight,irDetectRight;unsigned int frequency5=29370,31230,33050,35700,38460;void timer_init(void)IE=0x82;/开总中断EA允许

20、定时器0中断ET0TMOD |= 0X01; / 定时器0工作在模式 1:16位定时器模式time = 256 - (500000/Freq); / 根据频率计算初值void FreqOut(unsigned int Freq)TH0 = 0XFF;/ 高八位设 FFTL0 = time;/ 低八位根据公式计算TR0 = 1;/ 启动定时器delay_nus(800); / 延时TR0 = 0;/ 停止定时器void Timer0_Interrupt(void) interrupt 1 LeftLaunch = LeftLaunch; /RightLaunch= RightLaunch; TH

21、0 = 0XFF;TL0 = time;void Get_lr_Distances()unsigned int count; leftdistance = 0; /rightdistance = 0;for(count = 0;count5;count+) FreqOut(frequencycount); irDetectLeft = LeftIR; / /irDetectRight = RightIR;/printf(f=%dn,time);/ 取反/ 重新设值初始化左边的距离/ 初始化右边的距离左边接收/ 右边接收printf(irDetectLeft = %dn,irDetectLeft

22、); /printf( irDetectRight = %dn ,irDetectRight); if(irDetectLeft = 1)leftdistance+;/if (irDetectRight = 1) /rightdistance+;int main(void)uart_Init(); timer_init(); printf(Progam Running!n);printf(FREQENCY ETECTEDn);while(1)Get_lr_Distances();printf(distanceLeft = %dn,leftdistance);/printf( distanceR

23、ight=%dn,rightdistance);printf( n);delay_nms(1000); 在进行串口调试时,应注意串口的接线位置,安装符合自己电脑的串口调试助手。任务六:寻线搬运机器人 可能是前几个任务完成太轻松的原因,是我们对实训产生了懈怠的想法,但最后的任 务再一次提醒了我需要学习的东西还有很多,永远都不能骄傲自满。经过一天多的调试,在机器人的运行和编程中,出现了以下几方面的问题:一、转弯出现问题。在一些路口中转弯出现了问题。所以提倡用自定义转弯,提高成 功率。二、在运行机器人前要检查螺丝,检查机器人的性能是否良好,以免在运行过程中发 生意外。三、遇到错误时,要耐心,细心检查

24、问题,分析问题,要互相讨论出解决方案。四、电池的电量对小车运行影响极大最好选用质量较好的电池。五、伺服电机的角度没有调好,导致机器人在运行过程中影响程序的运行。六、熟悉自己的机器人,了解一些运行、编程的小技巧。寻线搬运机器人编程如下:#include #include #include#define uint unsigned int#define uchar unsigned charuchar QTIState ;void Time1_init(void)EA = 1;/硬件串口使用定时器1,供AT89S5与P(机通信使用TMOD |= 0x20; /SCON = 0x50; / TH1

25、= 0xFD; /TL1 = 0xFD;TR1 = 1; /TI = 1;定时器1方式2.8位自动重装模式模式1 ,8位数据波特率为 9600起动定时器void Forward(void)/ 向前行走子程序P1_1=1;delay_nus(1700);P1_1=0;P1_0=1; delay_nus(1300);P1_0=0; delay_nms(20);void Pivot_Left(void)/P1_1=1;delay_nus(1500);P1_1=0;P1_0=1; delay_nus(1350);P1_0=0;delay_nms(20);void Pivot_Right(void)/P

26、1_1=1;delay_nus(1650);P1_1=0;P1_0=1;delay_nus(1500);P1_0=0;左转子程序右转子程序delay_nms(20);void Rotate_right(void)P1_1=1;delay_nus(1650);P1_1=0;P1_0=1;delay_nus(1650);P1_0=0;delay_nms(20);void Rotate_Left(void)P1_1=1; delay_nus(1350);P1_1=0;P1_0=1; delay_nus(1350);P1_0=0; delay_nms(20);void Backward(void) /

27、 向后行走子程序P1_1=1; delay_nus(1300);P1_1=0;P1_0=1; delay_nus(1700);P1_0=0; delay_nms(20);void Get_QTI_State(void)QTIState = P2&0x0e ;void Follow_Line(void)Get_QTI_State(); switch(QTIState)case 0x04 : Forward(); break;case 0x06 : Pivot_Right();break; case 0x02 : Rotate_right();break;case 0x0c : Pivot_Lef

28、t(); break;case 0x08 : Rotate_Left();break; /*case 0x0e : Forward(); break;*/default : break;void main(void)int counter;Time1_init();printf(program run ok!); for(counter=0;counter350;counter+)/ Follow_Line(); /*for(counter=0;counter20;counter+)/ Forward();*/for(counter=0;counter33;counter+)/ Pivot_Left();for(counter=0;counter65;counter+)/ Forward();for(counter=0;counter55;counter+)/ Rotate_Left();for(counter=0;counter38;counter+)/

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

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