毕业设计智能循迹避障小车设计

上传人:仙*** 文档编号:31436810 上传时间:2021-10-12 格式:DOC 页数:35 大小:644KB
返回 下载 相关 举报
毕业设计智能循迹避障小车设计_第1页
第1页 / 共35页
毕业设计智能循迹避障小车设计_第2页
第2页 / 共35页
毕业设计智能循迹避障小车设计_第3页
第3页 / 共35页
点击查看更多>>
资源描述
单片机系统课程设计轮式移动机器人的设计 学院: 通信与电子工程学院班级: 电子131姓名: 初清晨学号: 2013131013同组成员: 孟庆阳 张轩指导老师: 王艳春日期: 2015年12月24日组 员 分 工1、组长:张 轩 ,实物焊接,报告整理,程序设计2、组员:孟庆阳 ,实物焊接,仿真测试,报告整理3、组员:初清晨 ,实物焊接,报告整理,仿真测试目录摘要1第一章 绪论21.1智能小车的意义和作用21.2智能小车的现状3第二章 方案设计与论证32.1 主控系统32.2 电机驱动模块42.3 循迹模块52.4 避障模块62.5 机械系统72.6电源模块7第三章 硬件设计73.1 AT89S52单片机的简介83.2总体设计113.3驱动电路123.4信号检测模块133.5主控电路14第四章 软件设计154.1主程序框图154.2电机驱动程序154.3循迹模块164.4避障模块20结束语25致谢26附录一 循迹加红外避障综合程序28附录二 实物图32摘要随着计算机、微电子、信息技术的快速进步,智能化技术的开发速度越来越快,智能度越来越高,应用范围也得到了极大的扩展。智能作为现代的新发明,是以后的发展方向,它可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等用途。智能电动小车就是其中的一个体现。设计者可以通过软件编程实现它的行进、循迹、停止的精确控制以及检测数据的存储、显示,无需人工干预。因此,智能电动小车具有再编程的特性,是机器人的一种。本设计采用AT89S52单片机加电机驱动电路和红外遥控及循迹模块还有红外接收一体化传感器设计而成,采用模块化的设计方案,运用红外遥控器控制小车的前进、后退、左转、右转、启动和停止。关键词:智能小车;STC89C52单片机;L9110;红外对管 Intelligent tracking and obstacle-avoid carAbstract:Based infrared detection of black lines and the road obstacles, and use a STC89C52 MCU as the controlling core for the speed and direction, A electronic drived, which can automatic track and avoid the obstacle, was designed and fabricated. In which, the car is drived by the L298N circuit, its speed is controlled by the output PWM signal from the STC89C52.Keywords: Smart Car; STC89C52 MCU; L298N; Infrared Emitting Diode 第一章 绪论 1.1智能小车的意义和作用 自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。随着科学技术的发展,机器人的感觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。视觉的典型应用领域为自主式智能导航系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。视觉传感器的核心器件是摄像管或CCD,目前的CCD已能做到自动聚焦。但CCD传感器的价格、体积和使用方式上并不占优势,因此在不要求清晰图像只需要粗略感觉的系统中考虑使用接近觉传感器是一种实用有效的方法。机器人要实现自动导引功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。避障控制系统是基于自动导引小车(AVGauto-guide vehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。使用传感器感知路线和障碍并作出判断和相应的执行动作。该智能小车可以作为机器人的典型代表。它可以分为三大组成部分:传感器检测部分、执行部分、CPU。机器人要实现自动避障功能,还可以扩展循迹等功能,感知导引线和障碍物。可以实现小车自动识别路线,选择正确的行进路线,并检测到障碍物自动躲避。基于上述要求,传感检测部分考虑到小车一般不需要感知清晰的图像,只要求粗略感知即可,所以可以舍弃昂贵的CCD传感器而考虑使用价廉物美的红外反射式传感器来充当。智能小车的执行部分,是由直流电机来充当的,主要控制小车的行进方向和速度。单片机驱动直流电机一般有两种方案:第一,勿需占用单片机资源,直接选择有PWM功能的单片机,这样可以实现精确调速;第二,可以由软件模拟PWM输出调制,需要占用单片机资源,难以精确调速,但单片机型号的选择余地较大。考虑到实际情况,本文选择第二种方案。CPU使用STC89C52单片机,配合软件编程实现。1.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 电机驱动模块方案一:采用分立元件组成的平衡式驱动电路,这种电路可以由单片机直接对其进行操作,但由于分立元件占用空间比较大,还要配上两个继电器,考虑到小车的空间问题,此方案不够理想。方案二: 采用L9110 是为控制和驱动电机设计的两通道推挽式功率放大专用集成电路器件,将分立电路集成在单片 IC 之中,使外围器件成本降低,整机可靠性提高。该芯片有两个 TTL/CMOS兼容电平的输入,具有良好的抗干扰性;两个输出端能直接驱动电机的正反向运动,它具有较大的电流驱动能力,每通道能通过 800mA 的持续电流,峰值电流能力可达 1.5A;同时它具有较低的输出饱和压降;内置的钳位二极管能释放感性负载的反向冲击电流,使它在驱动继电器、直流电机、步进电机或开关功率管的使用上安全可靠。L9110 被广泛应用于玩具汽车电机驱动、脉冲电磁阀门驱动,步进电机驱动和开关功率管等电路上。图2.2 L91102.3 循迹模块方案一:采用简易光电传感器结合外围电路探测,但实际效果并不理想,对行驶过程中的稳定性要求很高,且误测几率较大、易受光线环境和路面介质影响。在使用过程极易出现问题,而且容易因为 该部件造成整个系统的不稳定。故最终未采用该方案。方案二:采用两只红外对管,分别置于小车车身前轨道的两侧,根据两只光电开关接受到白线与黑线的情况来控制小车转向来调整车向,测试表明,只要合理安装好两只光电开关的位置就可以很好的实现循迹的功能。图2.3 红外对管2.4 避障模块方案一:采用超声波避障,超声波受环境影响较大,电路复杂,而且地面对超声波的反射,会影响系统对障碍物的判断。方案二:采用红外线避障,利用单片机产生38KHz信号对红外线发射管进行调制发射,发射出去的红外线遇到避障物的时候发射回来,红外线接收管对反射回来信号进行解调,输出TTL电平。外界对红外信号的干扰比较小,而且易于实现,价格比较便宜,故采用方案二。红外线接受电路原理图2.5 机械系统本题目要求小车的机械系统稳定、灵活、简单,而三轮运动系统具备以上特点。驱动部分:由于玩具汽车的直流电机功率较小,而小车上装有电池、电机、电子器件等,使得电机负担较重。为使小车能够顺利启动,且运动平稳,在直流电机和轮车轴之间加装了三级减速齿轮。电池的安装:将电池放置在车体的电机前后位置,降低车体重心,提高稳定性,同时可增加驱动轮的抓地力,减小轮子空转所引起的误差。简单,而三轮运动系统具备以上特点。2.6电源模块方案一:采用有线电源通过USB接口供电,其优点是可稳定的提供5V电压,但占用资源比较大。方案二:采用4支1.5V电池单电源供电,但6V的电压太小不能同时给单片机与与电机供电。方案三:采用8支1.5V电池双电源分别给单片机与电机供电可解决方案二的问题且能让小车完成其功能。但是占用空间过大没有采取。所以,我选择了方案一来实现供电。第三章 硬件设计3.1 AT89S52单片机的简介 AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。下图为AT89S52引脚图。 图3-1 AT89S52引脚图 (1)主要特性:与MCS-51 兼容 8K字节可编程闪烁存储器 寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24MHz三级程序存储器锁定256*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路 (2)管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89S52的一些特殊功能口,如下表3-1所示: 表3-1 特殊功能引脚对照表引脚号特殊功能P3.0RXD 串行通信输入P3.1TXD 串行通信输出P3.2INT0 外部中断0 输入,低电平有效P3.3INT1 外部中断1 输入,低电平有效P3.4T0 计数器0 外部事件计数输入端P3.5T1 计数器1 外部事件计数输入端P3.6WR 外部随机存储器的写选通,低电平有效P3.7RD 外部随机存储器的读选通,低电平有效P3口同时为闪烁编程和编程校验接收一些控制信号。RST:AT89S52 的复位信号输入引脚,高电位工作,当要对芯片复位时,只要将此引脚电位提升到高电位,并持续两个机器周期以上的时间,AT89S52 便能完成系统复位的各项工作,使得内部特殊功能寄存器的内容均被设成已知状态。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。EA/VPP:该引脚为低电平时,则读取外部的程序代码 (存于外部EPROM 中)来执行程序。因此在8031中,EA引脚必须接低电位,因为其内部无程序存储器空间。如果是使用AT89S52或其它内部有程序空间的单片机时,此引脚接成高电平使程序运行时访问内部程序存储器,当程序指针PC值超过片内程序存储器地址(如8051/8751/89C51的PC超过0FFFH)时,将自动转向外部程序存储器继续运行。此外,在将程序代码烧录至8751内部EPROM、89C51内部FALSH时,可以利用此引脚来输入提供编程电压(8751为2lV、AT89S52为12V、8051是由生产厂方一次性加工好)。XTAL1:接外部晶振的一个引脚。在单片机内部,它是一反相放大器输入端,这个放大器构成了片内振荡器。它采用外部振荡器时,此引脚应接地。XTAL2:接外部晶振的一个引脚。在片内接至振荡器的反相放大器输出端和内部时钟发生器输入端。当采用外部振荡器时,则此引脚接外部振荡信号的输入。(3)振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 (4)芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89S52设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 3.2总体设计智能小车采用前轮驱动,前轮左右两边各用一个电机驱动,调制前面两个轮子的转速起停从而达到控制转向的目的,后轮是万象轮,起支撑的作用。将循迹光电对管分别装在车体下的左右。当车身下左边的传感器检测到黑线时,主控芯片控制左轮电机停止,车向左修正,当车身下右边传感器检测到黑线时,主控芯片控制右轮电机停止,车向右修正。避障的原理和循线一样,在车身右边装一个光电对管,当其检测到障碍物时,主控芯片给出信号报警并控制车子倒退,转向,从而避开障碍物。3.2主板设计框图如图3.2,所需原件清单如表3.2。Stc89c52循迹红外对管时钟电路复位电路报警电路电机驱动避障红外对管图3.2 主板设计框图元件数量元件数量元件数量直流电机2只电阻若干集成电路芯片若干单片机1 块二极管若干电容若干红外对管2只蜂鸣器1只电位器若干12M晶振1只杜邦线若干玩具小车1个排针若干液晶屏1个一体化红外接收头1只表3.2 元件清单3.3驱动电路电机驱动一般采用H桥式驱动电路,L9110内部集成了H桥式驱动电路,从而可以采用L9110电路来驱动电机。其引脚图如3.3.1,驱动原理图如图3.3.2。图3.3.1 L9110引脚图图3.3.2 电机驱动电路3.4信号检测模块小车循迹原理是小车在画有黑线的白纸 “路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”黑线。笔者在该模块中利用了简单、应用也比较普遍的检测方法红外探测法。红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号,再通过LM393作比较器来采集高低电平,从而实现信号的检测。避障亦是此原理。电路图如图3.4。市面上有很多红外传感器,在这里我选用94型光电对管。图3.4循迹原理图3.5主控电路本模块主要是对采集信号进行分析,同时给出PWM波控制电机速度,起停。以及再检测到障碍报警等作用。其电路图如图3.5。图3.5 主控电路第四章 软件设计4.1启动循迹是否检测到停止线停止是否检测到障碍是否检测到N YY避障YN主程序框图:4.1 主程序图4.2电机驱动程序void goahead()s1=1;s2=0;s3=1;s4=0;void goback()s1=0;s2=1;s3=0;s4=1;void turnleft()s3=1;s4=0;void turnright()s1=1;s2=0;void stop()en1=0;en2=0;4.3循迹模块开始前进扫描I/O口,是否检测到黑线Y左边 右边左转右转N循迹框图:开始前进扫描I/O口,是否检测到黑线Y左边 右边左转右转N图4.3 循迹框图循迹程序:#include /包含51相关的头文件typedef unsigned char uchar; /重定义char数据类型typedef unsigned int uint; /重定义int数据类型#define ShowPort P2 /定义数码管显示端口uchar code LedShowData=0x03,0x9F,0x25,0x0D,0x99, 0x49,0x41,0x1F,0x01,0x19;/0,1,2,3,4,5,6,7,8,9/定义数码管显示数据static unsigned int RecvData; /定义接收红外数据变量static unsigned char CountData; /定义红外个数计数变量static unsigned char AddData; /定义自增变量static unsigned int LedFlash; /定义闪动频率计数变量unsigned char HeardData; /定义接收到数据的高位变量bit RunFlag=0; /定义运行标志位bit EnableLight=0; /定义指示灯使能位/*完成基本数据变量定义*/sbit S1State=P10; /定义S1状态标志位sbit S2State=P11; /定义S2状态标志位sbit B1State=P12; /定义B1状态标志位sbit IRState=P13; /定义IR状态标志位sbit RunStopState=P14; /定义运行停止标志位sbit FontIRState=P15; /定义FontIR状态标志位sbit LeftIRState=P16; /定义LeftIR状态标志位sbit RightIRState=P17; /定义RightIRState状态标志位/*完成状态指示灯定义*/sbit S1=P32; /定义S1按键端口sbit S2=P34; /定义S2按键端口/*完成按键端口的定义*/ sbit LeftLed=P20; /定义前方左侧指示灯端口sbit RightLed=P07; /定义前方右侧指示灯端口/*完成前方指示灯端口定义*/sbit LeftIR=P35; /定义前方左侧红外探头sbit RightIR=P36; /定义前主右侧红外探头sbit FontIR=P37; /定义正前方红外探头/*完成红外探头端口定义*/sbit M1A=P00; /定义电机1正向端口sbit M1B=P01; /定义电机1反向端口sbit M2A=P02; /定义电机2正向端口sbit M2B=P03; /定义电机2反向端口/*完成电机端口定义*/sbit B1=P04; /定义话筒传感器端口sbit RL1=P05; /定义光敏电阻端口sbit SB1=P06; /定义蜂鸣端口/*完成话筒,光敏电阻,蜂鸣器.端口定义*/sbit IR1=P33; /定义红外接收端口/*完成红外接收端口的定义*/void Delay() /定义延时子程序 uint DelayTime=30000; /定义延时时间变量 while(DelayTime-); /开始进行延时循环 return; /子程序返回void main(void) /主程序入口 while(1) LeftLed=LeftIR; /左边的指示灯状态为左边的红外探头 RightLed=RightIR; /右边的指示灯状态为右边的红外探头 Delay(); /延时 4.4避障模块避障框图:开始后退一点,报警后退左转前进右转Y循迹是否检测到黑线前进N图4.4 避障框图避障程序:#include /包含51单片机相关的头文件sbit LeftLed=P20; /定义前方左侧指示灯端口sbit RightLed=P07; /定义前方右侧指示灯端口sbit FontLled=P17;sbit LeftIR=P35; /定义前方左侧红外探头端口sbit RightIR=P36 /定义前方右侧红外探头端口sbit FontIR=P37; /定义前方正前方红外探头端口sbit M1A=P00; /定义左侧电机驱动A端sbit M1B=P01; /定义左侧电机驱动B端sbit M2A=P02; /定义右侧电机驱动sbit M2B=P03; /定义右侧电机驱动B端sbit B1=P04; /定义语音识识别传感器端口sbit SB1=P06; /定义蜂鸣器端口void tingzhi() M1A=0; /将M1电机A端初始化为0 M1B=0; /将M1电机B端初始化为0 M2A=0; /将M2电机A端初始化为0 M2B=0;void qianjin() M1A=1; M1B=0; M2A=1; M2B=0;void houtui() M1A=0; M1B=1; M2A=0; M2B=1;void zuozhuan() M1A=1; M1B=0; M2A=0; M2B=1;void youzhuan() M1A=0; M1B=1; M2A=1; M2B=0;void delay_nus(unsigned int i) /延时:i=12 ,i的最小延时单12 us i=i/10; while(-i); void delay_nms(unsigned int n) /延时n ms n=n+1; while(-n) delay_nus(900); /延时 1ms,同时进行补偿 void ControlCar(unsigned char ConType) /定义电机控制子程序 tingzhi(); switch(ConType) /判断用户设定电机形式 case 1: /前进 /判断用户是否选择形式1 qianjin(); break; case 2: /后退 /判断用户是否选择形式2 houtui(); /M2电机反转 break; case 3: /左转 /判断用户是否选择形式3 zuozhuan(); /M2电机正转break; case 4: /右转 /判断用户是否选择形式4 youzhuan(); /M1电机正转 /M2电机反转break; case 8: /停止 /判断用户是否选择形式8 tingzhi();break; /退出当前选择 void main() /主程序入口 bit RunFlag=0; /定义小车运行标志位 /RunShow=0; /初始化显示状态 ControlCar(8); /初始化小车运行状态 while(1) /程序主循环 Start: LeftLed=LeftIR; /前方左侧指示灯指示出前方左侧红外探头状态 RightLed=RightIR; /前方右侧指示灯指示出前方右侧红外探头状态 FontLled= FontIR; SB1=FontIR; if(FontIR = 0) /如果前面避障传感器检测到障碍物 ControlCar(8); /停止 delay_nms (300); /停止300MS 防止电机反相电压冲击 导致系统复位 ControlCar(2); /后退 delay_nms (1000); /后退1500MS ControlCar(3); / delay_nms (1800); goto NextRun; if(FontIR = 1 ) ControlCar(1); /右侧没有信号时,开始向左转一定的角度 delay_nms (10); goto NextRun; goto Start; NextRun: ControlCar(1); 结束语 整个系统的设计以单片机为核心,利用了多种传感器,将软件和硬件相结合。本系统能实现如下功能:(1) 自动沿预设轨道行驶小车在行驶过程中,能够自动检测预先设好的轨道,实现直道和弧形轨道的前进。若有偏离,能够自动纠正,返回到预设轨道上来。(2)当小车探测到前进前方的障碍物时,可以躲避障碍物,从无障碍区通过。小车通过障碍区后,能够自动循迹(3)自动检测停车线并自动停车。从运行情况来看避障的效果比较好,循迹的效果不是很好,我认为是由于焊接时没有注意右侧红外灯管没有焊接好,这也是我这次设计最大的误区,没有及时的拆卸和重新焊接。我相信如果实验条件和时间的允许下我肯定能解决这一问题。 通过本次设计我掌握了很多以前不熟练的东西,认识了很多以前不熟悉得东西,使我在人生上又进了一步。也认识到很多的不足。致谢本设计能够顺利完成,还承蒙王老师以及身边的很多同学的指导和帮助。在设计过程中,王老师给予了悉心的指导,最重要的是给了我解决问题的思路和方法,并且在设计环境和器材方面给予了大力的帮助和支持,在此,我对王老师表示最真挚的感谢!同时感谢所有帮助过我的同学!感些评阅老师百忙之中抽出时间对本论文进行了评阅!参考文献1 杨永辉现代电子技术J .智能小车的多传感器数据融合.20052 何立民单片机与嵌入式系统应用J.基于HCS12的小车智能控制系统设计20073 谭浩强.C程序设计.北京:清华大学出版社,2005,74 张立电子世界J.电动小车的循迹2004 5 武庆生,仇梅.单片机原理与应用(M).电子科技大学出版,1998,126 徐科军传感器与检测技术M.电子工业出版社,20077 刘瑞新.单片机原理及应用教程 .机械工业出版社,2003,78 刘湘涛,江世明单片机原理与应用M.电子工业出版社,20069 何立民单片机初级教程M.北京航空航天大学出版社,199910 熊建云. Protel99 SE.北京:机械工业出版社,200711 郑郁正单片机原理及应用.四川大学出版杜,200312 卢静,陈非凡,张高飞等.基于单片机的无刷直流电动机控制系统设计.北京机械工业学院学报,2002,1013 张燕,曾光宇.光电式传感器的应用与发展J.科技情报开发与经济,2007附录一 循迹加红外避障综合程序#include#define uint unsigned int#define uchar unsigned char#define out P2sbit zuo1=P01;sbit zuo2=P00;sbit you1=P03;sbit you2=P02;sbit zuod=P35;sbit youd=P36;sbit qiand=P37;/左 右 前 3个红外传感器sbit jiao=P06;sbit D1=P20;sbit D2=P07;uchar code ZM=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,;void delay(uint x)uchar i;while(x-)for(i=0;i=12 ,i的最小延时单12 us i=i/10; while(-i); void delay_nms(unsigned int n) /延时n ms n=n+1; while(-n) delay_nus(900); /延时 1ms,同时进行补偿 void qian()zuo1=0;zuo2=1;/左边往前you1=0;you2=1;/右边往前void hou()zuo1=1;zuo2=0;/左边往后you1=1;you2=0;/右边往后void zuo() zuo1=0;zuo2=1;/左边往前you1=1;you2=0;/右边往后void you()zuo1=1;zuo2=0;/左边往后you1=0;you2=1;/右边往前void tingzhi() zuo1=0;zuo2=0;/左边往后you1=0;you2=0;/右边往前void main()while(1)if(zuod=0&youd=0)/如果左右两个传感器没有检测到黑线qian();/直走out=ZM1;if(qiand=0)/如果在直走的过程中遇见障碍物delay(50);/延时判断是否为干扰if(qiand=0)/不是干扰jiao=0;/蜂鸣器报警tingzhi();delay_nms (120);hou();/后退半秒out=ZM2;delay(500);you();/右转200毫秒out=ZM4;delay(200);jiao=1;/取消报警if(zuod=1&youd=0)/如果左边的传感器检测到黑线while(1)zuo();out=ZM3;/左转D1=0;if(zuod=0)/一直左转到传感器检测不到为止D1=1;break;/跳出循环if(youd=1&zuod=0)while(1)you();out=ZM4;D2=0;if(youd=0)D2=1;break;/道理同上 /效果:沿着黑线行走 中途遇见障碍物后退右转附录二 实物图
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 装配图区 > UG装配图


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!