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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

机器人实训总结.docx

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

2、小车反向运行。经过半小时的摸索,我们的小车终于成形,但当给它录入一个前行程序时,小车竟然莫名其妙的在原地打转,我们仔细查阅了实训指导书,才发现问题所在,原来,每一个新组装的机器人都需要进行调零检测才能保证其运行的准确,调零程序如下:#include#includeint main(void) uart_Init(); printf(The LED connected to P1_0 is blinking!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(13

5、00); 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)

6、int i; for(i=1;i=65;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()

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

8、e#include#define LeftIR 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_()

9、; _nop_(); _nop_(); _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_

10、(); _nop_(); _nop_(); _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_Tu

11、rn(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

12、=65;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) int irDetectLeft,irDetectRight; uart_Init(); printf(Program Running!n); while(1) IRLaunch(R); /右边发射 irDetectRight = RightIR;/右边接收 IRLaunch(L); /左边发射 irDetectLeft = LeftIR;/左边接收 if(irDetectLeft=0)&

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

14、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_(); _nop_(); _nop_();

15、 _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_(); _nop_(); _nop_(

16、); _nop_(); _nop_(); RightLaunch=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); int main(void) int pulseLeft,pulseRight; int irDetectLeft,irDetectRight; uart_Init(); printf(Program Running!n); do IRLaunch(R); /右边发射 irDetectRight = Right

17、IR;/右边接收 IRLaunch(L); /左边发射 irDetectLeft = LeftIR;/左边接收 if(irDetectLeft=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 /前进 pulse

18、Left=1700; pulseRight=1300; P1_1=1; delay_nus(pulseLeft); P1_1=0; P1_0=1; delay_nus(pulseRight); P1_0=0; delay_nms(20); while(1); 任务五:机器人的距离检测用同样的IR LED/探测电路检测距离,高灵敏度的频率可以探测远距离的物体,低灵敏度的频率可以探测距离较近的物体。这使得距离探测就简单了。选择5个不同频率,从最低灵敏度到最高灵敏度进行测试,依赖于探测器不能再检测到物体的红外线频率,就可以推断物体的大概位置。测试扫描频率程序如下:#include #include

19、#define LeftIR P1_2 /左边红外接受连接到P1_2 /#define RightIR P3_5 /右边红外接收连接到P3_5#define LeftLaunch P1_3 /左边红外发射连接到P1_3/#define RightLaunch P3_6 /右边红外发射连接到P3_6unsigned int time;int leftdistance;/左边的距离/int rightdistance;/右边的距离int distanceLeft, irDetectLeft;/int distanceRight,irDetectRight;unsigned int frequenc

20、y5=29370,31230,33050,35700,38460;void timer_init(void) IE=0x82; /开总中断EA,允许定时器0中断ET0 TMOD |= 0X01; /定时器0工作在模式1:16位定时器模式void FreqOut(unsigned int Freq) time = 256 - (500000/Freq); /根据频率计算初值 TH0 = 0XFF; /高八位设FF TL0 = time; /低八位根据公式计算 TR0 = 1; /启动定时器 delay_nus(800); /延时 TR0 = 0; /停止定时器void Timer0_Interr

21、upt(void) interrupt 1 LeftLaunch = LeftLaunch; /取反 /RightLaunch= RightLaunch; TH0 = 0XFF; /重新设值 TL0 = time;void Get_lr_Distances() unsigned int count; leftdistance = 0; /初始化左边的距离 /rightdistance = 0; /初始化右边的距离 for(count = 0;count5;count+) FreqOut(frequencycount); irDetectLeft = LeftIR; /左边接收 /irDetec

22、tRight = RightIR; /右边接收 /printf(f=%dn,time); printf(irDetectLeft = %dn,irDetectLeft); /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 ETECTED

23、n); while(1) Get_lr_Distances(); printf(distanceLeft = %dn,leftdistance); /printf( distanceRight=%dn,rightdistance); printf(-n); delay_nms(1000); 在进行串口调试时,应注意串口的接线位置,安装符合自己电脑的串口调试助手。任务六:寻线搬运机器人可能是前几个任务完成太轻松的原因,是我们对实训产生了懈怠的想法,但最后的任务再一次提醒了我需要学习的东西还有很多,永远都不能骄傲自满。经过一天多的调试,在机器人的运行和编程中,出现了以下几方面的问题:一、转弯出现问

24、题。在一些路口中转弯出现了问题。所以提倡用自定义转弯,提高成功率。二、在运行机器人前要检查螺丝,检查机器人的性能是否良好,以免在运行过程中发生意外。三、遇到错误时,要耐心,细心检查问题,分析问题,要互相讨论出解决方案。四、电池的电量对小车运行影响极大最好选用质量较好的电池。五、伺服电机的角度没有调好,导致机器人在运行过程中影响程序的运行。六、熟悉自己的机器人,了解一些运行、编程的小技巧。寻线搬运机器人编程如下:#include #include #include#define uint unsigned int #define uchar unsigned char uchar QTIStat

25、e ;void Time1_init(void) EA = 1;/硬件串口使用定时器1,供AT89S52与PC机通信使用 TMOD |= 0x20; /定时器1方式2.8位自动重装模式 SCON = 0x50; /模式1,8位数据 TH1 = 0xFD; /波特率为9600 TL1 = 0xFD; TR1 = 1; /起动定时器 TI = 1;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

26、)/左转子程序 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)/右转子程序 P1_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)

27、;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) /向后行走子程序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 : Pivo

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

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