机器人实训总结.docx

上传人:b****7 文档编号:15786907 上传时间:2023-07-07 格式:DOCX 页数:30 大小:26.72KB
下载 相关 举报
机器人实训总结.docx_第1页
第1页 / 共30页
机器人实训总结.docx_第2页
第2页 / 共30页
机器人实训总结.docx_第3页
第3页 / 共30页
机器人实训总结.docx_第4页
第4页 / 共30页
机器人实训总结.docx_第5页
第5页 / 共30页
机器人实训总结.docx_第6页
第6页 / 共30页
机器人实训总结.docx_第7页
第7页 / 共30页
机器人实训总结.docx_第8页
第8页 / 共30页
机器人实训总结.docx_第9页
第9页 / 共30页
机器人实训总结.docx_第10页
第10页 / 共30页
机器人实训总结.docx_第11页
第11页 / 共30页
机器人实训总结.docx_第12页
第12页 / 共30页
机器人实训总结.docx_第13页
第13页 / 共30页
机器人实训总结.docx_第14页
第14页 / 共30页
机器人实训总结.docx_第15页
第15页 / 共30页
机器人实训总结.docx_第16页
第16页 / 共30页
机器人实训总结.docx_第17页
第17页 / 共30页
机器人实训总结.docx_第18页
第18页 / 共30页
机器人实训总结.docx_第19页
第19页 / 共30页
机器人实训总结.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

机器人实训总结.docx

《机器人实训总结.docx》由会员分享,可在线阅读,更多相关《机器人实训总结.docx(30页珍藏版)》请在冰点文库上搜索。

机器人实训总结.docx

机器人实训总结

 

机器人实训总结

 

学院:

专业班级:

姓名学号:

指导教师:

 

2013年7月

 

为期一周的机器人实训转眼就过去了,个人认为这是我上大学以来参加的最有意思的

一次课程设计了,在实训期间,同学们亲自动手组装机器人小车并通过修改调试程序使自

己的小车完成要求的任务,将平时学习的C语言和单片机知识运用到了实际操作中,极大

地调动了我们学习的积极性并提高了动手能力,是我们受益匪浅!

任务一:

组装小车并完成基本调试

 

实训第一天我们的主要任务便是将实训机器人小车按要求组装好,这看似简单的任务

是极其需要耐心与细致的,每一个螺丝都要拧紧,每一个电子元件都要安装于指定位置,

特别要注意左右轮的接线,如果反接将会使小车反向运行。

经过半小时的摸索,我们的小

车终于成形,但当给它录入一个前行程序时,小车竟然莫名其妙的在原地打转,我们仔细

查阅了实训指导书,才发现问题所在,原来,每一个新组装的机器人都需要进行调零检测

才能保证其运行的准确,调零程序如下:

#include

#include

intmain(void)

{

uart_Init();

printf("TheLEDconnectedtoP1_0isblinking!

\n");

while

(1);

{

P1_0=1;

delay_nus(1500);

P1_0=0;

delay_nus(20000);

}

}

 

将程序录入小车并运行,旋转车轮旁的旋钮直至车轮停转便达到了调零的目的。

接下

来,我们便要完成实训要求的第一个程序:

控制小车LED灯的亮灭。

通过参考指导书的已

 

有程序,我们比较顺利的完成了该任务,任务程序如下:

(在试验中需要注意LED灯的正

负极)

#include

#include

intmain(void)

{

uart_Init();

printf("TheLEDconnectedtoP1_0isblinking!

\n");

while

(1)

{

P1_0=0;

P1_1=1;

delay_nms(500);

P1_0=1;

P1_1=0;

delay_nms(500);

}

}

任务二:

机器人触觉导航

 

该任务要求机器人碰到障碍物时,接触开关会有所察觉,通过编程让机器人避开障碍

物。

在安装胡须时,需要注意胡须距传感立柱既不能太远也不能太近,太远会导致机器人

碰到障碍物后反应过慢,太近则会使机器人在前方没有障碍物的情况下进行避障操作,影

响小车正常行进。

胡须机器人避障程序如下:

#include

#include

intP1_4state(void)//获取P1_4的状态,右胡须

{

return(P1&0x10)?

1:

0;

}

intP2_3state(void)//获取P2_3的状态,左胡须

{

return(P2&0x08)?

1:

0;

}

voidForward(void)

{

P1_1=1;

delay_nus(1700);

P1_1=0;

P1_0=1;

delay_nus(1300);

P1_0=0;

 

delay_nms(20);

}

voidLeft_Turn(void)

{

inti;

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);

}

}

voidRight_Turn(void)

{

inti;

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);

}

}

voidBackward(void)

{

inti;

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);

}

}

 

intmain(void)

{

uart_Init();

printf("ProgramRunning!

\n");

 

while

(1)

{

if((P1_4state()==0)&&(P2_3state()==0))

{

Backward();//

Left_Turn();//

Left_Turn();//

向后

向左

向左

}

elseif(P1_4state()==0)

{

Backward();//向后

Left_Turn();//向左

}

elseif(P2_3state()==0)

{

Backward();//向后

Right_Turn();//向右

}

else

Forward();//向前

}

}

任务三:

机器人红外线导航

 

任务二触须接触导航是依靠接触变形来探测物体,而本任务是依靠红外线探测机器人

前进路线,然后确定何时有光线从被探测物体反射回来,通过检测反射回来的红外光就可

以确定前方是否有物体。

在本次任务中,我们需要使用三极管9013,这是因为C51的IO驱动能力较弱,这里我

们加入三极管使其工作在开关状态。

三极管是一种控制元件,主要用来控制电流大小,简

单地说,是用小电流去控制大电流。

红外导航避障程序如下:

#include

#include

#include

 

#defineLeftIRP1_2//左边红外接收连接到P1_2

#defineRightIRP3_5//右边红外接收连接到P3_5

#defineLeftLaunchP1_3//左边红外发射连接到P1_3

 

#defineRightLaunchP3_6//右边红外发射连接到P3_6

 

voidIRLaunch(unsignedcharIR)

{

intcounter;

if(IR=='L')

for(counter=0;counter<38;counter++)

{

LeftLaunch=1;

_nop_();_nop_();_nop_();_nop_();_nop_();_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;counter<38;counter++)//右边发射

{

RightLaunch=1;

_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

RightLaunch=0;

_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

}

}

voidForward(void)//向前行走子程序

{

P1_1=1;

delay_nus(1700);

P1_1=0;

P1_0=1;

delay_nus(1300);

P1_0=0;

delay_nms(20);

}

voidLeft_Turn(void)//左转子程序

{

inti;

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);

}

}

voidRight_Turn(void)//右转子程序

{

inti;

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);

}

}

voidBackward(void)//向后行走子程序

{

inti;

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);

}

}

intmain(void)

{

intirDetectLeft,irDetectRight;

uart_Init();

printf("ProgramRunning!

\n");

while

(1)

{

IRLaunch('R');//右边发射

irDetectRight=RightIR;//右边接收

IRLaunch('L');//左边发射

irDetectLeft=LeftIR;//左边接收

if((irDetectLeft==0)&&(irDetectRight==0))//

 

两边同时接收到红外线

 

{

Backward();

Left_Turn();

Left_Turn();

}

elseif(irDetectLeft==0)//

 

只有左边接收到红外线

{

Backward();

Right_Turn();

}

elseif(irDetectRight==0)//

只有右边接收到红外线

{

Backward();

Left_Turn();

}

else

Forward();

}

}

任务四:

尾随小车

 

该任务的设计线路与任务三相同,故完成较为简单,试验程序如下:

#include

#include

#include

 

#defineLeftIR

P1_2

//

左边红外接收连接到P1_2

#defineRightIR

P3_5

//

右边红外接收连接到P3_5

#defineLeftLaunchP1_3

//

左边红外发射连接到P1_3

#defineRightLaunchP3_6

//

右边红外发射连接到P3_6

 

voidIRLaunch(unsignedcharIR)

{

intcounter;

if(IR=='L')//左边发射

for(counter=0;counter<38;counter++)

{

LeftLaunch=1;

_nop_();_nop_();_nop_();_nop_();_nop_();_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;counter<38;counter++)

{

RightLaunch=1;

_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();RightLaunch=0;

_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

}

}

intmain(void)

{

intpulseLeft,pulseRight;

intirDetectLeft,irDetectRight;

uart_Init();

printf("ProgramRunning!

\n");

do

{

IRLaunch('R');//右边发射

irDetectRight=RightIR;//右边接收

IRLaunch('L');//左边发射

irDetectLeft=LeftIR;//左边接收

if((irDetectLeft==0)&&(irDetectRight==0))//

{

 

向后退

pulseLeft=1300;

pulseRight=1700;

}

elseif((irDetectLeft==0)&&(irDetectRight==1))//右转

{

pulseLeft=1700;

pulseRight=1700;

}

elseif((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_nus(pulseRight);

P1_0=0;

delay_nms(20);

}

while

(1);

}

任务五:

机器人的距离检测

 

用同样的IRLED/探测电路检测距离,高灵敏度的频率可以探测远距离的物体,低灵

敏度的频率可以探测距离较近的物体。

这使得距离探测就简单了。

选择5个不同频率,从

最低灵敏度到最高灵敏度进行测试,依赖于探测器不能再检测到物体的红外线频率,就可

以推断物体的大概位置。

测试扫描频率程序如下:

#include

#include

#defineLeftIR

P1_2

//左边红外接受连接到P1_2

//#defineRightIR

P3_5

//右边红外接收连接到P3_5

#defineLeftLaunch

P1_3

//左边红外发射连接到P1_3

//#defineRightLaunchP3_6

//右边红外发射连接到P3_6

unsignedinttime;

intleftdistance;//

左边的距离

//intrightdistance;//

右边的距离

intdistanceLeft,irDetectLeft;

//intdistanceRight,irDetectRight;

unsignedintfrequency[5]={29370,31230,33050,35700,38460};

voidtimer_init(void)

{

IE=0x82;

//开总中断EA,允许定时器0中断ET0

TMOD|=0X01;

//定时器0工作在模式1:

16位定时器模式

}

 

voidFreqOut(unsignedintFreq)

{

 

time=256-(500000/Freq);//

 

根据频率计算初值

TH0=0XFF;

//高八位设FF

TL0=time;

//低八位根据公式计算

TR0=1;

//启动定时器

delay_nus(800);

//延时

TR0=0;

//停止定时器

}

voidTimer0_Interrupt(void)interrupt1

{

LeftLaunch=~LeftLaunch;

//取反

//RightLaunch=~RightLaunch;

TH0=0XFF;

//重新设值

TL0=time;

}

voidGet_lr_Distances()

{

unsignedintcount;

leftdistance=0;//

//rightdistance=0;

for(count=0;count<5;count++)

{

FreqOut(frequency[count]);

irDetectLeft=LeftIR;//

//irDetectRight=RightIR;

 

初始化左边的距离

//初始化右边的距离

 

左边接收

//右边接收

//printf("f=%d\n",time);

printf("irDetectLeft=%d\n",irDetectLeft);

//printf("irDetectRight=%d\n",irDetectRight);

if(irDetectLeft==1)

leftdistance++;

//if(irDetectRight==1)

 

//rightdistance++;

}

}

intmain(void)

{

uart_Init();

timer_init();

printf("ProgamRunning!

\n");

printf("FREQENCYETECTED\n");

while

(1)

{

Get_lr_Distances();

printf("distanceLeft=%d\n",leftdistance);

//printf("distanceRight=%d\n",rightdistance);

printf("-----------------\n");

delay_nms(1000);

}

}

在进行串口调试时,应注意串口的接线位置,安装符合自己电脑的串口调试助手。

任务六:

寻线搬运机器人

 

可能是前几个任务完成太轻松的原因,是我们对实训产生了懈怠的想法,但最后的任

务再一次提醒了我需要学习的东西还有很多,永远都不能骄傲自满。

经过一天多的调试,在机器人的运行和编程中,出现了以下几方面的问题:

一、转弯出现问题。

在一些路口中转弯出现了问题。

所以提倡用自定义转弯,提高成

功率。

二、在运行机器人前要检查螺丝,检查机器人的性能是否良好,以免在运行过程中发

生意外。

三、遇到错误时,要耐心,细心检查问题,分析问题,要互相讨论出解决方案。

四、电池的电量对小车运行影响极大最好选用质量较好的电池。

五、伺服电机的角度没有调好,导致机器人在运行过程中影响程序的运行。

 

六、熟悉自己的机器人,了解一些运行、编程的小技巧。

寻线搬运机器人编程如下:

#include

#include

#include

 

#defineuintunsignedint

#defineucharunsignedchar

ucharQTIState;

voidTime1_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;

}

voidForward(void)//向前行走子程序

{

P1_1=1;

delay_nus(1700);

P1_1=0;

P1_0=1;

delay_nus(1300);

P1_0=0;

delay_nms(20);

}

voidPivot_Left(void)//左转子程序

{

P1_1=1;

delay_nus(1500);

P1_1=0;

P1_0=1;

delay_nus(1350);

P1_0=0;

delay_nms(20);

}

voidPivot_Right(void)//右转子程序

{

P1_1=1;

delay_nus(1650);

 

P1_1=0;

P1_0=1;

delay_nus(1500);

P1_0=0;

delay_nms(20);

}

voidRotate_right(void)

{

P1_1=1;

delay_nus(1650);

P1_1=0;

P1_0=1;

delay_nus(1650);

P1_0=0;

delay_nms(20);

}

voidRotate_Left(void)

{

P1_1=1;

delay_nus(1350);

P1_1=0;

P1_0=1;

delay_nus(1350);

P1_0=0;

delay_nms(20);

}

voidBackward(void)//向后行走子程序

{

P1_1=1;

delay_nus(1300);

P1_1=0;

P1_0=1;

delay_nus(1700);

P1_0=0;

delay_nms(20);

}

voidGet_QTI_State(void)

{

QTIState=P2&0x0e;

}

voidFollow_Line(void)

{

Get_QTI_State();

switch(QTIState)

{

 

case0x04:

Forward();

break;

case0x06:

Pivot_Right();

break;

case0x02:

Rotate_right();

break;

case0x0c:

Pivot_Left();

break;

case0x08:

Rotate_Left();

break;

/*case0x0e:

Forward();

break;*/

default:

break;

}

 

}

voidmain(void)

{intcounter;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2