智能寻迹避障小车寻迹系统设计说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章智能寻迹避障小车寻迹系统设计
1.任务
任务一:产生智能寻迹避障小车沿黑线转圈的控制程序;
任务二:产生智能寻迹避障小车带状态显示沿黑线转圈的控制程序;
2.要求
(1)能控制智能寻迹避障小车沿黑线实现转圈功能;
(2)行走过程中小车一直压着黑线走,不得冲出黑线圆圈之外或之;
(3)智能寻迹避障小车可以从小于90度的任意方向寻找到黑线圆圈;
2.1 项目描述
该项目的主要容是:在智能寻迹避障小车电机控制系统之上扩展寻迹电路,然后运用C 语言对系统进行编程,使智能寻迹避障小车实现沿黑线转圆圈的功能,并且在行走过程中小车一直压着黑线走,不得冲出黑线圆圈之外或之;当人为将小车拿开,再从小于90度的任意方向放置小车,小车应能重新找回轨道,并沿黑线继续转圈。通过该项目的学习与实践,可以让读者获得如下知识和技能:
继续掌握单片机I/O端口的应用;
掌握红外线收、发对管的工作原理与控制方法;
掌握数码管的工作原理与控制方法;
掌握单片机C语言的编程方法与技巧;
能够编写出智能寻迹避障小车沿黑线实现转圈功能的控制函数;
2.1 必备知识
2.1.1 关于红外线传感器
红外线定义:在光谱中波长自0.76至400微米的一段称为红外线,红外线是不可见光线。所有高于绝对零度(-273.15℃)的物质都可以产生红外线。现代物理学称之为热射线。医用红外线可分为两类:近红外线与远红外线。
红外线发射器:红外线发射管在LED封装行业中主要有三个常用的波段,如下850NM、875NM、940NM。根据波长的特性运用的产品也有很大的差异,850NM波长的主要用于红外线监控设备,875NM主要用于医疗设备,940NM波段的主要用于红外线控制设备。如:红外线遥控器、光电开关、光电计数设备等。
红外线对管应用:本项目中,小车的寻迹功能采用红外线收、发对管实现。具体工作过程如下:两对红外线收、发对管安装在智能寻迹避障小车底盘正前方,红外发射管一直发射信号,接收管时刻准备接收信号。两对对着地的红外管发射红外信号,信号在白色的地面上反射回接收管,通过接收管把信号送回单片机进行处理,完成相应的动作。假如在黑色的地面上,信号被地面吸收,就无信号返回,单片机检测到无信号,根据程序也会做出相应的动作。如图2.1所示为红外线收、发对管外型示意图。
图2.1 红外收、发对管外形图
2.3 案例设计
2.3.1 系统设计方案
本项目采用单片机最小系统+红外寻线传感器来实现小车寻线功能。系统设计框图如图2.2所示。
STC89C52
复位电路
时钟电路
红外寻迹传感器
单片机最小系统
电机驱动芯片直流电机
P0
口
P3
口
图2.2 系统设计框图
2.3.2 硬件电路设计
智能寻迹避障小车寻线电路原理图如图2.3所示:它是在单片机最小系统的基础上直接由单片机的P3连接红外线收、发对个构成的,其中单片机的P3.5端口控制左边寻线电路模块,右边寻线电路模块由P3.6控制。为了保准巡线信号的准确度,一般要求左、右红外发射对管安装时离地面高度控制在0.5cm 比较理想,距离太大,可能造成信号不灵敏,巡线
不够准确,距离太小,也可能造成小车前进会与地面产生刮擦,从而损坏器件;另外,左、右收、发对管安装的距离应保持在比黑线条的宽度多一点,做到夹在黑线条,并处于黑线条的边缘,不能压在黑线上。这样巡线才能准确。
图2.3 智能寻迹避障小车寻线电路原理图
2.3.3 系统软件设计
任务一:产生智能寻迹避障小车沿黑线转圈的控制程序;
1、源程序
#include
#define uint unsigned int
#define uchar unsigned char
#define out P2
sbit zuo1=P0^1;
sbit zuo2=P0^0;
sbit you1=P0^3;
sbit you2=P0^2;
sbit zuod=P3^5;
sbit youd=P3^6;
sbit qiand=P3^7; //左右前 3个红外传感器sbit jiao=P0^6;
sbit D1=P2^0;
sbit D2=P0^7;
void delay(uint x)
{
uchar i;
while(x--)
for(i=0;i<123;i++);
}
void qian()
{
zuo1=0;
zuo2=1; //左边往前
you1=0;
you2=1; //右边往前
}
void hou()
{
zuo1=1;
zuo2=0; //左边往后
you1=1;
you2=0; //右边往后
}
void zuo()
{
zuo1=1;
zuo2=0; //左边往后
you1=0;
you2=1; //右边往前
}
void you()
{
zuo1=0;
zuo2=1; //左边往前
you1=1;
you2=0; //右边往后
}
void main()
{
while(1)