智能寻迹避障小车寻迹系统设计说明

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档