机器人实训总结
学 院:   
专业班级:   
姓名学号:    -
指导教师:   
20137
为期一周的机器人实训转眼就过去了,个人认为这是我上大学以来参加的最有意思的 一次课程设计了,在实训期间,同学们亲自动手组装机器人小车并通过修改调试程序使自 己的小车完成要求的任务,将平时学习的    C语言和单片机知识运用到了实际操作中,极大
地调动了我们学习的积极性并提高了动手能力,是我们受益匪浅!
任务一:组装小车并完成基本调试
实训第一天我们的主要任务便是将实训机器人小车按要求组装好,这看似简单的任务 是极其需要耐心与细致的,每一个螺丝都要拧紧,每一个电子元件都要安装于指定位置, 特别要注意左右轮的接线,如果反接将会使小车反向运行。经过半小时的摸索,我们的小 车终于成形,但当给它录入一个前行程序时,小车竟然莫名其妙的在原地打转,我们仔细 查阅了实训指导书,才发现问题所在,原来,每一个新组装的机器人都需要进行调零检测 才能保证其运行的准确,调零程序如下:
#in clude<BoeBot.h>
#in clude<uart.h>
int 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);
} _
}
将程序录入小车并运行,旋转车轮旁的旋钮直至车轮停转便达到了调零的目的。接下 来,我们便要完成实训要求的第一个程序:控制小车    LED灯的亮灭。通过参考指导书的已
有程序,我们比较顺利的完成了该任务,任务程序如下:    (在试验中需要注意LED灯的正负
极)
#include<BoeBot.h>
#include<uart.h>
int 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);
}
}
任务二:机器人触觉导航
该任务要求机器人碰到障碍物时,接触开关会有所察觉,通过编程让机器人避开障碍 物。在安装胡须时,需要注意胡须距传感立柱既不能太远也不能太近,太远会导致机器人 碰到障碍物后反应过慢,太近则会使机器人在前方没有障碍物的情况下进行避障操作,影 响小车正常
行进。胡须机器人避障程序如下:
#include<BoeBot.h>
#include<uart.h>
int 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(1300);
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);
}
include意思}
void Backward(void)
{
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();// 向左
}
else if(P2_3state()==0)
{
Backward();// 向后
Right_Turn();// 向右
}
else
Forward();// 向前
}
}
任务三:机器人红外线导航
任务二触须接触导航是依靠接触变形来探测物体,而本任务是依靠红外线探测机器人 前进路线,然后确定何时有光线从被探测物体反射回来,通过检测反射回来的红外光就可 以确定前方是否有物体。
在本次任务中,我们需要使用三极管 9013 ,这是因为C5110驱动能力较弱,这里我 们加入
三极管使其工作在开关状态。三极管是一种控制元件,主要用来控制电流大小,简 单地说,是用小电流去控制大电流。红外导航避障程序如下:
#include<BoeBot.h>
#include<uart.h>
#include<intrins.h>
#define LeftIR P1_2 //    左边红外接收连接到 P1_2
#define RightIR    P3_5 // 右边红外接收连接到 P3_5
#define LeftLaunch    P1_3 // 左边红外发射连接到 P1_3
#define RightLaunch    P3_6 // 右边红外发射连接到 P3_6
void IRLaunch(unsigned char IR)
{
int counter;
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_(); }
}
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=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_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_Turn(); Left_Turn();
}
只有左边接收到红外线
else if(irDetectLeft==0)//