智能寻迹避障小车寻迹系统设计Word格式文档下载.docx
- 文档编号:17427301
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:19
- 大小:353.32KB
智能寻迹避障小车寻迹系统设计Word格式文档下载.docx
《智能寻迹避障小车寻迹系统设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《智能寻迹避障小车寻迹系统设计Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
本项目中,小车的寻迹功能采用红外线收、发对管实现。
具体工作过程如下:
两对红外线收、发对管安装在智能寻迹避障小车底盘正前方,红外发射管一直发射信号,接收管时刻准备接收信号。
两对对着地的红外管发射红外信号,信号在白色的地面上反射回接收管,通过接收管把信号送回单片机进行处理,完成相应的动作。
假如在黑色的地面上,信号被地面吸收,就无信号返回,单片机检测到无信号,根据程序也会做出相应的动作。
如图2.1所示为红外线收、发对管外型示意图。
图2.1红外收、发对管外形图
2.3案例设计
2.3.1系统设计方案
本项目采用单片机最小系统+红外寻线传感器来实现小车寻线功能。
系统设计框图如图2.2所示。
图2.2系统设计框图
2.3.2硬件电路设计
智能寻迹避障小车寻线电路原理图如图2.3所示:
它是在单片机最小系统的基础上直接由单片机的P3?
础_0ol_1连接红外线收、发对个构成的,其中单片机的P3.5端口控制左边寻线电路模块,右边寻线电路模块由P3.6控制。
为了保准巡线信号的准确度,一般要求左、右红外发射对管安装时离地面高度控制在0.5cm内比较理想,距离太大,可能造成信号不灵敏,巡线不够准确,距离太小,也可能造成小车前进会与地面产生刮擦,从而损坏器件;
另外,左、右收、发对管安装的距离应保持在比黑线条的宽度多一点,做到夹在黑线条,并处于黑线条的边缘,不能压在黑线上。
这样巡线才能准确。
图2.3智能寻迹避障小车寻线电路原理图
2.3.3系统软件设计
任务一:
1、源程序
#include<
at89x52.h>
#defineuintunsignedint
#defineucharunsignedchar
#defineoutP2
sbitzuo1=P0^1;
sbitzuo2=P0^0;
sbityou1=P0^3;
sbityou2=P0^2;
sbitzuod=P3^5;
sbityoud=P3^6;
sbitqiand=P3^7;
//左右前3个红外传感器
sbitjiao=P0^6;
sbitD1=P2^0;
sbitD2=P0^7;
voiddelay(uintx)
{
uchari;
while(x--)
for(i=0;
i<
123;
i++);
}
voidqian()
zuo1=0;
zuo2=1;
//左边往前
you1=0;
you2=1;
//右边往前
voidhou()
zuo1=1;
zuo2=0;
//左边往后
you1=1;
you2=0;
//右边往后
voidzuo()
voidyou()
voidmain()
while
(1)
{
if(zuod==0&
youd==0)//如果左右两个传感器没有检测到黑线
{
qian();
//直走
}
if(zuod==1&
youd==0)//如果左边的传感器检测到黑线
while
(1)
{
zuo();
//左转
D1=0;
if(zuod==0)//一直左转到传感器检测不到为止
{
D1=1;
break;
//跳出循环
}
}
if(youd==1&
zuod==0)
you();
D2=0;
if(youd==0)
D2=1;
//道理同上
}
2、程序运行及调试
按图2.3连接智能寻迹避障小车控制电路,编译以上程序,将产生的可执行文件烧写到智能寻迹避障小车的单片机程序存储器,然后将小车放置在黑线圆圈的任意位置,开启电源,小车会沿着黑线不断转圈;
将小车从黑线上拿走,然后再放放置黑线旁边,只要小车与黑线不成90度放置,则小车通过自我修正,会重新找到黑线轨迹,继续转圈。
3、程序设计思路
基本思路是:
先判断智能寻线小车左、右寻线传感器是否夹在黑线边缘,如果是说明寻线传感器处于白色区域,则小车前进;
如果不是,则再判断左、右传感器所处的位置,如果左边传感器压到黑线,左传感器指示灯D1亮,说明小车已经偏右,则应调左转函数修正,使左边传感器退出黑色区域;
当退出黑色区域后,左传感器指示灯D1灭;
当右边传感器压到黑是,方法跟左边处理类是:
调用右转函数修正,同时D2亮,修正完,D2灭。
总之,小车在沿黑线转圈过程中,左、右寻线传感器始终是夹在黑线边缘(即白色区域)的,如果不在白色区域,就要根据情况调用左转、或右转函数进行修正。
程序流程图如图2.4所示:
图2.4智能寻迹避障小车寻黑线转圈流程图
任务二:
1、源程序
ucharcodeZM[]={
0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,
};
out=ZM[1];
out=ZM[3];
//左转
out=ZM[4];
程序的运行与调试与任务一相同,当程序下载到小车控制电路单片机中,开机运行,小车除完成任务一的动作外,还会在小车行进过程中在数码管上显示小车的状态,比如,小车前进,则在数码管上显示“1”;
小车左转弯则在数码管上显示“3”;
小车右转弯则在数码管上显示“4”。
程序设计思路与任务一基本相同,只是在小车直行、左转、右转函数后面调用相应的状态显示字符。
其程序流程图如图2.5所示。
图2.5带小车行走状态显示、转圈程序流程图
2.4相关知识
2.4.1显示模块
显示器是最常用的输出设备,其种类繁多,但在单片机系统设计中常用的是发光二极管显示器(LED)和液晶显示器(LCD)两种。
由于这两种显示器结构简单,价格便宜,接口容易实现,因而得到广泛应用。
下面介绍发光二极管显示器(LED)的结构、工作原理及其接口电路。
1、LED结构与原理
LED显示器又称为数码管,它主要由8个发光二极管组成,如图2.6(a)所示。
图中,a~g为数字或字符显示段,h段为小数点显示,通过a~g为7个发光段的不同组合,可以显示0~9和A~F共16个数字和字母。
例如,当a、b、g、e、d段亮时,显示数字“2”,当a、f、e、g段亮时,则显示字母“F”。
LED可以分为共阴极和共阳极两种结构,如图2.6(b)和(c)所示。
其中图(b)为共阴极结构。
即把8个发光二极管阴极连在一起。
这时如果需要点亮a~g中的任何一盏灯,则只需要在相应端输入高电平即可;
输入低电平则截止。
比如我们现在要显示数字“3”,则只要在对应的a、b、c、d、g段送入高电平,在其他端送入低电平即可,点亮为“3”。
图(c)为共阳极结构。
其显示端输入低电平有效,高电平截止。
(a)引脚分布图(b)共阴LED(c)共阳LED
图2.6八段LED显示块
表2-1列出了共阳极与共阴极LED显示器显示数字、字母与显示代码之间的对应关系。
表2-1显示器显示数字、字母与显示代码之间的对应关系
显示字符
共阴极段码
共阳极段码
3FH
C0
8
7FH
80H
1
06H
F9
9
6FH
90H
2
5BH
A4
A
77H
88H
3
4FH
B0
B
7CH
83H
4
66H
99H
C
39H
C6
5
6DH
92H
D
5EH
A1H
6
7DH
82H
E
79H
86H
7
07H
F8
F
71H
8EH
2、LED显示器显示方式
点亮LED显示器有两种方式:
一是静态显示;
二是动态显示。
所谓静态显示,就是当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止。
如图2.7所示为4位静态LED显示器电路。
该电路每一位可单独显示。
只要在要显示的那位的段选线上保持段选码电平,该位就能保持显示相应的显示字符。
这种电路的优点是:
在同一瞬间可以显示不同的字符;
但缺点就是占用端口资源较多。
从图2.8可以看出,每位LED显示器需单独占用8根端口线,也就是说需要占用单片机的1个端口,而对于MCS—51单片机而言,端口资源是比较少的。
因而,在显示的数据位较多时往往不采用此种设计方法,而是采用动态显示方式。
所谓动态显示,就是将要显示的多位LED显示器采用一个8位的段选端口,然后采用动态扫描方式一位一位地轮流点亮各位显示器。
如图2.8所示为4位LED动态显示电路。
图2.74位静态LED显示器电路
图2.84位动态LED显示器电路
在此电路中,单片机的P1口用于控制4位LED的段选码;
P2口的P2.0~P2.3用于控制4位LED位选码。
由于所有的段选码连在一起,所以同一瞬间只能显示同一种字符。
但如果要显示不同字符,则要借助位选口来控制。
(如果LED为共阴,则P2.0~P2.3输出高电平,为共阳则P2.0~P2.3输出为低电平。
)例如,现在要显示5678四个数字,则首先应该将“5”的显示代码(共阴LED的显示代码为6DH,共阳LED的显示代码为92H)由P1.0送出。
然后P2.0~P2.3输出相应位码(共阴LED时P2.0~P2.3输出1000,共阳LED时P2.0~P2.3输出0111)时,则可以看到在数码管1上的显示数字“5”。
再将显示的数字“5”延时5~10ms,以造成视觉暂留效果;
同时代码由P1.0送出。
用同样的方法将其余3个数字“678”送数码管2、3、4显示,最后则可以在4位LED上看到“5678”四个数字。
为了使显示效果稳定,可以使每个数码管显示的数字不断重复,当重复频率达到一定程度时,加之人眼视觉暂留作用,便可以看到相当稳定的“5678”四个数字。
表2-2为模拟以上显示的过程表(以共阴LED设置显示代码,共阳与此相反。
)
表2-24位动态LED扫描显示状态
段选码
P1.7至P1.0
P2.3至P2.0
LED显示
数码管1
数码管2
数码管3
数码管4
01H
02H
04H
08H
3、LED显示器接口实例
实例1:
用LED数码管显示数字“6”
本例用LED数码管显示数字“6”,接口电路如图2.9所示(采用共阳极数码管)。
实现方法:
图2.9中数码的电源由单片机P2.0引脚控制,当P2.0为低电平时数码管被点亮,然后由P0控制数码管显示的数字,根据表2—1输出数字”6”。
图2.9数码与单片机的接口电路
程序设计如下:
//实例1:
reg51.h>
//包含51单片机寄存器定义的头文件
voidmain(void)
P2=0xfe;
//P2.0引脚输出低电平,数码显示器接通电源准备点亮
P0=0x82;
//让P0口输出数字"
5"
的段码92H
实例2:
用4位数码管静态显示“1234”
图2.10为4位静态显示电路,在该电路中每一个数码管占用1个单片机并行端口,因而可以同时显示不同的数字,但这种方式由于过多地占用了单片机端口资源,故在实际设计中不实用,特别是显示数位数多时,不采用该种方式,而是采用动态方式实现。
图2.104位数码管静态显示电路
//实例2:
静态显示数字“1234”
//包含51单片机寄存器定义的头文件
/*******************************************
函数功能:
主函数
******************************************/
P0=0x6d;
//将数字5的段码送P0口
P1=0x7d;
//将数字6的段码送P1口
P2=0x07;
//将数字5的段码送P2口
P3=0x7f;
//将数字6的段码送P3口
while
(1)//无限循环,防止程序跑飞
;
实例3:
用4位数码管动态显示“1234”
上例虽然实现同时显示不同数字的功能,但浪费端口资源严重,故在实现多位同时显示不同数字时多采用如图2.11所示的动态显示,这种方式能够利用较少的端口实现较多位的数字显示,因而得以实用。
图2.114位数码管动态显示
//实例3:
ucharcodeDIS_SEG[4]={0xf9,0xa4,0xb0,0x99};
ucharcodeDIS_BIT[4]={0x01,0x02,0x04,0x08};
voiddelay(uintk)
uinti,j;
for(i=0;
k;
i++)
{for(j=0;
j<
121;
j++)
{;
ucharcnt;
while
(1)
for(cnt=0;
cnt<
4;
cnt++)
{P0=DIS_SEG[cnt];
P2=DIS_BIT[cnt];
delay(100);
P2=0X00;
//每开段位就关闭全部显示可以起到消影的作用。
2.5拓展提高
2.5.1思考练习
1、本案例设计中智能巡迹避障小车的巡线功能与那些器件有关?
如何保证巡线的准确性?
2、智能巡迹避障小车沿黑线转圈与沿黑线走“S”型路线的控制程序是一样的吗?
为什么?
3、数码管动态扫描如何实现?
如何出现数码管显示出现“闪烁”现象,应如何消除?
2.5.2拓展训练
任务:
在单片机的P2口扩展一片LCD1602作为显示器件,显示智能小车的行走状态。
要求:
1、设计满足任务要求的系统硬件电路。
2、给出程序的设计思路,画出详细的程序流程框图。
3、给出程序清单并加上必要的注释。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 寻迹避障 小车 系统 设计