1、寻光智能车
功能说明
智能寻光小车,智能识别光线强弱,实现小车永远向光最强的地方行走,到光源处小车自动停止。基本车体为三轮、二驱、双层机构。主控芯片采用最常用的51单片机;
驱动采用L9110驱动芯片驱动两个减速直流电机;
L7805稳压芯片设计出电源电路为系统提供稳定电压;
循迹模块使用光敏电阻传感器,识别能力强,反应灵敏,稳定性强,光线调试容易。
电路原理图
单片机最小系统
驱动模块
寻光模块
程序
程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit zuo1=P0^0;//定义控制左边电机的单片机引脚
sbit zuo2=P0^1;//定义控制左边电机的单片机引脚
sbit you1=P0^2;//定义控制右边电机的单片机引脚
sbit you2=P0^3;//定义控制右边电机的单片机引脚
sbit qh=P1^0;//前后控制位
sbit zy=P1^1;//左右控制位
sbit ting=P1^2;//停止控制位
void delay(uint z)//一个带参数的延时程序
{
int i,j;//定义两个变量
for(i=10;i>0;i--)
for(j=z;j>0;j--);//将参数z赋值给j
}
void goright()//前进右转子程序
{
zuo1=0;
zuo2=1;//左边轮子正转
delay(24);//pwm有用值,越大左边方向的轮子越快
zuo1=1;//关闭左边轮子
you1=0;
you2=1; //右边轮子正转
delay(10);//pwm有用值,越大右边的轮子越快
you1=1;//关闭右边轮子
delay(80);//pwm无用值,越大,小车跑的越慢
}
void goleft()//前进左转子程序
{
zuo1=0;
zuo2=1;//左边轮子正转
delay(10);//pwm有用值,越大左边方向的轮子越快
zuo1=1;//关闭左边轮子
you1=0;
you2=1; //右边轮子正转
delay(24);//pwm有用值,越大右边的轮子越快
you1=1;//关闭右边轮子
delay(80);//pwm无用值,越大,小车跑的越慢
}
void down()//停止子程序
{
zuo1=1;
zuo2=1;
you1=1;
you2=1; //左右轮全部停止
}
void main()
{
while(1)
{
zy=1;
qh=1;
ting=1;//初始化各个引脚
while(ting==1)//如果中间传感器检测到光亮则认为是遇到光源,就停止
{
down();
}
if(qh==0&&zy==1)//当前后传感器为0且左边传感器触发时,前进左转
goleft();
if(qh==0&&zy==0)//当前后传感器为0且右边传感器触发时,前进右转
goright();
}
}
2、循迹智能车
说明
本寻迹小车采用STC89C52单片机为控制核心,加以直流电机和光电传感器以及其他电路的设计思路。系统由STC89C52通过I/O口控制小车的前进后退以及转向。寻迹由ST188型光电对管完成。
目前 ,在企业生产技术不断提高、对自动化技术要求不断加深的环境下,智能车辆以及在智能车辆基础上开发出来的产品已成为自动化物流运输、柔性生产组织等系统的关键设备。世界上许多国家都在积极进行智能车辆的研究和开发设计。移动机器人是机器人学中的一个重要分支,出现于20世纪06年代。当时斯坦福研究院(SRI)的Nils Nilssen和charles Rosen等人,在1966年至1972年中研制出了取名shakey的自主式移动机器人,目的是将人工智能技术应用在复杂环境下,完成机器人系统的自主推理、规划和控制。从此,移动机器人从无到有,数量不断增多,智能车辆作为移动机器人的一个重要分支也得到越来越多的关注。
智能小车,是一个集环境感知、规划决策,自动行驶等功能于一体的综合系统,它集中地运用了计算机、传感、信息、通信、导航及白动控制等技术,是典型的高新技术综合体。
智能车辆也叫无人车辆,是一个集环境感知、规划决策和多等级辅助驾驶等功能于一体的综合系统。它具有道路障碍自动识别、自动报警、自动制动、自动保持安全距离、车速和巡航控制等功能。智能车辆的主要特点是在复杂的道路情况下,能自动地操纵和驾驶车辆绕开障碍物并沿着预定的道路(轨迹)行进。智能车辆在原有车辆系统的基础上增加了一些智能化技术设备:
(1)计算机处理系统,主要完成对来自摄像机所获取的图像的预处理、增强、分析、识别等工作;
(2)摄像机,用来获得道路图像信息;
(3)传感器设备,车速传感器用来获得当前车速,障碍物传感器用来获得前方、侧方、后方障碍物等信息。
智能车辆技术按功能可分为三层,即智能感知/预警系统、车辆驾驶系统和全自动操作系统团。上一层技术是下一层技术的基础。三个层次具体如下:
(1)智能感知系统,利用各种传感器来获得车辆自身、车辆行驶的周围环境及驾驶员本身的状态信息,必要时发出预警信息。主要包括碰撞预警系统和驾驶员状态监控系统。碰撞预警系统可以给出前方碰撞警告、盲点警告、车道偏离警告、换道/并道警告、十字路口警告、行人检测与警告、后方碰撞警告等.驾驶员状态监控系统包括驾驶员打吨警告系统、驾驶员位置占有状态监测系统等。
(2)辅助驾驶系统,利用智能感知系统的信息进行决策规划,给驾驶员提出驾驶建议或部分地代替驾驶员进行车辆控制操作。主要包括:巡航控制、车辆跟踪系统、准确泊车系统及精确机动系统。
(3)车辆自动驾驶系统,这是智能车辆技术的最高层次,它由车载计算机全部自动地实现车辆操作功能。目前,主要发展用于拥挤交通时低速自动驾驶系统、近距离车辆排队驾驶系统等。
这种智能小车的主要应用领域包括以下几个方面:
(1)军事侦察与环境探测
现代战争对军事侦察提出了更高的要求,世界各国普遍重视对军事侦察的建设,采取各种有效措施预防敌方的突然袭击,并广泛应用先进科学技术,不断研制多用途的侦察器材和探测设备,在车上装备摄像机、安全激光测距仪、夜视装置和卫星全球定位仪等设备,通过光缆操纵,完成侦察和监视敌情、情报收集、目标搜索和自主巡逻等任务,进一步扩大侦察的范围,提高侦察的时效性和准确性。
(2)探测危险与排除险情
在战场上或工程中,常常会遇到各种各样的意外。这时,智能化探测小车就会发挥很好的作用。战场上,可以使用智能车辆扫除路边炸弹、寻找和销毁地雷。民用方面,可以探测化学泄漏物质,可以进行地铁灭火,以及在强烈地震发生后到废墟中寻找被埋人员等。
(3)安全检测受损评估
在工程建设领域,可对高速公路自动巡迹,进行道路质量检测和破坏分析检测;对水库堤坝、海岸护岸堤、江河大坝进行质量和安全性检测。在制造领域,可用于工业管道中机械损伤,裂纹等缺陷的探寻,对输油和输气管线的泄漏和破损点的查找和定位等。
(4)智能家居
在家庭中,可以用智能小车进行家具、远程控制家中的家用电器,控制室温等等。对这种小车的研究,将为未来环境探测术上的有力支持。
设计思路
为了适应机电一体化的发展在汽车智能化方向的发展要求,提出简易智能小车的构想,目的在于:通过独立设计并制作一辆具有简单智能化的简易小车,获得项目整体设计的能力,并掌握多通道多样化传感器综合控制的方法。
根据题目要求,确定如下方案:在现有的玩具电动车的基础上,加装光电对管、传感器,实现对电动车位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。
这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠、精度高,可以满足对系统的各项要求。
此项设计是在以俞学兰老师提供的小车的基础上,采用STC89C52单片机为控制核心,实现能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。
总体方案设计
根据设计要求,本系统主要由控制器模块、电源模块、寻迹传感器模块、直流电机及其驱动模块、电压比较模块等模块构成。
为了较好的实现各模块的功能,我们分别设计了几种方案并分别进行了论证。
车体设计
方案1:购买玩具电动车。购买的玩具电动车具有组装完整的车架车轮、电机及其驱动电路。但是一般的说来,玩具电动车具有如下缺点:首先,这种玩具电动车由于装配紧凑,使得各种所需传感器的安装十分不方便。其次,这种电动车一般都是前轮转向后轮驱动,不能适应该题目的方格地图,不能方便迅速的实现原地保持坐标转90度甚至180度的弯角。再次,玩具电动车的电机多为玩具直流电机,力矩小,空载转速快,负载性能差,不易调速。而且这种电动车一般都价格不菲。因此我们放弃了此方案。
方案2:购买小车底盘。经过反复考虑论证,我们制定了左右双轮分别驱动的方案。即左右轮分别用一个转速和力矩基本完全相同的直流电机进行驱动。这样,当两个直流电机转向相反同时转速相同时就可以实现电动车的原地旋转,由此可以轻松的实现小车坐标不变的90度和180度的转弯。
综上考虑,我们选择了方案2。
控制器模块设计
方案1:采用可编程逻辑器件CPLD 作为控制器。CPLD可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高。且从使用及经济的角度考虑我们放弃了此方案。
方案2:采用宏晶公司的STC89C52单片机,它是16位控制器,具有体积小、驱动能力高、集成度高、易扩展、可靠性高、功耗低、结构简单、中断处理能力强等特点。处理速度高,尤其适用于语音处理和识别等领域。
本系统主要是进行寻迹运行的检测以及电机的控制。使用STC89C52单片机,完全能够胜任,且价格低廉,使用方便。
从经济的角度考虑,我们选择了方案2。
寻迹传感器模块设计
方案1:用光敏电阻组成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。
但是这种方案受光照影响很大,不能够稳定的工作。因此我们考虑其他更加稳定的方案。
方案2:用3组光电发射管和接收管自己制作光电对管寻迹传感器。红外发射管发出红外线,当发出的红外线照射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射管发出的光线则检测出黑线继而输出高电平。
因此我们选择了方案2。
电机模块设计
本系统为智能电动车,对于电动车来说,其驱动轮的驱动电机的选择就显得十分重要。由于本实验要实现对路径的准确定位和精确测量,我们综合考虑了一下下列两种方案。
方案1:采用步进电机作为该系统的驱动电机。由于其转过的角度可以精确的定位,可以实现小车前进路程和位置的精确定位。虽然采用步进电机有诸多优点,步进电机的输出力矩较低,随转速的升高而下降,且在较高转速时会急剧下降,其转速较低,不适用于小车等有一定速度要求的系统。经综合比较考虑,我们放弃了此方案。
方案2:采用直流减速电机。直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便。由于其内部由高速电动机提供原始动力,带动变速(减速)齿轮组,可以产生较大扭力。
我们所选用的直流电机减速比为1:74,减速后电机的转速为100r/min。我们的车轮直径为6cm,因此我们的小车的最大速度可以达到V=2πrv=2*3.14*0.03*100/60=0.314m/s能够较好的满足系统的要求,因此我们选择了此方案。
电机驱动模块设计
方案1:采用专用芯片L298N作为电机驱动芯片。L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。
方案2:对于直流电机用分立元件构成驱动电路。由分立元件构成电机驱动电路,结构简单,价格低廉,在实际应用中应用广泛。但是这种电路工作性能不够稳定。
因此我们选用了方案1。
最终选取方案
经过反复论证,我们最终确定了如下方案:
(1)车体购买两轮驱动底盘。
(2)采用STC89C52单片机作为主控制器。
(3)采用4节干电池供电。
(4)采用光电对管进行寻迹。
(5)采用L298N作为直流电机的驱动芯片。
系统的结构框图如图(1)所示。
硬件实现及单元电路设计
微控制器模块
我们在开发过程中使用开发版,方便程序的调试和整机的测试,待系统调试完成后,将单片机从开发板上取下,安装在小车系统板的单片机座中,由于本次设计要求中,小车需要完成的任务比较简单,因此我们只在小车系统板的单片机系统中保留了晶振和复位电路。如图(2)
光电对管电路
可调电阻R7可以调节比较器的门限电压,经示波器观察,输出波形相当规则,可以直接够单片机查询使用。而且经试验验证给此电路供电的电池的压降较小。因此我们选择此电路作为我们的传感器检测与调理电路。如图(3)所示。
电机驱动电路的设计
我们采用电机驱动芯片L298N作为电机驱动,驱动电路的设计如图(4)所示。
L298N的5、7、10、12四个引脚接到单片机上,通过对单片机的编程就可以实现两个直流电机的PWM调速以及正反转等功能。
软件实现
软件实现
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar x3,x4;
sbit P20=P3^6;//L298N使能端ENA
sbit P21=P3^7;//L298N使能端ENB
sbit P22=P1^3;//左电机A1
sbit P23=P1^4;//左电机A2
sbit P24=P1^5;//右电机B1
sbit P25=P1^6;//右电机B2
sbit P10=P1^0;//左边探头
sbit P11=P1^1;//中间探头
sbit P12=P1^2;//右边探头
void ds(uchar x1,uchar x2)
{
TMOD=0X01;//定时器0,工作方式1
TH0=x1;//赋高8位初值
TL0=x2;//赋低8位初值
x3=x1;
x4=x2;//保存计数初值
EA=1;ET0=1;//开总中断,开定时器0中断
TR0=1; //定时器0开始计数
}
void xunji()
{
if(P10==1&&P11==1&&P12==1)//左、中、右探头都检测不到黑色
{
P22=1; //停止
P23=1;
P24=1;
P25=1;
}
if((P10==0&&P11==0&&P12==0)||(P10==0&&P11==1&&P12==0))
//全检测到黑色或中间探头检测不到黑色
{
ds(0xff,0xff); //计数初值65535
}
if((P10==1&&P11==0&&P12==0)||(P10==1&&P11==1&&P12==0))
//左边探头检测不到黑线或左、中探头检测不到黑线
{
ds(0xff,0xe1); //计数初值65505
}
if((P10==0&&P11==0&&P12==1)||(P10==0&&P11==1&&P12==1))
//右边探头检测不到黑线或右、中探头检测不到黑线
{
ds(0xff,0xe1); //计数初值65505
}
}
void main()
{
while(1)
{
xunji();
P20=1;
P21=1;//ENA和ENB同时为高电平时,L298N芯片正常工作
P22=1;
P23=1;
P24=1;
P25=1;
}
}
void time0()interrupt 1
{
TH0=x3;
TL0=x4;//重新赋计数初值
if((P10==0&&P11==0&&P12==0)||(P10==0&&P11==1&&P12==0))
//全检测到黑色或中间探头检测不到黑色
{
P23=0; //全速前进
P25=0;
}
if((P10==1&&P11==0&&P12==0)||(P10==1&&P11==1&&P12==0))
//延时30us 左边探头检测不到黑线或左、中探头检测不到黑线
{
P23=0; //小车右拐
P25=1;
}
if((P10==0&&P11==0&&P12==1)||(P10==0&&P11==1&&P12==1))
//延时30us 右边探头检测不到黑线或右、中探头检测不到黑线
{
P23=1; //小车左拐
P25=0;
}
}