中国教育机器人大赛智能搬运比赛演示程序说明.docx

上传人:b****5 文档编号:8480354 上传时间:2023-01-31 格式:DOCX 页数:30 大小:633.71KB
下载 相关 举报
中国教育机器人大赛智能搬运比赛演示程序说明.docx_第1页
第1页 / 共30页
中国教育机器人大赛智能搬运比赛演示程序说明.docx_第2页
第2页 / 共30页
中国教育机器人大赛智能搬运比赛演示程序说明.docx_第3页
第3页 / 共30页
中国教育机器人大赛智能搬运比赛演示程序说明.docx_第4页
第4页 / 共30页
中国教育机器人大赛智能搬运比赛演示程序说明.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

中国教育机器人大赛智能搬运比赛演示程序说明.docx

《中国教育机器人大赛智能搬运比赛演示程序说明.docx》由会员分享,可在线阅读,更多相关《中国教育机器人大赛智能搬运比赛演示程序说明.docx(30页珍藏版)》请在冰豆网上搜索。

中国教育机器人大赛智能搬运比赛演示程序说明.docx

中国教育机器人大赛智能搬运比赛演示程序说明

 

2013中国教育机器人大赛

智能搬运竞赛演示程序说明

 

深圳市中科鸥鹏智能科技有限公司

2013年7月

目录

第一章智能搬运比赛简介3

1.1比赛任务介绍3

第二章组装智能搬运机器人4

2.1智能搬运机器人零件4

2.2智能搬运机器人安装说明4

第三章超声波传感器测试说明6

3.1超声波传感器技术参数介绍6

3.2超声波测试程序7

第四章QTI线跟踪传感器测试说明9

4.1QTI传感器技术参数介绍9

4.2QTI传感器测试程序9

第五章智能搬运算法说明及程序10

5.1智能搬运算法说明10

5.2智能搬运程序11

 

第一章智能搬运比赛简介

智能搬运是“中国教育机器人比赛”的一个比赛项目,智能搬运比赛是基于8位单片机的小型机器人比赛项目。

在比赛场地里移动,并将不同颜色的色块分类搬运到对应的位置。

比赛的记分根据机器人搬运物体安置位置的精度和完成任务时间来决定分值的高低。

该比赛模拟了工业自动化过程中自动化物流系统的实际工作过程,使参赛队员在实践中了解自动化物流系统的制作过程。

1.1比赛任务介绍

图1.1智能搬运场地图

如图1.1所示绿色区域为智能搬运场地的出发区。

机器人从出发区出发,到达物料储存区后,分拣其赛前1小时抽签决定好的任务,即先从5个预知颜色色块(黄、白、红、黑、蓝)按照顺序抽取4个颜色色块分别依次放到A,B,D,E位置,然后将剩下的1个色块通过抽签放到F、G、H和I中的一个位置。

在1小时内修改和调整程序,控制机器人运动,以便将5个颜色色块准确地搬运到对应的5个颜色中心区域内,最后回到出发区。

第二章组装智能搬运机器人

2.1智能搬运机器人零件

⏹宝贝车车体一套

⏹搬运手爪一个

⏹超声波传感器一个

⏹QTI线跟踪套件四个

⏹C51+AVR教学板一个

⏹导线和连接线若干

⏹螺钉、螺母、铜柱和固定架若干

⏹5-8V电源一个

以下为部分智能搬运机器人零件的实物图。

图2.1宝贝车车体图图2.2搬运手爪图图2.3C51+AVR教学板图

图2.4QTI线跟踪套件图图2.5超声波传感器图

2.2智能搬运机器人安装说明

参照《基础机器人制作与编程》文档第29至32页的要求组装宝贝车和C51+AVR教学板(注:

该文档的宝贝车上装BASICStamp微控制器,将BASICStamp微控制器换成C51+AVR教学板即可,安装要求教学板上的面包板在车体前方。

)。

以下用表格描述各传感器与教学板的电路连接方式。

表2.1电机、QTI线跟踪套件、超声波传感器与C51教学板的电路连接

设备名称

设备端口

C51教学板端口

右电机

白线

P10

红线

Vin

黑线

GND

左电机

白线

P11

红线

Vin

黑线

GND

QTI1

SIG

P00

QTI2

SIG

P01

QTI3

SIG

P02

QTI4

SIG

P03

超声波传感器

Trlg

P20

Echo

P21

VCC

5V

GND

GND

表格补充说明,以宝贝车的车体前方为正方向,则对应的左右两边为左右电机,如图2.6所示。

4个QTI线跟踪传感器的命名顺序是从右边第一个开始为QTI1,第二个为QTI2,第三个为QTI3,第四个为QTI4。

图2.6智能小车左右电机标明图

按照上面描述的安装方法完成智能小车安装,安装完成的小车效果图,如图2.7、图2.8、图2.9所示。

图2.7智能小车安装效果俯视图图2.8智能小车安装效果正面图

图2.9智能小车安装效果小车下方图

第三章超声波传感器测试说明

3.1超声波传感器技术参数介绍

DM-S28018-B超声波提供了精确的、非接触式的距离测量,测量范围从2cm到5m,它非常方便的与单片机连接,只需要两个IO口就可以控制。

(1)使用方法为:

a)采用IO触发测距,给TRIG至少10us的高电平信号。

b)模块自动发送8个40KHz的方波,自动检测是否有信号返回。

c)有信号通过ECHO返回,ECHO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。

(2)产品特性:

a)使用电压:

DC5V;

b)静态电流:

小于2mA;

c)电平输出:

高电平VCC>0.2V,低电平<0.2V;

d)感应角度:

不大于15度;

e)探测距离:

0.02m-5m;

f)探测精度:

3mm。

(3)电气参数:

a)工作电压:

DC5V;

b)工作电流:

10mA;

c)工作频率:

40Hz;

d)最远射程:

5m;

e)最近射程:

2cm;

f)输入触发信号:

10uS的TTL脉冲;

g)输出回响信号:

输出TTL电平信号,与射程成比例;

h)规格尺寸:

43*20*15mm。

(4)管脚定义

表3.1管脚定义

引脚

引脚说明

引脚

引脚说明

VCC

电压+5V

out

空脚

trig

触发信号端

GND

GND

Echo

接收端

(5)模块时序图

图3.1模块时序图

(6)使用时注意事项

测量距离是注意事项:

a)在测量距离超过3.3m时,测量误差会增大,可能使得测量距离不是准确等。

b)如果超声波传感器与障碍物的倾角大雨45度使得没有接受信号等。

c)测量物体大小,可能无法测量真实值。

环境温度带来的影响:

如果考虑较高的精度,就不能忽略温度的影响,下面将给出具体计算超声波传输速度公式。

(式1)

3.2超声波测试程序

假设测试程序的定时器计数值(high+low),则该值除于58就是转换为cm为单位的测量距离。

超声波传感器和C51教学板的连接方式与表2.1相同。

#include

#include

#include

#include

#defineTrigLP2_0//左超声波触发信号

#defineEchoLP2_1//左超声波echo引脚信号

#defineucharunsignedchar

#defineuintunsignedint

uchartimer_cnt=0;//记录进定时器中断次数

uintsonar_used_time=0;

//定时器初始化

voidInitTimer(void)

{

TMOD|=0x01;

TH0=0x0;

TL0=0x0;

EA=1;

ET0=1;

TR0=0;

}

//定时器0溢出中断

voidInterrupt(void)interrupt1

{

TR0=0;

}

//测距函数

//返回值:

返回测量得的距离值

uintGetSonarDis(void)

{

uintdis=0;

uinthigh,low;

TrigL=0;EchoL=0;//各I/O口置低

TrigL=1;//trig置高发出10us的高电平信号

delay_nus(25);

TrigL=0;

while(EchoL==0);

TR0=1;

//开启定时器开始计时

while(EchoL==1&&TR0==1);//等待echo置低

TR0=0;

high=TH0*256;

low=TL0;

dis=(high+low)/58;

returndis;

}

voidmain()

{

uintm;

uart_Init();

while

(1)

{

InitTimer();//定时器初始化

m=GetSonarDis();

printf("ultrasonic=%d\n",m);

delay_nms(1000);

}

}

第四章QTI线跟踪传感器测试说明

4.1QTI传感器技术参数介绍

(1)QTI边线检测传感器性能参数:

Ø工作温度:

-40℃~85℃

Ø参考电压:

5V

Ø连续电流:

50mA

Ø功耗:

100mW

Ø最佳距离:

10mm

Ø最佳距离最大散射角度65度

Ø探测到黑色物体输出高电平,探测到白色物体输出低电平。

Ø响应时间:

(V=5v,R=100,I=5mA)

⏹上升沿时间10us

⏹下降沿时间50us

 

图4.1引脚示意图

4.2QTI传感器测试程序

4个QTI传感器的连线方式与表2.1一样。

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

intqtis;

voidmain()

{

uart_Init();

while

(1)

{

qtis=P0&0x0f;

switch(qtis)

{case0:

printf("QTI:

0000\n");break;

case1:

printf("QTI:

0001\n");break;

case2:

printf("QTI:

0010\n");break;

case3:

printf("QTI:

0011\n");break;

case4:

printf("QTI:

0100\n");break;

case5:

printf("QTI:

0101\n");break;

case6:

printf("QTI:

0110\n");break;

case7:

printf("QTI:

0111\n");break;

case8:

printf("QTI:

1000\n");break;

case9:

printf("QTI:

1001\n");break;

case10:

printf("QTI:

1010\n");break;

case11:

printf("QTI:

1011\n");break;

case12:

printf("QTI:

1100\n");break;

case13:

printf("QTI:

1101\n");break;

case14:

printf("QTI:

1110\n");break;

case15:

printf("QTI:

1111\n");break;

}

delay_nms(500);

}

}

第五章智能搬运算法说明及程序

5.1智能搬运算法说明

首先把A、B、D、E位置色块搬运到起始区和各转弯线交叉口的连线上。

再回到转弯口,利用超声波搜索F、G、H、I位置最后一块色块,搜索到色块将色块搬运到对应的颜色中心区域内。

最后再回去把起始去和各转弯交叉口的连线上的色块分别搬运到对应的颜色中心区域内。

如图5.1、图5.2、图5.3、图5.4、图5.5、图5.6所示是用图形来描述以上描述的智能搬运算法。

图5.1机器人在起始去图5.2机器人将色块统一放在黑线上

图5.3把搜索到色块并取下色块图5.4把色块搬运到指定颜色中心区域内

图5.5把黑线上的色块分别搬运到图5.6机器人回到起始位置搬运完成

指定颜色中心区域内

5.2智能搬运程序

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineTrigLP2_0//左超声波触发信号

#defineEchoLP2_1//左超声波echo引脚信号

intqtis;

sbitright_moter=P1^0;//定义右电机端口

sbitleft_moter=P1^1;//定义左电机端口

voidturn_right_90(void);

voidturn_left_90(void);

voidturn_right_120(void);

voidturn_left_120(void);

voidturn_right_45(void);

voidturn_left_45(void);//左转45度

voidturn_right_150(void);

voidturn_left_150(void);

voidturn_back();//后转

voidturn(uintleft,uintright);//微转动

voidFast_forward(uchara);//快速前进

voidstop(void);

voidback(uchara);

voidfast_turn_right_90();

voidturn_r(uintleft,uintright);//转动

uchartimer_cnt=0;//记录进定时器中断次数

uintsonar_used_time=0;

/***********************************************************************/

//定时器初始化

/***********************************************************************/

voidInitTimer(void)

{

TMOD|=0x01;

TH0=0x0;

TL0=0x0;

EA=1;

ET0=1;

TR0=0;

}

/*

定时器0溢出中断

*/

voidInterrupt(void)interrupt1

{

TR0=0;

}

/***********************************************************************/

//测距函数

//返回值:

返回测量得的距离值

/***********************************************************************/

uintGetSonarDis(void)

{

uintdis=0;

uinthigh,low;

TrigL=0;EchoL=0;//各I/O口置低

TrigL=1;//trig置高发出10us的高电平信号

delay_nus(25);

TrigL=0;

while(EchoL==0);

TR0=1;

//开启定时器开始计时

while(EchoL==1&&TR0==1);//等待echo置低

TR0=0;

high=TH0*256;

low=TL0;

dis=(high+low)/58;

returndis;

}

voidmain()

{

ucharrecord=0,j=0,ji_shu=0,angle=0;//变量record指挥小车转弯情况,j,ji_shu用于计数,angle用于记录角度。

charii=0,target[5]={1,2,3,4,5};//变量ii用于计数,数组target[5]用于记录

uintm,i;//变量m,i用于计数。

delay_nms(2000);//延时2秒

Fast_forward(30);//前进一小段距离

while

(1)

{

P0=0x0f;//检测黑线

qtis=P0&0x0f;//读取4个巡线传感器的值

Fast_forward

(1);//前进一小步

switch(qtis)//按照4个巡线传感器的值执行移动指令

{

case1:

turn(1550,1550);break;//大幅向右转

case2:

case3:

turn(1550,1500);break;//小幅向右转

case8:

turn(1450,1450);break;//大幅向左转

case4:

case12:

turn(1500,1450);break;//小幅向左转

case5:

case6:

case7:

case10:

case13:

case14:

case15:

Fast_forward

(2);break;//向前2小步

}

if(qtis==15)//4个巡线传感器都检测的黑线

{

record++;//指挥变量自增

switch(record)//按照变量的值执行移动命令

{

case1:

turn_left_90();break;//左转90度

case2:

turn_right_90();break;//右转90度

case3:

Fast_forward(20);turn_left_45();break;//前进20步,再左转45度

case4:

Fast_forward(30);turn_right_45();Fast_forward(15);break;//前进30步,再右转45度,再前进15步。

case5:

Fast_forward(20);turn_right_45();break;//前进20步,再右转45度。

case6:

Fast_forward(30);turn_left_45();Fast_forward(13);break;//前进20步,再左转45度,再前进13步。

case7:

turn_right_90();break;//右转90度

case8:

turn_left_90();break;//左转90度

}

ii=0;//将ii变量清零

}

if(record%2==0&&record>0)//指挥变量值为偶数,并且非零时才执行以下语句。

{

ii++;

if(ii>62-j*6)//小车把物块安放的位置做一定的间隔。

{

back(32);

turn_back();

ii=0;j=j+2;

}

}

if(record%2==1)//小车检测到白点,取下物块后转

{

if(qtis==0)

ii++;

if(ii>4&&qtis==0)

{

turn_back();

ii=0;

}

}

if(record==9)//第九次4个巡线传感器都检测到黑线,则前进26步,再右转90度。

{

Fast_forward(26);

fast_turn_right_90();

stop();break;

}

}

//delay_nms(1000);

for(i=0;i<500;i++)//利用超声波搜索第五个物块

{

InitTimer();//定时器初始化

m=GetSonarDis();//启动超声波

//printf("m=:

%d\n",m);

delay_nms(100);

turn_r(1510,1510);//微转动

if(m>13&&m<16)

{

if(ji_shu>11)//有11次检测到物块,则前进80步,取下物块。

{

stop();

Fast_forward(80);

break;

}

ji_shu++;

}

}

//将物块所在的位置分类

if(i>10&&i<75)angle=30;//物块在30度位置

if(i>75&&i<130)angle=60;//物块在60度位置

if(i>160&&i<215)angle=120;//物块在120度位置

if(i>215&&i<270)angle=150;//物块在150度位置

switch(angle)//根据物块所在的位置执行相应的指令

{

case30:

turn_right_150();break;

case60:

turn_right_120();break;

case120:

turn_left_120();break;

case160:

turn_left_150();break;

}

while

(1)

{

P0=0x0f;

qtis=P0&0x0f;

Fast_forward

(2);//向前3步

if(qtis>0)//根据4个巡线传感器的检测结果执行相应的指令。

{

switch(angle)

{

case30:

case60:

turn_right_90();break;

case120:

case160:

turn_left_90();break;

}

break;

}

}

ii=0;i=0;m=50;j=0;//初始化几个变量的值

while

(1)

{

if(ii%2==0&&ii>0&&j%2==0)

{

InitTimer();//定时器初始化

m=GetSonarDis();//启动超声波传感器

}

P0=0x0f;//启动4个巡线传感器

qtis=P0&0x0f;//读取4个巡线传感器的值

i++;//计算器i自增

switch(qtis)//根据4个巡线传感器的值,执行相应的指令。

{

case1:

case2:

case3:

turn(1550,1500);break;//小幅向右转

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

当前位置:首页 > 求职职场 > 自我管理与提升

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

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