我的小车报告.docx
- 文档编号:17007417
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:25
- 大小:160.76KB
我的小车报告.docx
《我的小车报告.docx》由会员分享,可在线阅读,更多相关《我的小车报告.docx(25页珍藏版)》请在冰点文库上搜索。
我的小车报告
洛阳理工学院
智能寻迹小车实习报告
专业
班级
学号
姓名
完成日期
智能寻迹小车的设计
IntelligentTracingCarDesign
摘要
在智能寻迹小车控制系统的设计中,以AT89C51为核心,用L298N驱动两个减速电机,当产生信号驱动小车前进时,是通过寻迹模块里的红外对管是否寻到黑线产生的电平信号通过LM393再返回到单片机,单片机根据程序设计的要求做出相应的判断送给电机驱动模块,让小车来实现前进、左转、右转、停车等基本功能。
寻白线时,外部环境光线的强弱对小车的运动会产生很大的影响,基于此原因,本实验中的寻迹是指在白色地板上寻黑线。
寻迹是指通过红外发射管和接收管识别路径。
本实验的重点有三个方面:
1.硬件的设计实现;2.软件的设计实现;3.方案的比较与论证。
报告共分为五章:
第一章是智能小车总体概况。
介绍了小车的功能及展示了小车模型。
第二章是系统要求。
介绍了小车设计的要求及寻迹的原理。
详细阐述了各模块的方案比较与论证,最后得出最终方案。
第三章是硬件实现及单元电路实现。
详细阐述了各部分电路的设计,并给出了原理图。
第四章是软件设计。
介绍了设计思想、程序流程图及具体程序设计。
第五章是系统调试。
介绍了调试软件WAVE,以及软件调试过程;硬件测试及测试仪器和设备等。
最后是参考文献和附录。
关键词:
直流电机红外对管L298N识别路径智能寻迹小车
ABSTRACT
Intheintelligenttracingcarcontrolsystemdesign,USESAT89C51asthecore,withL298Ndrivengearmotor,whentwosignaldrivenforwardbycartracingmodule,theinfraredonwhethertoproducelevelsignalsthroughtheblackLM393single-chipmicrocontroller,returnagainaccordingtotherequirementofdesignprocedureofjudgmentformotordrivermodule,letthecartoachieveprogress,left,right,thebasicfunctionsuchasparking.
Findthewhiteline,andtheexternalenvironmentofthestrengthofthelightofsportscarproduceverybigeffect,thisbasedontheexperimentsoftracingreferstothewhitestripedfloorfound.
Tracingisthroughinfraredtubesandreceivetuberecognitionpath.
Thekeyofthisexperimenthasthreeaspects:
1.Thedesignofhardware,2.thesoftwaredesignandimplementation,Comparedwiththethreeschemes.
Reportisdividedintofivechapters:
Thefirstchapterisintelligentcaroverview.Introducesthefunctionandthecarshowcarmodel.
Chapter2isthesystemrequirements.Introducesthedesignrequirementandcartracingprinciple.Eachmoduleindetailtheplanisdemonstrated,andfinallyreachedafinaldesign.
Thethirdchapterishardwarerealizationandunitcircuitimplementation.Expoundseachpartofthecircuitdesign,andgivestheprinciplediagram.
Chapterfourisasoftwaredesign.Introducesthedesignideaandprogramflowchartanddesignprogram.
Thefifthchapterisdebuggingsystems.IntroducestheWAVE,andsoftwaretestingsoftwaredebuggingprocess,Hardwaretestingandtestinginstrumentsandequipment,etc.
Thereferencesandappendix.
Keywords:
dcmotorInfraredtotubeL298Nrecognitiononthepathofinfraredintelligenttracingcar
实习内容与要求
一.实习目的
通过课程设计,主要达到以下目的:
(1)自动寻迹小车能正常启动。
(2)小车按指定路线运行,沿地面上的一条黑色的圆圈形胶带行进。
(3)在无人工干预条件下可进行前进、左转、右转。
二.实习原理
利用SST系列单片机作为微控制器开发一套软、硬件结合的单片机实验平台,主要包括以下内容:
1.电路原理图设计,主要包括集LCD显示模块、串口通信模块、数码管显示模块、LED发光二极管、键盘等接口电路的设计。
循迹是指小车在黑色地板上循白线行走,通常采取的方法是红外探测法。
红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。
单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。
红外探测器探测距离有限,一般最大不应超过3cm。
电路原理图设计如下:
系统流程:
2.集成电路实际元器件的识别,
(1)寻迹模块部分:
小车运用光电对管进行寻路。
一对光电开关的发射管不停的发射红外光,经过路面反射回来被接收管接收到。
光电管要放置在离地面4毫米左右的地方才能正确判断电平。
白色路面和黑线对光的反射不同,输出电压的较小值和较大值与一个居中的基准电压分别进行比较,对应比较器的输出端分别为高电平和低电平,并进一步输出给单片机,同时对应指示发光管的不亮与亮。
当移动到胶带时,输出为高电平,单片机的P口进行电位判断,做出向左或向右的操作。
如图:
(2)单片机最小系统部分:
单片机的最小系统由电源,晶振,复位电路和单片机内装入程序组成。
其中需要注意的是,EA(31脚)也要接高电平,即接到电源+5V。
单片机电路若是缺少其中某个系统则无法正常工作。
如图:
(3)电机驱动模块部分:
为小车提供运动的动力就是机驱动模块部分。
根据路面循迹模块电路返回的路面情况信号来驱动对应的点击,使小车能够沿着黑色的道路前进到重点。
当三极管导通时,电机的输出电压为VCC,当三极管截止时,电机停止工作,则电机的电压为0。
给单片机脉冲端输入一个方波信号,上升沿时,电机工作,下降沿时,电机不工作。
,要注意的是要先将路面循迹模块电路输出的信号提供给单片机做作出分析后,再由单片机输出相应的电压信号供给电机驱动模块电路,实现相应的功能。
如图:
三.实习内容
此次实训中,制作一个寻迹小车。
当小车在白色地面行驶时,装在车下的红外发射管向地面发射红外线信号,利用路面循迹模块电路负责检测路面上的信息,区分黑色与白色并形成相对应的高低电平提供给单片机,此时单片机对路面循迹模块提供的电平进行分析来控制小车的起步、直行、左转、右转和停止,经白色地面反射后,被接收管接收,一旦接收管收到信号后,那么光敏三极管将导通,比较器输出为低电平。
当小车行驶到黑色的引导线时,红外线信号被黑色吸收,光敏三极管被截止,比较器输出高电平,从而实现了通过红外线检测信号的功能。
总体设计
本设计的小车硬件设计分为两部分,一部分是机械设计,一部分是电路设计。
机械设计主要是对小车的机械部件进行选件与组装。
电路设计是对核心单片机、还有复位操作方式、晶振频率、传感器电路设计、电源管理模块、驱动模块进行介绍。
系统框架图如图1.1
图1.1系统框架图说明
智能寻迹小车能寻迹主要是由前方的两对红外发射与接收探头来完成的。
根据光有反射的特性。
所以说当红外发射出来的光线遇到物体时,就会形成反射的光线,而这个经反射的红外光线刚好被红外接收探头接收到。
当红外接收探头接收到信号后,再将信号送到单片机由单片机内部程序来控制电机,由电机完成小车的前进,转向。
四.小车的安装
小车的安装过程主要分电路焊接和机械组装两部分:
电路焊接首先焊接电阻,焊接时务必用万用表确认阻值,接下来焊接有极性的元件,尽量参考我们图片的元件方向焊接,焊接电容时引脚长的是正极,焊接绿色LED时注意引脚长的是正极,并且焊接时间不能太长容易焊坏,D1D2RG1RG2可以暂时不焊,安装集成电路芯片时注意缺口的方向,初步焊接完成后请务必细心核对,防止粗心大意。
机械部分组装需要一定的动手经验,首先安装白色的尼龙车轮,将电机的轴对准车轮中心孔确保垂直慢慢塞入。
电机是通过专用螺丝固定在电路板上的,专用螺丝的安装有一定的步骤:
首先不要紧固两个螺母,将电机塞入抱箍后顺时针旋紧螺栓,注意力度确保电机安装牢固,再依次紧固两个螺母,这样螺丝就能牢牢固定在电路板上了,最后装上黑色橡胶轮胎,这时可以将电机接通3V直流电压试运行一下,看看轮子运行是否平稳,高度是否合适。
五.软件设计
#include
typedefunsignedcharuchar;//重定义char数据类型
typedefunsignedintuint;//重定义int数据类型
#defineShowPortP2//定义数码管显示端口
ucharcodeLedShowData[]={0x03,0x9F,0x25,0x0D,0x99,//定义数码管显示数据
0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9
staticunsignedintRecvData;//定义接收红外数据变量
staticunsignedcharCountData;//定义红外个数计数变量
staticunsignedcharAddData;//定义自增变量
staticunsignedintLedFlash;//定义闪动频率计数变量
unsignedcharHeardData;//定义接收到数据的高位变量
bitRunFlag=0;//定义运行标志位
bitEnableLight=0;//定义指示灯使能位
/***********完成基本数据变量定义**************/
sbitS1State=P1^0;//定义S1状态标志位
sbitS2State=P1^1;//定义S2状态标志位
sbitB1State=P1^2;//定义B1状态标志位
sbitIRState=P1^3;//定义IR状态标志位
sbitRunStopState=P1^4;//定义运行停止标志位
sbitFontIRState=P1^5;//定义FontIR状态标志位
sbitLeftIRState=P1^6;//定义LeftIR状态标志位
sbitRightIRState=P1^7;//定义RightIRState状态标志位
/*************完成状态指示灯定义*************/
sbitS1=P3^2;//定义S1按键端口
sbitS2=P3^4;//定义S2按键端口
/*************完成按键端口的定义*************/
sbitLeftLed=P2^0;//定义前方左侧指示灯端口
sbitRightLed=P0^7;//定义前方右侧指示灯端口
/*************完成前方指示灯端口定义*********/
sbitLeftIR=P3^5;//定义前方左侧红外探头
sbitRightIR=P3^6;//定义前主右侧红外探头
sbitFontIR=P3^7;//定义正前方红外探头
/*************完成红外探头端口定义***********/
sbitM1A=P0^0;//定义电机1正向端口
sbitM1B=P0^1;//定义电机1反向端口
sbitM2A=P0^2;//定义电机2正向端口
sbitM2B=P0^3;//定义电机2反向端口
/*************完成电机端口定义***************/
sbitB1=P0^4;//定义话筒传感器端口
sbitRL1=P0^5;//定义光敏电阻端口
sbitSB1=P0^6;//定义蜂鸣端口
/*********完成话筒,光敏电阻,蜂鸣器.端口定义**/
sbitIR1=P3^3;//定义红外接收端口
/*********完成红外接收端口的定义*************/
voidDelay()//定义延时子程序
{uintDelayTime=30000;//定义延时时间变量
while(DelayTime--);//开始进行延时循环
return;//子程序返回
}
voidControlCar(ucharCarType)//定义小车控制子程序
{
M1A=0;//将电机1正向电平置低
M1B=0;//将电机1反向电平置低
M2A=0;//将电机2正向电平置低
M2B=0;//将电机2反向电平置低
LeftLed=1;//关闭前方左侧指示灯
RightLed=1;//关闭前方右侧指示灯
Delay();//将此状态延时一段时间
switch(CarType)//判断小车控制指令类型
{case1:
//前进//判断是否是前进
{M1A=1;//将电机1正向端口置高
M2A=1;//将电机2正向端口置高
ShowPort=LedShowData[1];//数码管显示前进状态
break;//退出判断
}
case2:
//后退//判断是否是后退
{M1B=1;//将电机1反向端口置高
M2B=1;//将电机2反向端口置高
ShowPort=LedShowData[2];//数码管显示后退状态
RightLed=0;//将前方右侧指示灯置低(亮)
LeftLed=0;//将前方左侧指示灯置低(亮)
break;//退出判断
}
case3:
//左转//判断是否是左转
{M1B=1;//将电机1反向端口置高
M2A=1;//将电机2正向端口置高
ShowPort=LedShowData[3];//数码管显示左转状态
LeftLed=0;//将前方左侧指示灯置低(亮)
break;//退出判断
}
case4:
//右转//判断是否是右转
{M1A=1;//将电机1正向端口置高
M2B=1;//将电机2反向端口置高
ShowPort=LedShowData[4];//数码管显示右转状态
RightLed=0;//将前方右侧指示灯置低(亮)
break;//退出判断
}
default:
//默认情况下的判断
{
break;//直接退出判断
}
}
}
voidTimer0_IR1()interrupt1using3//定义红外定时器子程序
{
TH0=0xFF;//向定时器定时间寄存器填入高八位值
TL0=0x19;//向定时器定时间寄存器填入低八位值
AddData++;//自增变量加1
}
voidInt1_IR1()interrupt2//定义红外接收中断子程序
{
TR1=0;//将定时/计数器1关闭
IRState=!
IRState;//将红外接收指示灯状态取反
if(4==AddData)//0//判断接收到的数据是0
{
RecvData=RecvData|0;//判断到0就将当前位写0
RecvData=RecvData<<1;//将当前位向左移动1位
}
elseif(8==AddData)//1//判断接收到的数据是1
{
RecvData=RecvData|1;//将当前位写1
RecvData=RecvData<<1;//将当前位向左移动1位
}
CountData++;//将红外接收位计数器加1
if(CountData==8)//判断是否接收到8位数据
{
HeardData=RecvData;//是8位数据时,则将数据暂存到高位变量中
}
elseif(CountData==16)//判断是否接收到16位数据
{
ET0=0;//关闭红外定时器0
EX1=0;//关闭红外外部中断1
TR1=1;//打开定时/计数器1
AddData=0;//定时时间间隔变量清零
if(HeardData==226||HeardData==112)//判断用户码是否正确
{
HeardData=RecvData;//取出接收到的低八位数据
switch(HeardData)//判断低八位数据的值下列那一位
{
case32:
//电源//说明按下了电源键
{//在这里填写你自己的代码//根据你的功能自己写
ControlCar(8);//将小车停止
RunFlag==1;//将运行标志位置1
break;//返回
}
case46:
//TV/AV//说明按下了TV/AV键
{//在这里填写你自己的代码//根据你的功能自己写
break;//返回
}
case0:
//1//说明按下数字1键
{ShowPort=LedShowData[1];//数码管显示数字1
ControlCar
(1);//将小车置于前进状态
break;//返回
}
case8:
//2//说明按下了数字2键
{ShowPort=LedShowData[2];//数码管显示数字2
ControlCar
(2);//将小车置于后退状态
break;//返回
}
case4:
//3//说明按下了数字3键
{ShowPort=LedShowData[3];//数码管显示数字3
ControlCar(3);//将小车置于左转状态
break;//返回
}
case12:
//4//说明按下了数字4键
{ShowPort=LedShowData[4];//数码管显示数字4
ControlCar(4);//将小车置于右转状态
break;//返回
}
case2:
//5//说明按下了数字5键
{ShowPort=LedShowData[5];//数码管显示数字5
break;//返回
}
case10:
//6//说明按下了数字6键
{ShowPort=LedShowData[6];//数码管显示数字6
break;//返回
}
case6:
//7//说明按下了数字7键
{ShowPort=LedShowData[7];//数码管显示数字7
break;//返回
}
case14:
//8//说明按下了数字8键
{ShowPort=LedShowData[8];//数码管显示数字8
break;//返回
}
case64:
//9//说明按下了数字9键
{ShowPort=LedShowData[9];//数码管显示数字9
break;//返回
}
case72:
//0/30//说明按下0/30键
{ShowPort=LedShowData[0];//数码管显示数字0
break;//返回
}
case68:
//10+//说明按下10+键
{//在这里填写你自己的代码//根据你的功能写代码
break;//返回
}
case76:
//20+//说明按下了20+键
{//在这里填写你自己的代码//根据你的功能写代码
break;//返回
}
case36:
//CH-//说明按下了CH-键
{//在这里填写你自己的代码//根据你的功能写代码
break;//返回
}
case40:
//CH+//说明按下了CH+键
{//在这里填写你自己的代码//根据你的功能写代码
break;//返回
}
}
}
RecvData=0;//将接收到的数据清零
CountData=0;//将接收计数器清零
HeardData=0;//将接收高低数据变量清零
return;//返回
}
AddData=0;//将定时器计数器清零
ET0=1;//打开定时器中断
}
voidComBreak()interrupt4//定义串口通信子程序
{unsignedcharRecvData;//定义串口数据接收变量
if(RI==1)//判断是否接收数据
{RecvData=SBUF;//将接收到的数据放入暂时变量
if(RecvData<10)//判断接收到的数据是否小于10
{
ShowPort=LedShowData[RecvData];//将接收到的数据通过数码管显示出来
ControlCar(RecvData);//将串口数据置于小于状态
}
SBUF=RecvData;//向电脑返回当前接收到的数据
RI=0;//清除接收中断标志位
}
if(TI==1)//判断是否是发送中断
{
TI=0;//清除发送中断标志位
}
}
voidmain(voi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小车 报告