基于单片机的多功能智能小车设计论文电路+程序+论文1.docx

上传人:b****3 文档编号:6961193 上传时间:2023-05-10 格式:DOCX 页数:20 大小:461.27KB
下载 相关 举报
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第1页
第1页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第2页
第2页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第3页
第3页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第4页
第4页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第5页
第5页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第6页
第6页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第7页
第7页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第8页
第8页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第9页
第9页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第10页
第10页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第11页
第11页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第12页
第12页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第13页
第13页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第14页
第14页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第15页
第15页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第16页
第16页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第17页
第17页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第18页
第18页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第19页
第19页 / 共20页
基于单片机的多功能智能小车设计论文电路+程序+论文1.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的多功能智能小车设计论文电路+程序+论文1.docx

《基于单片机的多功能智能小车设计论文电路+程序+论文1.docx》由会员分享,可在线阅读,更多相关《基于单片机的多功能智能小车设计论文电路+程序+论文1.docx(20页珍藏版)》请在冰点文库上搜索。

基于单片机的多功能智能小车设计论文电路+程序+论文1.docx

基于单片机的多功能智能小车设计论文电路+程序+论文1

摘要:

智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。

智能电动车就是其中的一个体现。

本次设计的简易智能电动车,采用STC89C52单片机作为小车的检测和控制核心;采用金属感应器TL-Q5MC来检测路上感应到的铁片,从而把反馈到的信号送单片机,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶,并且单片机选择的工作模式不同也可控制小车顺着黑色胶布循迹行驶;采用红外壁障测障碍物。

采用1602LCD实时显示小车行驶的时间,小车停止行驶后,显示小车行驶时间以及硬币的个数。

本设计结构简单,较容易实现,但具有高度的智能化、人性化,一定程度体现了智能。

关键词:

STC89C52循迹红外壁障金属感应器1602LCD

 

1.设计任务:

设计并制作了一个智能电动车,其行驶路线满足所需的要求。

1.1要求:

1.1.1基本要求:

(1)分区控制:

如(图1)所示:

(图1)

(1)电动车从出发区出发(车体不得超出出发区),沿引导黑线向终点区行驶,电动车行驶过程中不可脱离黑色引导线行驶。

(2)电动车行驶过程中遇到转角路口时发出声光指示信息。

(3)电动车在AB段驶过程中遇到引导线下有硬币。

电动车发出声光指示信息并且停车2秒。

(4)电动车到达终点后应立即停车,但全程行驶时间不能大于90秒,行驶时间到达90秒时必须立即自动停车。

1.1.2发挥部分:

(1)进一步提高B点到G点的行驶速度(电动车行驶过程中不可脱离黑色引导线行驶)。

(2)电动车在GH段行驶过程中如有竖直放置饮用水瓶电动车发出声光指示信息。

(3)电动车在GH段行驶过程中如有倒置放置饮用水瓶电动车起动风扇将其吹到。

(4)电动车进入终点区域后,能进一步准确驶入终点区,要求电动车的车身完全进入终点区到达终点区中心。

停车后,能准确显示电动车全程行驶时间、路程以及遇到硬币的数量和饮用水瓶的数量。

2.方案比较与选择:

2.1主控系统模块

根据设计要求,我认为此设计属于多输入量的复杂程序控制问题。

据此,拟定了以下两种方案并进行了综合的比较论证,具体如下:

方案一:

选用一片CPLD(如EPM7128LC84-15)作为系统的核心部件,实现控制与处理的功能。

CPLD具有速度快、编程容易、资源丰富、开发周期短等优点,可利用VHDL语言进行编写开发。

但CPLD在控制上较单片机有较大的劣势。

同时,CPLD的处理速度非常快,而小车的行进速度不可能太高,那么对系统处理信息的要求也就不会太高,在这一点上,MCU就已经可以胜任了。

若采用该方案,必将在控制上遇到许许多多不必要增加的难题。

为此,我们不采用该种方案,进而提出了第二种设想。

方案二:

采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。

充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。

这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。

因此,这种方案是一种较为理想的方案。

针对本设计特点——多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的小体积单片机,D/A、A/D功能也不必选用。

根据这些分析,我选定了P89C51RA单片机作为本设计的主控装置,51单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是51单片机价格非常低廉。

在综合考虑了传感器、两部电机的驱动等诸多因素后,我们决定采用一片单片机,充分利用STC89C52单片机的资源。

2.2电机驱动模块

方案一:

采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整,此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。

方案二:

采用电阻网络或数字电位器调节电动机的分压,从而达到分压的目的。

但电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。

更主要的问题在于一般的电动机电阻很小,但电流很大,分压不仅回降低效率,而且实现很困难。

方案三:

采用功率三极管作为功率放大器的输出控制直流电机。

线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的H型桥式电路(如图2.1)。

用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。

这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的PWM调速技术。

现市面上有很多此种芯片,我选用了L298N(如图2.2)。

图2.1H桥式电路

图2.2L298N

2.3循迹模块

方案一:

采用简易光电传感器结合外围电路探测,但实际效果并不理想,对行驶过程中的稳定性要求很高,且误测几率较大、易受光线环境和路面介质影响。

在使用过程极易出现问题,而且容易因为该部件造成整个系统的不稳定。

故最终未采用该方案。

方案二:

采用四只红外对管(如图2.3),分别置于小车车身前轨道的两侧,根据两只光电开关接受到白线与黑线的情况来控制小车转向来调整车向,测试表明,只要合理安装好四只光电开关的位置就可以很好的实现循迹的功能。

方案三:

采用三只红外对管,一只置于轨道中间,两只置于轨道外侧,当小车脱离轨道时,即当置于中间的一只光电开关脱离轨道时,等待外面任一只检测到黑线后,做出相应的转向调整,直到中间的光电开关重新检测到黑线(即回到轨道)再恢复正向行驶。

现场实测表明,小车在寻迹过程中有一定的左右摇摆不定,虽然可以正确的循迹但其成本与稳定性都次与第二种方案。

通过比较,我选取第二种方案来实现循迹。

图2.3红外对管

3.系统的具体设计与实现:

根据设计任务要求,并且根据我们自己的需要而附加的功能,该电路的总体框图可分为如下几个基本的模块:

3.1路面检测模块:

采用铁片感应器TL-Q5MC来检测路面上的铁片从而给单片机中断脉冲。

原理图接线如(图4)所示:

(图4)

应用一个金属感应器,安装在车盘下,离地略小于或约四毫米。

当金属传感器检测到硬币时将对单片机发送中断信号,单片机运行中断,让小车停下2秒,并显示出硬币的个数。

3.2LCD显示模块:

采用1602LCD,由单片机的总线模式连接。

为节约IO口的使用并且不影响LCD的功能,LCD数据的传送是用595进行数据传送的,题目要求显示出全过程所以的时间和检测到硬币的个数。

还有题目要求在转弯时发出声音,LCD显示模块和蜂鸣器模块电路图如下:

LCD显示模块和蜂鸣器模块电路图

3.3红外壁障模块

红外避障传感器/距离可调3-80cm

简介:

这是一种集发射与接收于一体的光电传感器。

检测距离可以根据要求进行调节。

该传感器具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点,可以广泛应用于机器人避障、流水线计件等众多场合。

原理:

前方无障碍输出高电平

(1),有障碍输出口(黄色)电平会从高电平变成低电平(0),工作原理已经标在图上了。

背面图有一个电位器可以调节障碍的检测距离。

这样就可以按题目要求的那样检测到瓶子是否倒立了,如果倒立就启动电风扇吹到瓶子。

3.4最小系统模块:

该系统主要用到的是单片机,所以主要的部分是最小系统图,该最小系统如图所示:

最小系统电路图

3.5驱动电机模块

电机驱动一般采用H桥式驱动电路,L298N内部集成了H桥式驱动电路,从而可以采用L298N电路来驱动电机。

通过单片机给予L298N电路PWM信号来控制小车的速度,起停。

其引脚图如3.2,驱动原理图如图3.3。

图3.2L298N引脚图

图3.3电机驱动电路

3.6循迹模块

小车循迹原理是小车在画有黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。

笔者在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。

红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。

在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号,再通过LM324作比较器来采集高低电平,从而实现信号的检测。

避障亦是此原理。

电路图如图3.4和图3.5。

市面上有很多红外传感器,在这里我选用TCRT5000型光电对管。

图3.4循迹原理图

图3.5比较器模块

 

4.结束语:

经过这次的设计,让我更明白了团队的重要性以及焊接技术的重要性,也让我们对单片机编程的进一步了解,为了这次设计我们找了查找了很多资料,包括一些对该设计元件的作用、工作电压等资料的了解,感谢XX和Google公司。

他们的搜索功能庞大、快捷又免费。

让我们很方便地搜索到了我们所需要的设计资料和丰富的知识。

此次毕业设计是我大学学习中遇到过的时段最长、涉及内容最广、工作量最大的一次设计。

用老师的一句话概括就是这次毕业设计相当,如是把以前的小课程设计综合在一起的过程,只要把握住每个小课设的精华、环环紧扣、增强逻辑,那么这次的任务也就不难了。

同时感谢老师对我们的指导和为我们理清思路从而使我们更快我完成设计。

5.程序和流程图:

按照预定的功能,系统实现预定的功能的程序流程图如下所示:

 

程序如下:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitlcdrs=P0^0;//1602数据、命令端

sbitlcden=P0^1;//1602液晶使能端

sbitSER_595=P0^2;//串行数据输入14脚SER

sbitRCK_595=P0^3;//输出锁存器控制脉冲12脚RCK

sbitSCK_595=P0^4;//移位时钟脉冲11脚SCK

sbitBEEP=P0^5;

sbitin1=P1^0;//电机控制位

sbitin2=P1^1;

sbiten1=P1^2;

sbitin3=P1^3;

sbitin4=P1^4;

sbiten2=P1^5;

sbitX1=P2^3;

sbitX2=P2^2;

sbitX3=P2^1;

sbitX4=P2^0;

sbitF1=P1^6;

sbitF2=P1^7;

sbitY1=P0^6;//¥数

sbitIt0=P3^2;//外部中断0

sbitIt1=P3^3;//外部中断1

ucharnum0=0,t0=0,t1=0,num1=0,y=0,d=0,p1=0,p2=0;

voiddelay(uintz)

{

uintx,y;

for(x=0;x

for(y=0;y<110;y++);

}

voiddelay_s(ucharn)

{

uchari=0;

for(i=n;i>0;i--)

delay(100);

}

voidbeep()

{

BEEP=0;

delay(8);

BEEP=1;

}

voidgo_front()

{

en2=1;

en1=1;

in1=1;

in2=0;

in3=1;

in4=0;

}

voidgo_back()

{

en1=1;

en2=1;

in1=0;

in2=1;

in3=0;

in4=1;

}

voidstop()

{

en1=0;

en2=0;

in1=0;

in2=0;

in3=0;

in4=0;

}

voidturn_left()

{

en1=1;

en2=1;

in1=0;

in2=1;

in3=1;

in4=0;

}

voidturn_right()

{

en1=1;

en2=1;

in1=1;

in2=0;

in3=0;

in4=1;

}

voiddisplay_595(ucharbyte)//通过接595送数据到lcd1602

{

uchari;

for(i=0;i<8;i++)

{

SCK_595=0;

byte=byte<<1;

SER_595=CY;

SCK_595=1;

}

RCK_595=0;

RCK_595=1;

}

voidwrite_1602(ucharLcdcs,ucharCom_Date)//1602写指令和写数据

{

lcdrs=Lcdcs;//Lcdrs=0写指令,Lcdrs=1写数据

display_595(Com_Date);//指令和数据

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voidlcd1602_init()//1602初始化函数

{

lcden=0;

write_1602(0,0x38);//设置8位显示模式

write_1602(0,0x0c);//0x0c开显示,不显示光标,不闪烁;

write_1602(0,0x06);//指针加1模式,光标右移

write_1602(0,0x01);//显示清屏

write_1602(0,0x0c);//光标显示

}

voiddisplays(ucharrow,ucharcol,uchar*s)//row是行,col是列,*s为字符串

{

if(row==1)

write_1602(0,0x80+col-1);//第一行

else

write_1602(0,0xc0+col-1);//第二行

while(*s)

write_1602(1,*s++);//送字符串数据

}

voiddisplayc(ucharrow,ucharcol,uchardate)

{

if(row==1)

write_1602(0,0x80+col-1);//第一行

else

write_1602(0,0xc0+col-1);//第二行

write_1602(1,0x30+date);

}

voiddisplayz(ucharrow,ucharcol,uchardate)//三位数的处理

{

displayc(row,col,date/100);

displayc(row,col+1,date%100/10);

displayc(row,col+2,date%10);

}

voidNoway()

{

ucharf1,f2,f3,f4;//定义标志位

if(X1==1)f1=1;//循迹1

elsef1=0;

if(X2==1)f2=1;//循迹2

elsef2=0;

if(X3==1)f3=1;//循迹3

elsef3=0;

if(X4==1)f4=1;//循迹4

elsef4=0;

if((f1==1||f2==1)&&(f3==0||f4==0))

turn_left();

if((f1==0||f2==0)&&(f3==1||f4==1))

turn_right();

if(f1==1&&f2==1&&f3==0&&f4==0)

{

turn_left();beep();

}

if(f1==0&&f2==0&&f3==1&&f4==1)

{

turn_right();beep();

}

if(f1==1&&f2==1&&f3==1&&f4==0)

turn_left();

if(f1==0&&f2==1&&f3==1&&f4==1)

turn_right();

if(f1==1&&f2==1&&f3==0&&f4==1)

turn_left();

if(f1==1&&f2==0&&f3==1&&f4==1)

turn_right();

if(f1==0&&f2==0&&f3==0&&f4==0)

go_front();

if(f1==0&&f2==1&&f3==1&&f4==0)

go_front();

if(f1==1&&f2==0&&f3==0&&f4==1)

go_front();

if(f1==1&&f2==1&&f3==1&&f4==1)

{

stop();

}

}

voidpingzi()

{

ucharf1,f2;

if(F1==0)f1=1;//上面的壁障

elsef1=0;

if(F2==0)f2=1;//下面的壁障

elsef2=0;

if(f1==1&&f2==1)//检测正立的瓶子

{

It1=0;

if(It1==0)

{

p1++;

if(p1==10)

p1=0;

}

displayc(1,5,p1);//正立的瓶子数

}

if(f1==1&&f2==0)

go_front();

if(f1==0&&f2==1)//检测倒立的瓶子

{

It1=0;

if(It1==0)

{

p2++;

if(p1==10)

p1=0;

}

displayc(1,8,p2);//倒立的瓶子数

}

if(f1==0&&f2==0)

go_front();

}

voidMoney()

{

if(Y1==0)

{

if(Y1==0)

{

beep();//蜂鸣器响

It1=0;//触发中断1

while(!

Y1);

d++;//硬币数加一

}

}

displayc(2,2,d);//显示硬币数

}

voidmain()

{

lcd1602_init();

displays(1,1,"$PQT:

");

TMOD=0x11;

EA=1;

ET0=1;

TR0=1;

TH0=0x4c;

TL0=0x00;

ET1=1;

TH1=0x4c;

TL1=0x00;

TR1=0;

IT1=1;//下降沿触发

EX1=1;//打开外部中断1

IT0=1;//下降沿触发

EX0=1;//打开外部中断1

while

(1)//主循环

{

while(!

TR0)//定时90s

stop();

It1=1;//中断1置高电平

Noway();//循迹

Money();//检测硬币

pingzi();//检测瓶子

while(TR1)//定时器1

stop();

}

}

voidTime0()interrupt1

{

TH0=0x4c;

TL0=0x00;

num0++;

if(num0==20)

{

num0=0;

t0++;

if(t0==250)

{

TR0=0;

num0=0;

stop();

}

displayz(1,14,t0);

}

}

voidInit1()interrupt2

{

beep();

stop();

TR1=1;

}

voidTime1()interrupt3

{

TH1=0x4c;

TL1=0x00;

num1++;

if(num1==20)

{

num1=0;

t1++;

if(t1==2)

{

TR1=0;

go_front();

delay(1500);

It1=1;

t1=0,

num1=0;

y++;

if(y==10)

y=0;

displayc(1,2,y);

}

}

}

 

6.参考文献

【1】吴黎明第一版《单片机原理及应用技术》

【2】谭浩强第二版《C程序设计》

【3】《LAB2000系列单片机实验系统实验指导书》

【4】《单片机C语言入门教程》

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2