简易射门机器人论文.docx
- 文档编号:3904215
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:33
- 大小:869.01KB
简易射门机器人论文.docx
《简易射门机器人论文.docx》由会员分享,可在线阅读,更多相关《简易射门机器人论文.docx(33页珍藏版)》请在冰点文库上搜索。
简易射门机器人论文
引言1
1、系统方案设计、比较与论证1
1.1、寻迹线探测模块1
1.2、电动机及其驱动模块的选择2
1.3、信息显示模块2
1.4、电源选择2
2、系统总体设计方案3
3、系统硬件电路设计3
3.1、单片机最小系统3
3.2、寻迹线探测电路设计4
3.3、声控检测电路设计4
3.4、光电检测乒乓球位置电路设计4
3.5、电动机驱动电路设计5
4、系统软件设计5
4.1、系统流程图5
5系统测试5
5.1测试条件5
5.2测试参数5
参考文献6
简易射门机器人
摘要:
本设计采用了STC89C52单片机作为电动车的检测和控制核心,通过光电探头检测路面黑色寻迹线,使小车按预定轨道行驶,由光电传感器检测乒乓球位置,并进行射门。
通过键盘控制和LCD12864液晶显示电路对小车的运动轨迹进行记录和显示切换,最后通过软件设计,实现了小车按轨道行驶、射门等功能。
关键词:
STC89C52寻迹线射门
Abstract:
Thisdesignadoptsthestc89c52monolithicintegratedcircuitsandcontrolasacore,Byphotovoltaicprobestotestfortheblacktrace,Madethecarwasmovinginapredeterminedtrack,Thephotoelectricsensorstodetectthetabletennisposition,Andshoot。
Throughkeyboardcontrolandlcd12864lcddisplaycircuittothecarmovesonrecordanddisplayswitch,Lastthroughthesoftwaredesign,Thecarrunninginorbit,Goalandfunction。
keyword:
STC89C52FortraceShoot
引言
为使机器人能在设定的场地范围内行动,能在指定区域内寻找到乒乓球,并进行射门动作,按题目要求准确运行,故采用了单片机STC89C52最小系统作为电动车的检测和控制系统。
通过光电探头检测路面黑色寻迹线,使小车按预定轨道行驶。
1、系统方案设计、比较与论证
根据题目要求分以下部分进行方案设计与论证
1.1、寻迹线探测模块
探测路面黑色寻迹线的原理:
光线照射到路面并反射,由于黑线和白纸的反射系数不同,可根据接受到反射光强弱由传感器产生高低电平并最终通过单片机判断是否到达黑线偏离跑道。
方案一:
由可见光发光二极管与光敏二极管组成的发射-接收电路。
该方案成本较低,易于制作,但其缺点在于周围环境光源会对光敏二极管的工作产生很大干扰,一旦外界光亮条件改变,很可能造成误判和漏判;如果采用超高亮发光管和高灵敏度光敏管可以降低一定的干扰。
图1光电检测电路
方案二:
自制红外探头电路。
此种方法简单,价格便宜,灵敏度可调,但易受到周围环境影响,特别是较强光照对检测信号的影响,会造成系统不稳定。
再加上时间有限,制作分立电路较繁琐。
基于上述考虑,为了提高系统信号采集检测的精度,我们采用方案一。
1.2、电动机及其驱动模块的选择
根据题目中小车行驶全程的时间要求,可知小车的行驶速度很慢,普通的电机很难满足此速度要求,而伺服电机可以满足此要求,伺采用脉冲控制比较容易实现起跑停,并且其具有很大的转动力矩,不会在倾斜面出现堵转情况。
故我们采用伺服电机。
在选用驱动模块方面由以下两种方案:
采用专用驱动芯片。
该芯片集成度高,占用空间小,主要应用于电机调速场合。
采用分立三极管驱动电路。
经分析此机器人小车所要求的功能比较简单,不需复杂的调速,采用脉冲控制。
故我们最后决定用后方案。
1.3、信息显示模块
采用LED,缺点是占用单片机接口太多,显示信息量少,需要循环显示,占用太多程序资源。
采用LCD12864,占用11个单片机接口,同时显示信息量大,灵活多变显示多种信息。
因此,我们拟采用后者。
1.4、电源选择
方案一:
所有器件采用单一电源(6节五号电池)。
这样供电比较简单,但是由于电动机启动瞬间电流很大,会造成电压不稳、有毛刺等干扰,严重时可能会造成单片机系统掉电,使之不能完成预定行程。
方案二:
单电源两路供电。
电动机驱动电源采用6节五号电池无稳压供电,单片机及其外围电路电源采用5V稳压电源供电,这样两路互不影响。
根据以上综合考虑,故拟采用方案二。
经过一番仔细的论证比较,我们最终确定的系统详细方框图如下:
图2系统方案设计图
2、系统总体设计方案
根据题目的基本要求,设计任务主要完成机器人在规定时间内按规定路径稳定行驶,并能进行射门,同时对行程中的有关数据进行处理显示。
整个系统的模块框图如图1所示。
图3系统总体设计框图
该系统主要由电动机驱动模块、寻迹线探测模块、红外避障碍、信息显示模块几个部分组成。
由89C52单片机为系统控制的CPU对小车寻迹、乒乓球检测和LED显示进行控制,使小车在规定的时间内完成规定的路线,并检测乒乓球送入球门,完成题目的要求。
3、系统硬件电路设计
3.1、单片机最小系统
图4单片机最小系统
该最小系统主要采用STC89C52用为电路的控制芯片。
3.2、寻迹线探测电路设计
采用光电探测器,该探头输出端只有三根线(电源线、地线、信号线),只要将信号线接在单片机的I/O口,然后不停地对该I/O口进行扫描检测,当其为低电平时则检测到白纸,否则为高电平时则检测到黑线区域。
小车前进(倒退)时,始终保持黑线在车头二个传感器之间,当小车偏离黑线时,探测器一旦探测到有黑线,单片机就会按照预先编定的程序发送指令给小车的控制系统,控制系统再对小车路径予以纠正。
当小车回到了轨道上时,车头两个探测器都只检测到白纸,则小车继续直线行走,否则小车会持续进行方向调整操作,直到小车恢复正常。
3.3、声控检测电路设计
电路采用LM358作为比较器。
当有响声时,话筒将声音信号转换为电信号,经三极管放大,运放比较输出。
因为输出信号有抖动,对单片机的接收有所干扰。
考虑到I/O口接收的问题,电路多加了延时电路,能更好的防止抖动。
图5声控检测电路
3.4、光电检测乒乓球位置电路设计
图6光电乒乓球检测电路
乒乓球检测电路与寻迹电路相原相同,只是乒乓球检测电路光电传感器灵敏度不要寻迹那么灵敏。
3.5、电动机驱动电路设计
该电路电机采用脉冲击驱动,根据脉PWM不同进而控制电机的前进和后退以及左右转向。
4、系统软件设计
4.1、系统流程图
图7系统流程图
当开机时,系统上电复位,各项初始化,系统等待1秒钟,检测声控,然后进入自动运行状态。
为机器人小车运行及方向调整程序,使小车按预定路线运行,并且在小车偏离轨道后自动调整走向使小车自动返回预定路线,当检测到兵时,停两秒并声音提示,然后进行射门,并且控制LCD实时显示运行时间,轨迹,距离。
5系统测试
5.1测试条件
在指定区域内测试,指定区域用白纸铺设,黑线宽度为2cm,防守者为易拉罐,直径为5.5cm,高度为13.2cm,防守者为黑色。
乒乓球为白色,内填充物重量为45克。
5.2测试参数
5.2.1电机转速测试
函数名
运动方式
角度
速度
脉宽
脉冲数
Rotate_Left
原地左转
90
中速
1350
30
原地左转
180
中速
1350
61
原地左转
270
中速
1350
91
原地左转
360
中速
1350
121
Rotate_right
原地右转
90
中速
1650
28
原地右转
180
中速
1650
57
原地右转
270
中速
1650
87
原地右转
360
中速
1650
118
Pivot_Left
单边左转
90
中速
1350
54
单边左转
180
中速
1350
112
单边左转
270
中速
1350
单边左转
360
中速
1350
Pivot_Right
单边右转
90
中速
1650
52
单边右转
180
中速
1650
108
单边右转
270
中速
1650
164
单边右转
360
中速
1650
220
5.2.2小车行驶过程测试
次数
行驶路程
全程时间
是否有
提示音
是否显示时间
是否显示轨迹
1
2.43m
17s
是
是
是
2
2.50m
18s
是
是
是
3
2.57m
18s
是
是
是
5.2.3系统误差测试
总行驶路程
2.45m±5cm
误差
±5cm
总行驶时间
17S±1S
参考文献
【1】 吴少军、刘光斌编著《单片机实用低功耗设计》人民邮电出版社
【2】周航慈编著《单片机应用程序设计》北京航空航天大学出版社
【3】谭浩强.C语言程序设计(第二版).北京:
清华大学出版社,2000
附录:
1.系统电路图
2.系统软件
#include
#include
#include
#include"12864.h"//显示程序
unsignedcharcodepic2[];//定义地图表格
uchartr_num[]={243,245,240,249,252,241,239,247};
/********特殊功能位定义********/
sbitSE_right=P3^6;//右电机
sbitSE_left=P3^7;//左电机
sbitRoad_IR_right=P1^2;//右光电接收
sbitRoad_IR_center=P1^1;//中光电接收
sbitRoad_IR_left=P1^0;//左光电接收
sbitkey1=P3^4;//按键1
sbitkey2=P3^5;//按键2
sbitVoice_IR=P1^7;//声控接收
sbitSpeaker=P2^4;//声光报警控制
sbitBall_IR1=P1^3;//球检测到位2
sbitBall_IR2=P1^4;//球检测到位1
/************end******************/
/***********位定义***************************/
bitCross_flag=0;//十字交点检测标志位
bitBall_OK=0;//球找到
bitBall_turn=0;//带球
bitStart_flag=0;//启动标志位
bitEnd_flag=0;//结束标志位
bitBall_detection=0;//启动检测球标志位
bitSub_flag=0;//减速标志位
bitkey_flag=0;//
bitkey_start=0;
/*************end***************************/
/******全局变量声明************/
ucharmotor_num=0;//小车速度控制
ucharroad_miao=0;//小车行走的时间秒
ucharroad_fen=0;//小车行走的时间分
ucharCross_num=0;//十字交点计数
uintEx_num=0;//进入中断次数
uintTravel_num=0;//路程计算
ucharEnd_num=0;//忙区距离检测距离数
/************end*******************/
/************函数声明******************/
voidforward(void);//小车向前行走
voidbackward(void);//向后走
voidleft_turn(ucharz);//左转
voidright_turn(ucharz);//右转
voidTracing_forward(void);//寻迹检测向前
voidTurn_control(void);//转弯控制
voidFind_ball(void);//寻找球
voidStart_tract();//出发函数
voiddisplay_init(void);//显示初始化
voiddisplay_end(void);//最后数据综合显示
voidcease();//小车停止
voiddisplay_end_dispose(void);//最后显示处理优化
voidkeyboard();//按键扫描
/*************end*********************/
//******定时器0中断入口*****
voidto()interrupt1
{
staticunsignedcharT0_num1,T0_num2,T0_num3;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
/*********行走时间计算*****************/
if(End_flag==0)
{
T0_num1++;
if(T0_num1==100)//行走时间计算
{
T0_num1=0;
road_miao++;
if(road_miao==60)
{
road_miao=0;
road_fen++;
}
}
}
/*********十字路口计数***********/
if(Cross_flag==1)//十字路口计数
{
T0_num2++;
if(T0_num2==25)
{
Cross_num++;//十字路口计数加1
picture(Cross_num);
Turn_control();
Cross_flag=0;
T0_num2=0;
}
}
/***************检测到球停止两秒************************/
if(Ball_OK==1&&Ball_turn==0)
{
T0_num3++;
if(T0_num3==200)
{
T0_num3=0;
Ball_turn=1;//准备运球
Speaker=1;
}
}
}
/**********************************
函数名称:
EX1()interrupt
功能:
外部中断1入口,用来测行
参数:
无
返回值:
无
***********************************/
voidex2()interrupt2using2
{
//Travel_num+=11;
Ex_num++;
if(Ex_num==8)
{
Ex_num=0;
}
}
/****************************************/
/*主函数*/
/****************************************/
voidmain()
{
display_init();//显示初始化,启动默认模式初始化
EX_init();//外部中断初始化
_delay_ms(1000);
while(!
Voice_IR);
Start_tract();
Timer_init();//定时器初始化
while
(1)
{
if(End_flag==0)
{
Find_ball();//避开障碍,找到球射门
}
else
if(End_flag==1&&key_start==0)
{
display_end_dispose();//最后显示处理优化
_delay_ms(10);
key_start=1;
}
if(key_start)
{
keyboard();
}
}
}
/**********************************
函数名称:
Forward(void)
功能:
小车向前行走
参数:
无
返回值:
无
***********************************/
voidforward(void)
{
SE_left=1;
_delay_us(1700);
SE_left=0;
SE_right=1;
_delay_us(1300);
SE_right=0;
_delay_ms(20);
}
/**********************************
函数名称:
Forward(void)
功能:
小车向前行走减速
参数:
无
返回值:
无
***********************************/
voidforward_s(void)
{
SE_left=1;
_delay_us(1680);
SE_left=0;
SE_right=1;
_delay_us(1320);
SE_right=0;
_delay_ms(20);
}
/**********************************
函数名称:
backward(void)
功能:
小车向后行走
参数:
无
返回值:
无
***********************************/
voidbackward(void)
{
SE_right=1;
_delay_us(1700);
SE_right=0;
SE_left=1;
_delay_us(1300);
SE_left=0;
_delay_ms(20);
}
/**********************************
函数名称:
Left_turn
功能:
小车左转
参数:
z:
设定旋转量
返回值:
无
***********************************/
voidleft_turn(ucharz)
{
uchari;
for(i=z;i>0;i--)
{
SE_left=1;
_delay_us(1300);
SE_left=0;
SE_right=1;
_delay_us(1300);
SE_right=0;
_delay_ms(20);
}
}
/**********************************
函数名称:
cease()
功能:
小车停止
参数:
无
返回值:
无
***********************************/
voidcease()
{
SE_left=1;
_delay_us(1500);
SE_left=0;
SE_right=1;
_delay_us(1500);
SE_right=0;
_delay_ms(20);
}
/**********************************
函数名称:
Right_turn
功能:
小车右转
参数:
z:
设定旋转量
返回值:
无
***********************************/
voidright_turn(ucharz)
{
uchari;
for(i=z;i>0;i--)
{
SE_left=1;
_delay_us(1700);
SE_left=0;
SE_right=1;
_delay_us(1700);
SE_right=0;
_delay_ms(20);
}
}
/**********************************
函数名称:
Tracing_forward
功能:
走黑线
参数:
无
返回值:
无
***********************************/
voidTracing_forward(void)
{
if(Road_IR_right==0&&Road_IR_center==1&&Road_IR_left==0)
{
if(Sub_flag)
{
forward_s();//减速
}
else
forward();
}
else
if(Road_IR_right==1&&Road_IR_center==1&&Road_IR_left==1)
{
forward();
Cross_flag=1;
}
else
if(Road_IR_right==1&&Road_IR_center==1&Road_IR_left==0)
{
forward();
}
else
if(Road_IR_right==0&&Road_IR_center==1&&Road_IR_left==1)
{
forward();
}
else
if(Road_IR_right==1&&Road_IR_center==0&&Road_IR_left==0)
{
right_turn
(2);
}
else
if(Road_IR_right==0&&Road_IR_center==0&&Road_IR_left==1)
{
left_turn
(2);
}
}
/**********************************
函数名称:
Start_tract
功能:
出发
参数:
z:
设定旋转量
返回值:
无
***********************************/
voidStart_tract()
{
uchari;
while(Start_flag==0)
{
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 射门 机器人 论文