《基于光电传感器的智能小车循迹模块设计.doc》由会员分享,可在线阅读,更多相关《基于光电传感器的智能小车循迹模块设计.doc(24页珍藏版)》请在三一办公上搜索。
1、精选优质文档-倾情为你奉上【注】本课程设计既可以作为传感器课程设计也可以作为单片机课程设计,只需稍加修改偏向课程设计报告书 课程名称: 题 目:基于光电传感器的智能小车寻迹模块设计 系 (院): 学 期: 专业班级: 姓 名: 学 号: 评语:成绩:签名:日期:专心-专注-专业目录智能小车寻迹模块设计报告一、设计目的1. 能较全面地巩固和应用“传感器及检测技术”课程中所学的基本理论和基本方法,并初步掌握小型数字系统设计的基本方法。2. 通过传感器及检测技术课程设计,掌握传感器及检测系统设计的方法和设计原则及相应的硬件调试的方法。进一步理解传感器及检测系统的设计和应用。 3. 培养独立思考、独立
2、准备资料、独立设计规定功能的数字系统的能力。4. 培养书写综合设计报告的能力。二、题目的具体设计要求1.设计一个基于光电传感器的自动寻迹小车,使小车能够自动检测地面黑色轨迹,并沿着黑色轨迹行驶。2.当地面黑线方向发生变化时,小车要能够及时作出调整,进行恰当的转向。三、系统的总体实现原理、方案设计1.国内外发展现状世界上许多国家都在积极进行智能车辆的研究和开发设计,智能小车在各个领域都具有广泛的应用前景。在工业生产中,可以代替人类完成恶劣环境下的货物搬运、设备检测等任务;在军事上,可以在危险地带代替人类完成侦察、排雷等任务;在民用上,可以作为导盲车为盲人提供帮助;在科学研究方面,可以代替人类完成
3、外星球勘探或者矿藏勘探等。目前智能行走机器人智能小车的研究正向复杂型、智能型、自主型发展,智能车与人类生活联系得越来越紧密,是一个相当活跃的研究领域。2.文献综述本设计是基于光电传感器的简易自动寻迹小车系统。小车利用光电传感器对路面黑色轨迹进行检测,并将路面检测信号反馈给单片机,并以AT89C51单片机为控制核心,对采集到的信号予以分析判断,并产生PWM波,控制小车左右轮速度使小车及时转向,从而使小车沿着黑色轨迹自动行驶,实现小车自动寻迹的目的。3.系统的总体实现原理这里的循迹是指小车在白色地板上循黑线行走,由于黑线和白色地板对光线的反射系数不同,可以根据传感器接收到反射光的强弱来判断“道路”
4、。本设计包括硬件和软件设计两个部分。模块划分为电源模块、光电传感器检测模块、主控电路模块、电机及驱动模块等子模块。系统的结构框图如图2-1 所示。电源模块驱动模块电压比较器减速电机主控模块光电传感器图2-1系统的结构框图4.总体方案设计根据要求,确定如下方案:在小车上加装四个红外光电传感器,实现对电动车的位置、运行状况的检测,并将测量数据传送至AT89C51单片机进行处理,然后由单片机根据所检测的数据实现对智能小车的控制。这种方案能对智能小车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足课题要求。4.1主控模块选用方案对比 方案一:选用一片CPLD作为系统的核心部件,实现控制与处理的功
5、能。CPLD具有速度快、编程容易、资源丰富、开发周期短等优点,可利用VHDL语言进行编写开发。虽然CPLD的处理速度非常快,但小车的行进速度不可能太高,那么对系统处理信息的要求也就不会太高,若采用该方案,不仅在控制上会遇到许许多多不必要增加的难题,而且成本较高,造成资源的浪费。 方案二:采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。系统的关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。因此,这种方案是一种较为理想的方案。AT89
6、C51单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,而且AT89C51单片机价格非常低廉,具有较高的性价比。综合考虑后决定选用AT89C51单片机作为主控芯片。4.2传感器选用方案对比 方案一:采用光敏电阻作光电传感器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。但是这种方案受外界光照影响很大,不能够稳定的工作。 方案二:采用ST系列反射式光电传感器。这个系列的传感器种类齐
7、全、价格便宜、体积小、使用方便、质量可靠、用途广泛。采用ST188作为红外光电传感器,当检测到黑色区域,二极管发射的红外线没有反射到光敏接收三极管,三极管截止 ;若检测到白色区域,接收三极管接收到二极管发射的红外线,三极管导通,满足要求,故选用性价比较高的ST188红外光电传感器。4.3传感器的安装方案对比 方案一:采用两个红外光电传感器,分别放置在电动车车头的左、右两个方向,用来控制小车的行走方向。此方案虽然可以较好地循迹,但由于转向后的惯性,小车会沿着黑线大幅摆动。 方案二:采用三个红外传感器,一个置于轨道中间,两个置于轨道外侧,当小车脱离轨道时,置于中间的一个红外传感器接收到光线,等待外
8、面任一个检测到黑线后,做出相应的转向调整,直到中间的红外传感器重新检测到黑线再恢复正向行驶。此方案能使小车较稳定地沿黑线行驶,但小车在遇到大幅转弯时会直接冲出轨道。 方案三:采用4个红外传感器,具体位置如图2.2.3所示。图2.2.3 传感器安装图 四个循迹传感器全部在一条直线上。其中X1与Y1为第一级方向控制传感器,X2与Y2为第二级方向控制传感器,并且黑线同一边的两个传感器之间的宽度不大于黑线的宽度。小车前进时,始终保持在X1和Y1这两个第一级传感器之间,当小车偏离黑线时,第一级传感器就能检测到黑线,把检测的信号送给单片机,单片机发出信号对小车轨迹予以纠正。若小车回到了轨道上,即4个传感器
9、都接收到光线,则小车会继续行走;若小车由于惯性过大依旧偏离轨道,越出了第一级两个传感器的探测范围,这时第二级传感器检测到并加大偏转力度,使小车迅速回到正确轨道上去。第二级传感器作为第一级的后备保护,使小车纠正方向的速度显著提高,大大减小冲出跑道的可能,从而提高了小车循迹的可靠性,故采用此方案。 四、传感器选用1.选用型号及特点红外传感器ST188,采用高发射功率红外光电二极管和高灵敏度光电晶体管组成,检测距离可调整范围大,4-13mm 可用,采用非接触检测方式。2.内部结构及工作原理含一个反射模块(发光二极管)和一个接收模块(光敏三极管)。通过发射红外信号,看接收信号变化判断检测物体状态的变化
10、。A、K之间接发光二极管,C、E之间接光敏三极管(二者在电路中均正接,但要串联一定阻值的电阻) 图 4-1 ST188实物图 发光器和收光器在同一个装置内,利用反射原理完成光电控制作用。正常情况下,发光器发出的光反射回来被收光器收到;一旦光路被检测物挡住,收光器收不到光时,光电开关就动作,输出一个开关控制信号。 图 4-2 ST188管脚图及内部电路3.传感器工作电路设计及说明图 4-3传感器模块电路图发光二极管不断发光,当照射到黑色线时,光电管接收不到反光,电路相当于断开,电压比较器的正输入端为高电平,经过LM234比较器整形后,输出一个高电平以传入单片机。照射到白色时,发光二极管发射的光线
11、被光电管接收到,电路相当于闭合,输出低电平。其中滑动变阻器可以调节LM324的门限电压。LM324为四运放集成电路,采用14脚双列直插塑料封装。内部有四个运算放大器,有相位补偿电路。电路功耗很小,工作电压范围宽,可用正电源330V,或正负双电源15V15V工作。在黑线检测电路中用来确定红外接收信号电平的高低,以电平高低判定黑线有无。在电路中,LM324的一个输入端需接滑动变阻器,通过改变滑动变阻器的阻值来提供合适的比较电压。 图 4-5 LM324内部电路 图 4-6 集成运放的管脚图五、其它各部分单元电路设计1.控制模块图5-1 时钟电路和复位电路AT89C51单片机是美国Atm el公司生
12、产低电压,高性能CMOS 8位单片机,片内含4KB的可反复擦写的只读程序存储器(EPROM)和128 B的随机存取数据存储器(RAM),器件采用Atm el公司的高密度、非易失性存取技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash 存储单元,功能强大。AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。在这一块芯片上,集成了一台微型计算机的主要组成部分,其中包括CPU、存储器、可编程I/O口、定时器/计数器、串行口等,各部分通过内部总线相连。时钟电路和复位电路 如图5-1(与单片机构成最小系统)1)采用外部时钟,晶振频率为12MHZ
13、2)采用按键复位2.电源模块电源采用双路开关电源。明伟牌D-30W双路开关电源。输出(5V、12V)。实物图如图5-2所示。 图5-2双路开关电源该开关电源尺寸为129X98X38mm,交流输入转换由开关选择,具有过流短路保护功能,能自冷散热。低价位、高可靠。3.电机及驱动模块3.1电机电机采用直流减速电机,直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便。由于其内部由高速电动机提供原始动力,带动变速(减速)齿轮组,可以产生较大扭力。可选用减速比为1:74 的直流电机,减速后电机的转速为100r/min。若车轮直径为6cm,则小车的最大速度可以达到0.314m/s能够较好的满足系统的
14、要求。3.2驱动驱动模块采用专用芯片L298N 作为电机驱动芯片,L298N 是一个具有高电压大电流的全桥驱动芯片,其响应频率高,一片L298N可以分别控制两个直流电机。以下为L298N的引脚图和输入输出关系表。 图3-9 L298N外部引脚 表2 L298N输入输出关系停止是内的磁场不再旋转,这一固定的磁场所产生的力矩也称为迫使不再转动。刹车是为了确保的定位准确性,在之外再增加磨擦力迫使电机不再转动,由快到慢分别为正转、停止、刹停和反转。本设计用到电机的正转和停止,即一级转向为一个车轮高速正转,一个车轮低速正转;二级转向为一个车轮高速正转,一个车轮停转。驱动电路的设计如图3-10 所示: 图
15、3-10 L298N电机驱动电路L298N 的5、7、10、12 四个引脚接到单片机上,通过对单片机的编程就可实现两个直流电机的PWM调速控制。六、系统总电路原理图(见附录三)1.系统总体说明当光电传感器开始接受信号,通过比较器将信号传入单片机中。小车进入寻迹模式,即开始不停地扫描与探测器连接的单片I/O 口,一旦检测到某个I/O 口有信号变化,就执行相应的判断程序,把相应的信号发送给电动机从而纠正小车的运行轨迹。单片机采用T0定时计数器,通过产生PWM波,控制电机转速。系统采用PWM来调节直流电机的速度。PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一
16、种电压调整方法。PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。因此,PWM又被称为“开关驱动装置”。在脉冲作用下,当电机通电时,速度增加;电机断电时,速度逐渐减少。只要按一定规律,改变通、断电的时间,即可让电机转速得到控制。本系统中通过控制51单片机的定时器T0的初值,从而可以实现P0.4和P0.5输出口输出不同占空比的脉冲波形。定时计数器若干时间(比如0.1ms)中断一次, 就使P
17、0.4或P0.5产生一个高电平或低电平。将直流电机的速度分为100个等级, 因此一个周期就有个100脉冲, 周期为100个脉冲的时间。速度等级对应一个周期的高电平脉冲的个数。占空比为高电平脉冲个数占一个周期总脉冲个数的百分数。一个周期加在电机两端的电压为脉冲高电压乘以占空比。占空比越大, 加在电机两端的电压越大, 电机转动越快。电机的平均速度等于在一定的占空比下电机的最大速度乘以占空比。当我们改变占空比时, 就可以得到不同的电机平均速度, 从而达到调速的目的。精确地讲, 平均速度与占空比并不是严格的线性关系, 在一般的应用中, 可以将其近似地看成线性关系。2.软件设计2.1小车循迹流程图小车进
18、入循迹模式后,即开始不停地扫描与探测器连接的单片机I/O口,一旦检测到某个I/O口有信号,即进入判断处理程序,先确定4个探测器中的哪一个探测到了黑线,如果左面第一级传感器或者左面第二级传感器探测到黑线,即小车左半部分压到黑线,车身向右偏出,此时应使小车向左转;如果是右面第一级传感器或右面第二级传感器探测到了黑线,即车身右半部压住黑线,小车向左偏出了轨迹,则应使小车向右转。在经过了方向调整后,小车再继续向前行走,并继续探测黑线重复上述动作。循迹流程图如图4-2所示图4-2循迹流程图启动循迹模式探测黑线是否检测到黑线判断处理程序向左转Turn_left2向左转Turn_left1向右转Turn_r
19、ight1向右转Turn_Lright2继续前进NY由于第二级方向控制为第一级的后备,则两个等级间的转向力度必须相互配合。第二级通常是在超出第一级的控制范围的情况下发生作用,它也是最后一层保护,所以它必须要保证小车回到正确轨迹上来,则使第二级转向力度大于第一级,其大小通过改变单片机输出的占空比的大小来改变,具体数值在实地实验中得到。2.2中断程序流程图这里利用的是51单片机的T0定时计数器,从而让单片机P0口的P0.4和P0.5引脚输出占空比不同的方波, 然后经驱动芯片放大后控制直流电机。定时计数器若干时间(比如0.1ms)比如中断一次, 就使P0.4或P0.5产生一个高电平或低电平。中断程序
20、流程图如图4-3所示定时器赋初值技术变量赋值t=0计数值t占空比?P0.4和P0.5输出高电平P0.4和P0.5输出低电平计数变量t加1开始结束YN图4-3中断程序流程图七、仿真与调试(见附录四)本设计通过利用Proteus仿真,将所编写的程序用Keil C软件编译,所仿真原理图见附录四。当红外光电传感器没有检测到黑线,左右车轮高速转动,小车直行;当左边一级红外光电传感器检测到黑线时,小车左轮高速正转,右轮低速正转,实现一级左转;当左边二级红外光电传感器检测到黑线时,小车左轮高速正转,右轮停止转动,实现二级右转;当右边一级红外光电传感器检测到黑线时,小车右轮高速正转,左轮低速正转,实现一级右转
21、;当右边二级红外光电传感器检测到黑线时,小车右轮高速正转,左轮停止转动,实现二级左转。八、总结与心得体会根据本次设计要求,我们小组并认真分析了设计课题的需求,系统地阅读了大量的相关资料,比较成功地实现了了设计要求,虽然存在一些不足,比如小车只能在一定范围内循迹,因为选用的光电传感器探测距离有限,如果完全脱离轨迹跑出黑线后很难自动重回轨迹,但是我还是有很大的收获。我不仅复习了这学期刚学过的C51单片机的工作原理及其使用方法,尝试编写程序并调试成功,还对光电传感器的特点与选用做了深入的分析和研究,对电路以及模电知识做了一个简单的回顾,也学习了利用protel和proteus进行系统电路的绘制与仿真
22、,使以前所学的相关专业知识得到了综合与运用,让它们相互关联,发挥各自所长。在设计过程中我体会到理论结合实际的重要性,只有综合性能、体积、价格等多方面的因素,才能选用高性价比的元件,电路在能实现系统功能的前提下要尽可能的简明易连,需经过反复查阅和修改才能不断完善。在今后我会再接再厉,不断完善自己的理论知识,提高实践动手能力并努力做得更好。参考文献 1童诗白 华成英.模拟电子技术基础(第四版)M.高等教育出版社,20062朱定华 戴颖颖 李川香.单片微机原理、汇编与C51及接口技术M. 清华大学出版社,20133魏学业.传感器与检测技术M.人民邮电出版社,20124阎石.数字电子技术基础(第五版)
23、M.高等教育出版社.20065高锋.单片微型计算机原理与接口技术M.科学出版社.20036 宋健 姜军生 赵文亮. 基于单片机的直流电动机PWM调速系统J.农机化研究.2006,(1):102-1037 王晶 翁显耀 梁业宗.自动寻迹小车的传感器模块设计M.武汉理工大学自动化学院8 刘迎春.传感器原理设计与应用M.国防科技大学出版社.1992附录一:元器件清单小车模型1辆黑色胶布1卷AT89C51单片机1块ST188作为红外检测传感器4个LM324比较器1块明伟牌D-30W双路开关电源1个直流减速电机1个L298N电机驱动芯片1块导线、不同值的电阻、电容若干附录二:单片机测试程序#includ
24、e#define uchar unsigned char#define uint unsigned intunsigned char zkb1=0 ; /*左边电机的占空比*/unsigned char zkb2=0 ; /*右边电机的占空比*/unsigned char t=0; /*定时器中断计数器*/sbit RSEN2=P10;sbit RSEN1=P11;sbit LSEN1=P12;sbit LSEN2=P13;sbit IN1=P00;sbit IN2=P01;sbit IN3=P02;sbit IN4=P03;sbit ENA=P04;sbit ENB=P05;/*延时函数*/
25、void delay(int z) while (z-); /*初始化定时器,中断*/void init() TMOD=0x01; TH0=(65536-100)/256; TL0=(65536-100)%256; EA=1; ET0=1; TR0=1; /*中断函数+脉宽调制*/void timer0() interrupt 1 if(tzkb1) ENA=1; else ENA=0; if(t=100) t=0;/*直行*/void qianjin() zkb1=30; zkb2=30;/*左转函数1*/void turn_left1() zkb1=0; zkb2=50;/*左转函数2*/
26、void turn_left2() zkb1=0; zkb2=60;/*右转函数1*/void turn_right1() zkb1=50; zkb2=0;/*右转函数2*/void turn_right2() zkb1=60; zkb2=0;/*循迹函数*/void xunji() uchar flag; if(RSEN2=1)&(RSEN1=1)&(LSEN2=1)&(LSEN1=1) flag=0; /*直行*/ else if(RSEN2=0)&(RSEN1=1)&(LSEN2=1)&(LSEN1=1) flag=1; /*左偏2,右转2*/ else if(RSEN2=0)&(RSE
27、N1=0)&(LSEN2=1)&(LSEN1=1) flag=2; /*左偏1,右转1*/ else if(RSEN2=1)&(RSEN1=1)&(LSEN2=0)&(LSEN1=0) flag=3; /*右偏1,左转1*/ else if(RSEN2=1)&(RSEN1=1)&(LSEN2=0)&(LSEN1=1) flag=4; /*右偏2,左转2*/ switch (flag) case 0:qianjin(); break; case 1:turn_right1(); break; case 2:turn_right2(); break; case 3:turn_left1(); break; case 4:turn_left2(); break; default: break; /*主程序*/void main() init(); zkb1=30; zkb2=30; while(1) IN1=1; /*给电机加电启动*/ IN2=0; IN3=1; IN4=0; ENA=1; ENB=1;while(1) xunji(); /*寻迹*/ 附录三:系统总电路原理图附录四:Proteus原理仿真图1.直行2.二级右转3.二级左转