智能小车论文.docx
- 文档编号:28261806
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:34
- 大小:2.09MB
智能小车论文.docx
《智能小车论文.docx》由会员分享,可在线阅读,更多相关《智能小车论文.docx(34页珍藏版)》请在冰豆网上搜索。
智能小车论文
课程设计报告书
智能小车
班级:
生物医学工程(医学影像技术)11
成员:
王贵瑜1105512144
苏美怡1105512142
韦丽萍1105512145
指导老师:
何永玲刘红秀
智能小车
作者:
王贵瑜苏美怡韦丽萍
班级:
生物医学工程(医学影像技术11)
指导老师:
刘红秀何永玲
摘要:
利用红外对管检测障碍物与黑线,火焰传感器检测光源,并以STC89C51单片机为控制芯片控制电动小汽车的左右轮速度及转向,从而实现按照设计图的赛道实现自动避障、循迹和寻光的功能。
其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。
关键词:
智能小车;STC89C51单片机;L298N;红外对管;火焰传感器
一、引言
1.1智能小车的国状内外现
当今智能小车发展迅速,于国内外从智能小车玩具到其他行业都有实际成果。
而现实中的智能小车能够完成的基本功能一般是循迹、避障、寻光入库、检测金属贴片等等,甚至在一些电子设计大赛或者国内外大学生实践比赛中,已经朝着声控检测或者无线网络wifi控制等功能方向研究,更加与时俱进,符合生活需求。
飞思卡尔是当今较为出名的研究智能小车的公司。
本组的课程设计主要为实现智能小车的红外避障、循迹、寻光入库的功能。
1.2智能小车的设计研究意义
近年来,随着网购的风行,我国快递业市场规模急剧扩大。
在网购高峰时期,很多快递都出现“暴仓”现象,使之变成“慢递”了。
由于快递大小不一,在分派中心的分类就特别费人力物力了,尤其是大型的分派中心。
还有快递的分派中心的工作量波动大,工作人员的数量也不固定,在高峰期雇人比较困难,人手紧张。
基于以上的现状我们想通过智能小车来代替一部分的人,节省人力还可大大提高快递分类的速度。
我们相信高效率的物流传输方式不仅仅有利于节省金钱与时间,更有利于整个社会经济和文化的沟通与发展,对于网络时代、电商时代快速发展的今天更具有非常实际的意义。
利用整个轨道来模拟分拨中心,A点(起点),E点(终点)分别是快递传递的发、收点,两处均有快递员,智能小车在A、E点进行传送快递,具有实现减轻快递员工作压力,节约搬运快递时间,提高快递物流效率的实际意义。
二、总体方案
2.1设计要求
设计一台智能电动小车,行进路线如上图,要求:
(1)从起跑线A出发,经B、C,沿轨迹至D,最后到达停止线E,总时间要求在90秒内完成,并能实时显示时间。
(2)赛场分Ⅰ、Ⅱ、Ⅲ三个区。
到Ⅲ区入口处D点,应停留5秒,并能发出断续声光报警。
(3)到停止线E,小车车身中心点应对准停止线,误差控制在±2cm,并能发出断续声光报警。
2.2设计方案
1)制作小车轨道
根据上图所示利用硬纸板、白炽灯等材料制作小车测试所需的轨道。
包含障碍物、黑色轨迹、标注ABCDE各点等。
2)确定各线路所需功能
(1)A到B点
小车在此段实现避障功能,主要通过红外避障传感器来实现避障与转弯。
(2)B到C点
白色纸挡板作为障碍物,小车要实现避障,同样通过红外避障传感器来辅助实现避障。
(3)C到D点
小车实现循迹功能,需要循迹模块利用红外探测黑色轨迹来实现,按照黑色轨迹来行走到达D点,到达D点之后程序会进入蜂鸣器与led灯部分,发出5秒的声光报警。
(4)D点到E点
小车要根据白炽灯的光源来循光进行行驶,此时需要火焰传感器来实现循光功能,在到达E点之后小车的循迹模块感应到E处的黑线,驱动模块使小车停止在E处的黑线上,此时程序进入蜂鸣器与led灯部分,蜂鸣器与led灯工作,发出断续声光报警。
(5)全过程中最小系统的51定时器对小车进行计时,小车从A点出发到达E点所用的时间会显示在1602液晶显示屏上。
2.3硬件方案
智能小车主要由STC89C51单片机最小系统控制模块、红外避障模块、红外循迹模块、寻光模块(火焰传感器)、L298N驱动模块、电源模块组成。
避障功能——红外避障传感器模块
循迹功能——红外循迹传感器模块
循光功能——火焰传感器模块
驱动功能——LN298驱动模块
时间显示——1602液晶
声光报警——蜂鸣器,led灯
其他硬件——杜邦线,最小系统,车身底座(包含马达),移动电源
三、硬件设计与原理
3.1避障模块
采用红外线避障,利用单片机来产生信号对红外线发射管进行调制发射,发射出去的红外线遇到避障物的时候反射回来,红外线接收管对反射回来信号进行解调,输出比较电平。
外界对红外信号的干扰比较小,且易于实现,价格也比较便宜。
红外线避障方法,利用一管发射另一管接收,接收管对外界红外线的是否接收来判断是否遇障碍物,再结合51芯片上的程序判断来控制智能小车左右轮的速度,只要障碍物在所调灵敏度限定范围内就会产生相对的电平供单片机控制,实现避障功能。
[4]
在本设计中,在车前中间放置一个红外避障传感器模块,与车前左右和车后左右两边各放置一个红外避障传感器模块,整个车上共5个红外对管。
3.2循迹模块
小车循迹原理是小车在贴有黑胶带的地板上行驶,由于黑色和白色对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”一黑线。
在模块中利用了简单、应用也比较普遍的检测方法——红外探测法。
红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。
在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车的接收管接收不到信号。
电路图如下:
利用集成型红外对管作为寻迹单元的传感器,其中红外线发射管发射红外线,红外线二极管进行接收。
采用红外线发射,外面可见光对接收信号的影响较小,再用射极输出器对信号进行隔离。
利用红外循迹易于实现,比较可靠。
当小车底部的某边红外线收发对管遇到黑带时,可以检测到输入电平为高电平,反之为低电平。
结合单片机判断是否检测到黑线,通过执行相应的程序语句来控制小车哪边轮胎转动来改变方向。
这样不断循环检测,方向控制,使小车按黑线行走。
[4]
采用四路红外循迹模块并排安装固定在万能板上,然后固定在小车车头的底部,感应器朝下,用于检测地面轨道上的黑线。
由杜邦线引出循迹模块的VCC、GND和端口分别与STC89C51单片机相应的I/O端口连接。
当通电时,左一红外对管检测到黑线时,通过程序控制智能小车的轮子转速,此时右轮速度大于左轮,智能小车向左转幅度大一些,同理,左二检测到黑线时,智能小车向左转但是幅度小一点,右一检测到黑线向右转幅度大一点,右二检测到黑线则是向右转但是幅度小一点,这样小车就能按照轨道上的黑线来实现循迹行走了。
3.3寻光模块
利用火焰传感器对光源进行探测,判断火焰传感器上的感应器是否检测到光源,通过51芯片上所编写的程序来判断并控制智能小车左右轮子的速度和方向来达到寻光行走。
为实现小车位置与光源位置的判别,可以在小车车头和左右两侧分别安装一个火焰传感器。
[4]
本设计中于车前左中右各放置一个火焰传感器模块。
3.4驱动模块
基于L298n的电机驱动模块。
L298N是一款专门用于驱动电动机的芯片,具有高集成度、高功率的特点,其输出电流为2A,最高电流4A,最高工作电压50V,可以驱动感性负载,如大功率直流电机,步进电机,减速电机,伺服电机,电磁阀等,较少的外围电路(仅需要保护用的二极管和滤波电容)便可以很好地驱动大功率的电机。
其输入端可以与单片机直接相联,从而很方便地受单片机控制。
当驱动直流电机时,可以直接控制两路电机,并可以实现电机正转与反转,实现此功能只需改变输入端的逻辑电平。
而且模块体积小,稳定性高。
综上所述,选择L298N及外围电路作为电机驱动模块,其电路连线图如下:
L298N驱动模块上+12V、+5V、GND引脚用电线分别与最小系统引出的12V、5V和地连接起来,L298N驱动上的OUT1、OUT2和OUT3、OUT4用杜邦线分别与智能小车的两个电机相连,给两个电机供+12V的电源。
[3]
3.5电源模块
选择了能够实现12v转5V的LM2596电源模块来分别实现给STC89C51单片机和L298N驱动电机模块进行供电。
因为LM2596电源模块稳定性好,转换的电压比较精准,输出的电压也相对稳定。
[3]
3.61602液晶模块
以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。
1602每行显示16个字符,一共可以显示两行。
在此,主要运用1602液晶来显示小车行走时间。
[1]
3.7声光报警模块
为了在D点和终点E处发出声光报警,我们于车尾使用了蜂鸣器模块和两个led灯实现。
蜂鸣器的原理图如下:
[2]
3.8最小系统控制
本模块采用STC89C51单片机作为核心处理器。
单片机控制系统基本由最小系统和外围信号I/O口组成,其中最小系统包括电源(地),CPU时序电路(一般使用11.0592M或者12M和30P电容组成),复位电路组成。
[2]
四、软件设计
4.1主程序流程图
4.2主程序代码
#include
#include
#include"pwm.h"
#include"delay.h"
#include"tracking.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitfront=P3^3;/*前边红外避障*/
sbitright1=P3^4;/*右前红外避障*/
sbitright2=P3^5;/*右后红外避障*/
sbitleft1=P3^6;/*左前红外避障*/
sbitleft2=P3^7;/*左后红外避障*/
sbitshine0=P1^0;/*前趋光*/
sbitshine1=P1^1;/*左趋光*/
sbitshine2=P1^2;/*右趋光*/
sbitbeef=P1^3;
sbitled=P2^4;/*声光报警led灯*/
ucharflag=0;
voidmain(void)
{uchark;
inti;
beef=1;
pwm_init();
/*******从A到B******************************/
while(right1==0||right2==0)
{
if(left1==0&&left2==0)
go(15,1);
elseif(left1==1&&left2==0)
go(3,15);
elseif(left1==0&&left2==1)
go(15,3);
else
go(14,15);
}
/******转弯进入Ⅰ区***************/
go(20,-20);//右转
delay(4);
TR0=0;
stop();
delay(1000);
TR0=1;
go(20,15);
delay(180);
while(front==1)//检测到白板前直走
{
go(17,15);
}
TR0=0;
stop();
delay(200);
TR0=1;
go(20,-20);//检测到白板就右转
delay(4);
TR0=0;
stop();
delay(1000);
TR0=1;
while(left1==0||left2==0)//靠左边白板直走
{
if(left1==0&&left2==0)
go(15,1);
elseif(left1==1&&left2==0)
go(3,15);
elseif(left1==0&&left2==1)
go(15,3);
else
go(14,15);
}
while(right1==0||right2==0)
{
if(left1==0&&left2==0)
go(15,1);
elseif(left1==1&&left2==0)
go(3,15);
elseif(left1==0&&left2==1)
go(15,3);
else
go(14,15);
}
while(front==1)
{
go(15,12);
}
TR0=0;
stop();
delay(1000);
/*****左转进入Ⅱ区**************/
TR0=1;
go(-20,20);
delay(4);
TR0=0;
stop();
delay(1000);
TR0=1;
tracking_stop();//打开循迹,当3个红外同检测到黑线时
TR0=0;
stop();
k=100;//停留5秒,并发出断续声光报警。
while(k--)
{beef=~beef;
led=~led;
delay(50);
}
/*********右转进入Ⅲ区*************/
TR0=1;
go(20,20);
delay(150);
go(35,10);
delay(300);
go(16,15);
tracking_shine_stop();//开始趋光走向E线
TR0=0;
stop();
while
(1)
while(k--)//停止在E线上,并发出连续声光警报声
{beef=~beef;
led=~led;
delay(50);
}
}
4.3驱动子程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitin1=P2^0;//左轮前进
sbitin2=P2^1;//左轮后退
sbitin3=P2^2;//右轮前进
sbitin4=P2^3;//右轮后退
charleft_go_duty_cycle=0,right_go_duty_cycle=0,num=0;
voidpwm_init(void)
{
TMOD=0X01;//00100001
TH0=0XFF;
TL0=0XA3;//0.1msinterrupt
EA=1;
ET0=1;
TR0=1;
}
voidgo(charleft_speed,charright_speed)
{
left_go_duty_cycle=left_speed;
right_go_duty_cycle=right_speed;
}
voidtimer0(void)interrupt1
{
TH0=0XFF;
TL0=0XA3;//0.1msinterrupt
if(left_go_duty_cycle>0)
{
if(num in1=0;//go--left else in1=1; } else { if(num<(left_go_duty_cycle*(-1)))//Thehigherthevalue,Faster in2=0;//go--left else in2=1; } if(right_go_duty_cycle>0) { if(num in3=0;//go--right else in3=1; } else { if(num<(right_go_duty_cycle)*(-1))//Thehigherthevalue,Faster in4=0;//go--left else in4=1; } num++;//active if(num>=100)//0.1*100=10msCycle10000-1s num=0; } voidstop() { in1=1; in2=1; in3=1; in4=1; } 4.4寻迹、寻光子程序 #include #include"tracking.h" #include"HMC5883.h" #include"delay.h" #include"pwm.h" #defineucharunsignedchar #defineuintunsignedint sbitGleft1=P1^4;///左边第一个寻迹红外 sbitGleft2=P1^5;///左边第二个寻迹红外 sbitGright2=P1^6;///右边第二个寻迹红外 sbitGright1=P1^7;///右边第一个寻迹红外 sbitshine0=P1^0; sbitshine1=P1^1; sbitshine2=P1^2; sbitbeef=P1^3; voidtracking_handle(void)//寻迹程序 { if(Gright2==1)//当检测到黑线时输出高电平 go(20,10); elseif(Gleft2==1) go(13,18); elseif(Gright1==1) go(45,1); elseif(Gleft1==1) go(1,45); else go(15,14); } voidtracking_stop()//当左边3个或右边3个红外同时检测到黑线时关闭循迹 { while(! ((Gleft1==1&&Gleft2==1&&Gright2==1)||(Gleft2==1&&Gright2==1&&Gright1==1))) { tracking_handle(); } } voidtracking_shine(void)//寻光程序 { if(shine0==0)//当检测到光时输出低电平 { if(shine1==0) go(15,18); elseif(shine2==0) go(18,14); elsego(15,14); } if(shine0==1) { if(shine1==0) go(10,35); elseif(shine2==1) go(35,10); elsego(10,20); } } voidtracking_shine_stop(void)//当寻迹3个红外同时检测到E线时关闭寻光 { while(! ((Gleft1==1&&Gleft2==1&&Gright2==1)||(Gleft2==1&&Gright2==1&&Gright1==1))) { tracking_shine(); } } 4.5延时子程序 #include #include #defineucharunsignedchar #defineuintunsignedint voiddelay(unsignedintk)//延时k毫秒 { unsignedinti,j; for(i=k;i>0;i--) { for(j=110;j>0;j--) {;} } } 4.61602液晶显示子程序 #include #defineuintunsignedint #defineucharunsignedchar ucharcodetable1[]="traveltime"; sbiten=P3^4; sbitrs=P3^5; uchara,num1,add,miao; voiddelayms(uintu) { uintx,y; for(x=u;x>0;x--) for(y=110;y>0;y--); } voidwrite_1602com(ucharcom) { rs=0; P0=com; delayms(5); en=1;//写了命令 delayms(5); en=0;//使能拉低 //en=1; } voidwrite_1602dat(uchardat) { rs=1; P0=dat; delayms (1); en=1; delayms (1); en=0; } voidinit() { TMOD=0x10; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET1=1; TR1=1; } voidlcd_init() { write_1602com(0x38); write_1602com(0x0c); write_1602com(0x06); write_1602com(0x01); write_1602com(0x80); for(a=0;a<11;a++) { write_1602dat(table1[a]); } } voidjishi(ucharadd,ucharsj) { uchari,j; i=sj/10; j=sj%10; write_1602com(0x80+0x40+add); write_1602dat(0x30+j); write_1602com(0x80+0x40+add-1); write_1602dat(0x30+i); } voidmain() { init(); lcd_init(); while (1) { if(num1==20) { num1=0; miao++; } jishi(7,miao); if(miao==90) { miao=0; } } } voidT1_time()interrupt3 { TH1=(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 小车 论文