循迹小车原理.pdf
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
采用 pwm 调速法进行调速。 考虑到机械装置不便于修改等因素, 这里选择后者, 利用单片机输出端输出高 电平的脉宽及其占空比的大小来控制电机的转速,从而控制小车的速度。经过多次试验,最终确定合适的
脉宽和占空比,基本能保证小车在所需要的速度范围内平稳前行。
电机驱动单元
从单片机输出的信号功率很弱,即使在没有其它外在负载时也无法带动电机,所以在实际电路中我们
阻 R2 可限制接收电路的电流,一方面保护接收红外管;另一方面可调节检测电路的灵敏度。因为传感器
输出端得到的是模拟电压信号,所以在输出端增加了比较器,先将
ST168 输出电压与 2.5V 进行比较,再
送给单片机处理和控制。
传感器的安装
正确选择检测方法和传感器件是决定循迹效果的重要因素,而且正确的器件安装方法也是循迹电路好
TH0=(65536-100)/256; TL0=(65536-100)%256; }
void straight() // 走直线函数
{ pro_right=39; pro_left=39; left1=0; left2=1; right1=1; right2=0; }
void turn_left() // 左转弯函数
加入了电机驱动芯片提高输入电机信号的功率,从而能够根据需要控制电机转动。根据驱动功率大小以及
连接电路的简化要求选择 L298N ,其外形、管脚分布如图 5 所示。
图 5 L298N 管脚分布图 从图中可以知道,一块 L298N 芯片能够驱动两个电机转动,它的使能端可以外接高低电平,也可以利
用单片机进行软件控制,极大地满足各种复杂电路需要。另外,
{ pro_right=5; pro_left=39; left1=0; left2=1; right1=1; right2=0; }
void turn_right() // 右转弯函数
{ pro_right=39; pro_left=5; left1=0; left2=1; right1=1; right2=0; } void turn_back() // 后退 (反转 ) 函数
图 1 智能小车寻迹系统框图
传感检测单元
小车循迹原理
该智能小车在画有黑线的白纸 “路面 ”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到
的反射光的强弱来判断 “道路 ”—黑线。笔者在该模块中利用了简单、应用也比较普遍的检测方法 探测法。
—— 红外
红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不
L298N 的驱动功率较大,能够根据输入电
压的大小输出不同的电压和功率,解决了负载能力不够这个问题。
结语
此方案选择的器件比较简单,实际中也很容易实现。经过多次测试,结果表明在一定的弧度范围内,小车
能够沿着黑线轨迹行进,达到了预期目标。不足之处,由于小车采用直流电机,其速度控制不够精确和稳
定,不能实现急转和大弧度的拐弯。
用途广泛, 所以该系统中最终选择了 ST168 反射传感器作为红外光的发射和接收器件, 其内部结构和外接
电路均较为简单,如图 2 所示:
图 2 ST168 检测电路
ST168 采用高发射功率红外光、电 二极管 和高灵敏光电晶体管组成,采用非接触式检测方式。
ST168
的检测距离很小,一般为 8~15 毫米,因为 8 毫米 以下是它的检测盲区,而大于 15 毫米则很容易受干扰。
default: break; }
} void main(void) { init(); delay(1); while(1) { infrared(); // straight(); }
}
void int0(void)interrupt 0 {
}
( 如图 3 中
所示的行走轨迹黑线 ) 在 X1 和 Y1 这两个第一级传感器之间,当小车偏离黑线时,第一级传感器就能检测
到黑线,把检测的信号送给小车的处理、控制系统,控制系统发出信号对小车轨迹予以纠正。第二级方向
探测器实际是第一级的后备保护,它的存在是考虑到小车由于惯性过大会依旧偏离轨道,再次对小车的运
动进行纠正,从而提高了小车循迹的可靠性。
软件控制单元 单片机选型及程序流程
此部分是整个小车运行的核心部件,起着控制小车所有运行状态的作用。控制方法有很多,大部分都
采用单片机控制。由于 51 单片机 具有价格低廉是使用简单的特点,这里选择了
ATMEL 公司 的 AT89S51
作为控制核心部件,其程序控制方框图如图 4 所示。
图 4 系统的程序流程图
小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机
I/O 口,一旦检测到某个 I/O 口有信
号变化,程序就进入判断程序,把相应的信号发送给电动机从而纠正小车的状态。
车速的控制
车速调节的方法有两种: 一是用步进电机代替小车上原有的直流电机; 二是在原有直流电机的基础上,
程序
#include<reg51.h> #define uchar unsigned char #define uint unsigned int ucharpro_left,pro_right,i,j; // 左右占空比标志
sbit left1=P2^0; sbit left2=P2^1; sbit right1=P2^2; sbit right2=P2^3;
笔者经过多次测试、比较,发现把传感器安装在距离检测物表面
10 毫米时,检测效果最好。
R1 限制发射 二极管 的电流,发射管的电流和发射功率成正比, 但受其极限输入正向电流 50mA 的影响,
用 R1=150 的电阻作为 限流电阻 ,Vcc=5V 作为电源电压,测试发现发射功率完全能满足检测需要;可变电
断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果
遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。
传感器的选择
市场上用于红外探测法的器件较多,可以利用反射式传感器外接
简单电路 自制探头,也可以使用结构
简单、工作性能可靠的集成式红外探头。 ST 系列集成红外探头价格便宜、体积小、使用方便、性能可靠、
mid_red=1; // 黑线位置
right_red=0; TMOD=0X01 ;// 定时器 0 选用方式 1
TH0=(65536-100)/256; TL0=(65536-100)%256; EA=1; ET0=1; TR0=1; en1=1; en2=1; } void time0(void)interrupt 1 { i++; j++; if(i<=pro_right) {en1=1;} else en1=0; if(i==40) {en1=~en1;i=0;} if(j<=pro_left) {en2=1;} else en2=0; if(j==40) {en2=~en2;j=0;}
sbit en1=P1^0; sbit en2=P1^1; //循迹口三个红外传感器
sbitleft_red=P1^2; // 白线位置
sbitmid_red=P1^3; // 黑线位置
sbitright_red=P1^4; // 白线位置
void delay(uint z) { uchari; while(z--) {for(i=0;i<121;i++);} } void init() { left_red=0; // 白线位置
坏的一个重要因素。从简单、方便、可靠等角度出发,同时在底盘装设
4 个红外探测头,进行两级方向纠
正控制,将大大提高其循迹的可靠性,具体位置分布如图
3 所示。
图 3 红外探头的分布图
图中循迹传感器全部Hale Waihona Puke Baidu一条直线上。 其中 X1 与 Y1 为第一级方向控制传感器, X2 与 Y2 为第二级方向控制
传感器,并且黑线同一边的两个传感器之间的宽度不得大于黑线的宽度。小车前进时,始终保持
寻迹小车 在历届 全国大学生电子设计竞赛 中多次出现了集光、机、电于一体的简易智能小车题目。笔者通过论证、 比较、实验之后,制作出了简易小车的寻迹电路系统。整个系统基于普通玩具小车的机械结构,并利用了 小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行。
总体方案 整个电路系统分为检测、控制、驱动三个模块。首先利用光电对管对路面信号进行检测,经过比较器 处理之后,送给软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小 车的运动。系统方案方框图如图 1 所示。
{ left1=1; left2=0; right1=0; right2=1; pro_right=39; pro_left=39;
} void infrared() // 循迹
{ uchar flag; if(left_red==1) {flag=1;} else if(right_red==1) {flag=2;} else if((left_red==0)&(mid_red==0)&(right_red==0)) {flag=3;} else flag=0; switch (flag) { case 0: straight(); break; case 1: turn_left(); break; case 2: turn_right(); break; case 3: turn_back(); break;