版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机多功能智能小车摘要在当今的社会,“智能化”这个词汇越来越多地被别人所提及,各种智能化产品的出现极大地改变了人们的生活,智能化已经成为世界未来发展的趋势。智能化可以按照人类的意愿进行运作,并且不需要人类进行太大的操作,这便大大减小了人们的工作量。智能小车的出现便是人类向智能化迈出的一大步,它的出现极大地加快了科学勘探、工业制造和交通运输等领域的发展。智能小车的原理中包含了许多的学科知识,例如传感技术、自动控制原理、遥感技术和电路电子等。本设计的智能小车采用的控制核心为STC89C52单片机,遥控的方式为红外遥控,电机驱动的芯片为L293D。同时智能小车采用了红外对管作为红外避障模块与红外寻迹模块的接收和发射装置,通过HC-SR04超声波探测模块进行测距避障,测量到的距离则由1602液晶显示。本次设计采用的编程语言为c语言,通过将编好的程序输入到单片机,单片机便能控制小车实现红外避障、超声波测距避障、黑线寻迹和红外遥控等功能。关键词:智能车单片机红外避障与遥控超声波黑线寻迹Abstract
Intoday'ssociety,theterm"intelligent"isincreasinglymentionedbyothers.Theemergenceofvariousintelligentproductshasgreatlychangedpeople'slives,andintelligentizationhasbecomethetrendoftheworld'sfuturedevelopment.Intelligentizationcanoperateaccordingtothewishesofhumanbeings,anddoesnotrequirehumanstoperformtoomuchoperations,whichgreatlyreducestheworkloadofpeople.Theemergenceofsmartcarsisabigstepforhumanbeingstobecomeintelligent.Itsappearancehasgreatlyacceleratedthedevelopmentofscientificexploration,industrialmanufacturingandtransportationandotherfields.Theprincipleofthesmartcarcontainsmanysubjectknowledge,suchassensingtechnology,automaticcontrolprinciple,remotesensingtechnologyandcircuitelectronics.ThecontrolcoreadoptedbythedesignedsmartcarisSTC89C52singlechipmicrocomputer,theremotecontrolmodeisinfraredremotecontrol,andthechipdrivenbythemotorisL293D.Atthesametime,thesmartcaradoptstheinfraredpairtubeasthereceivingandtransmittingdeviceoftheinfraredobstacleavoidancemoduleandtheinfraredtrackingmodule,andperformsthedistancemeasurementandobstacleavoidancethroughtheHC-SR04ultrasonicdetectionmodule.Theprogramminglanguageusedinthisdesignisclanguage.Byinputtingthecompiledprogramtothesingle-chipmicrocomputer,thesingle-chipmicrocomputercancontrolthecartorealizeinfraredobstacleavoidance,ultrasonicdistancemeasurementobstacleavoidance,blacklinetrackingandinfraredremotecontrol.Keywords:smartcar;singlechipmicrocomputer;infraredobstacleavoidanceandremotecontrol;ultrasonic;blacklinetracking目录1前言11.1本设计的目的、意义及应达到的技术要求11.2本设计在国内外的发展概况及存在的问题21.3本设计应解决的主要问题32本设计32.1设计原理42.2方案选择42.2.1遥控控制模块设计与论证42.2.2电机驱动模块设计与论证52.2.3避障循迹模块设计与论证52.2.4电源模块设计与论证62.2.5数据显示模块设计与论证62.3分析问题72.4设计过程72.4.1红外遥控模块72.4.1.1红外遥控模块的工作原理72.4.2电机驱动模块82.4.2.1L293D电机驱动芯片工作原理82.4.2.2电机调速92.4.3避障循迹模块102.4.3.1红外避障循迹模块102.4.3.2超声波测距避障模块122.4.4电源模块152.4.5数据显示模块152.5总结16参考文献18致谢19附录20前言 随着智能小车的不断发展,它在人类生活中起到的作用也越来越大,被普遍用于生产、运输、自动化、医疗和航空等各个领域。例如,在如今新型冠状病毒在全球蔓延的时候,人们对口罩的需求也越来越多,因此生产口罩的企业对口罩生产和运输的速度的要求也越来越高,而正是超声波焊接机和智能小车的存在,使得有足够多的口罩能够被快速地送往各地。智能车辆的出现不但减少了人们的工作量,为人类的生活提供了大量的便利,而且它还能完成一些人类无法完成的事情,这扩宽了人类发展的空间,加速了人们对未知领域的探索。实际上,当今世界智能汽车的研究与开发已经成为世界范围内重点关注的项目之一。智能汽车是重要的移动机器人行业和机器人技术的重要分支,其起源于20世纪六十年代。那时,斯坦福研究院(NDI)的研究人员在1966-72年间开发了一个自动移动机器人,绰号为shakyy。其目的是在复杂的环境中应用人工智能技术,完成自律推论、计划和管理。从那时起,移动机器人技术飞速发展,也为智能车辆技术的创新和进步做出了贡献。智能车辆一般由计算机控制并发出命令,由传感器获得车速、车距以及障碍物的信息,通过智能感应系统感应别的车辆与行人,同时通过摄像头观察道路的状情况。而对于一些更加先进的智能车辆,它们会装有更多样的智能化系统,例如语音识别系统,人们只要说几句话便能够控制小车的运行与模式;报警系统也能够在车辆快要出现问题或将要与别的车相撞时发出报警;而车辆的智能自动驾驶系统则完全不需要人为的操作,全程由电脑控制,车辆自动到达目的地,这也正是智能车辆的最高层次。在如今,“智能汽车”一词不仅在学校特别是在电子设计项目中众所周知。大学生经常参加一些电子项目的竞赛,并经常设计汽车主题。这表明国内的主要大学也非常重视这种话题的研究。该设计是在上述背景下制作的,设计的智能车可以实现黑线跟踪、红外障碍物回避、红外远程控制和超声波障碍物回避的功能。1.1本设计的目的、意义及应达到的技术要求随着社会的进步与科技的发展,这个社会对于大学生的要求也越来越高,因此,作为一个合格大学生必须要具有良好的创新与创造能力。智能小车必定是以后智能化社会的一个重要组成部分,它会随着计算机技术、自动化技术、电力电子技术和智能化技术的发展而不断地被创新与改进,从而去适应未来社会的发展需求。如何去对智能车辆去进行改进与创新,这便需要技术人员在智能车辆的制作过程中不断地去探索与思考。智能小车的出现其实也意味着人们对未知领域的探索途径有多了一条,例如在对外太空星球的探索中,有一些星球以人们现今的科技水平是无法做到亲自登陆的,只能通过智能小车进行样本的采集以及地形的勘探。正是由于智能小车在外太空探索中起到的重要作用,各国对星球探测车的研究开始变得更加重视。1960年代后期,美国和前苏联开始为登月计划作准备,于是各自便开始对月球的探索。从1966年到1968年,美国发射的两枚无人巡游探测器成功登陆月球。随后1997年Sojourner号探测车登上了火星,这是由美国JPL公司开发的小型火星车,它在火星上进行了许多技术实验,并且验证了智能小车在火星探索上具有良好的性能。2004年1月,美国在2003年发射的“勇气号”和“机遇号”火星探测车又一次成功登陆火星。前苏联在与美国的太空竞争中也不甘人后,1959年~1976年间,分别成功发射了两个月球探测车。由此可见,正是由于智能车辆的存在,人们才能去完成对外太空那未知领域的探索。在现代的自动控制领域中,智能汽车和机器人作为一项伟大的人类智慧结晶,它已经极大地改变了我们的生活,为我们提供了许多便利,并且成为了人类未来的发展方向。智能可以让我们只需设置了所需的模式,他便能在指定的环境中自动运行,而无需人工操作和管理。如今,智能化被人们应用于各种重要的领域。例如,在科学发现,智能房间和工业制造等领域都可以找到它的阴影。智能车是智能领域的产品,操作性和相互运用性都很好,可以根据预先设定的模式自动自动自动化,所以也可以分类为智能玩具之一,所以很受用户的喜爱。而且,智能在很多领域都可以使用,特别是风险高的搜索和机械领域,同时在机器人开发上,它也发挥着关键作用。当人类进入21世纪时,随着科学技术的飞速发展和对生活质量的高要求,人们对汽车的舒适性和安全性需求变得越来越严格,已经不断使用和探索了各种新的最新技术,例如自动驾驶,智能运输和巡航。同时人们也正在不断开发和研究智能汽车,使得这些技术也正在成为全球汽车研究的热点。我们有必要对智能小型车进行更深入的研究,因为智能小型车目前具有重要的研究意义,而且其发展可能对未来起重要作用。同时,它还具有有着广泛的开发前景和不可估量的市场价值。设计一辆简易的智能小车,为了体现它的智能化,要求小车能够自动避开障碍物,即小车准被遇到障碍物或别的车辆的时候时可以立即做出反应,自动调整方向进行躲避,这是一辆智能汽车能够行驶的基本要求之一;自动循轨也是小车必不可少的功能之一,智能小车通过循轨电路去辨别驾驶路线,当智能小车要偏离原本设定好的路线的时候能够自动调整方向回到原来的路线从而准确地到达目的地,同时小车到达目的地后能够自动停止行驶;左转、右转、前进、后退和加减速是智能小车的最基本的功能,电机也是小车的核心,正是通过对电机的控制才能实现智能小车那些最基本的功能;我们设计的智能小车也是需要一个控制器,而手机正好可以充当这个控制器,我们可以通过蓝牙来让小车与手机进行连接,用手机来选择小车的模式与行动。1.2本设计在国内外的发展概况及存在的问题从1960年代至今,对智能小车和机器人设计的研究已经持续了数十年。自1960年代后半期最初的自律移动机器人登场以来,经过数十年的开发后,人类已经从能制造出第一台教学模仿机器人的阶段迈进能制造出具备感知功能智能机器人的阶段,并克服了许多技术难题,取得了巨大进步。智能机器人如今正被许多国家重视与大量研发,研发的水平取决于各国的科研能力,美国和日本正处于研究该技术的最前沿。法国提出了一项技术计划,使智能机器人具有自动识别功能,使其可以在复杂的环境中通过独立地感应和判断来自动执行各种动作。在美国,人们可以用美国发明的智能机器人来发送信件,运输食物和其他必需品,并可以用它们来帮助吸尘器进行清洁。人形机器人已经在日本开发成功,它们可以模仿人的面部表情并非常真实地表达它们。近年来发明的手术机器人以良好的抵稳定性和安全性被广泛用于需要手术的医疗现场中去。其次,与国外相比,中国对智能汽车的探索始于较晚的1980年代,而且大部分研究仍处于单一的技术研究阶段。正是由于智能车辆技术研究在我国起步太晚,所以导致了我们的技术与国外存在一定的差距。但即使这样,中国也还是取得了一系列成果,主要包括以下几点:中国首个自动驾驶车在中国一汽集团和国家国防技术大学自动化研究所共同研制下于2003年成功诞生。吉林大学设计和制造了一辆智能车辆,它能够通过使用CCD识别地面铺设的条形路标,进行导航。图像识别、驾驶、转向、制动器、障碍物回避等辅助系统构成了车辆的原型。现在该车可以以最大20km/h的速度自动追踪直线、圆弧、S字等轨迹。从1988年开始,一款能够在高速公路和一般道路移动且具有多种功能,同时能够在校园的非结构化道路环境中进行自动驾驶,跟踪道路和避开障碍物的TLHMR系列智能移动机器人的研发取得了巨大的成功,它是由清华大学计算机系智能技术与系统国家重点实验室在国家科学技术委员会和国家862项目的帮助下研究出来的。7B.8是由南京理工大学、北京理工大学、浙江大学、国防科技大学、清华大学等多所院校一同研发出来的自主式外部军用车辆,它配备了彩色摄像头,激光定位器,陀螺仪惯性定位等传感器。智能车辆研究是智能交通系统ITS的主要技术。现在,国内很多大学和研究机构都在对ITS的主要技术和机器进行研究,随着ITS研究逐渐成为了人们的焦点,一支专业的、进行ITS技术研发的技术团队在中国成立。另外,对于ITS及智能车辆技术研发,各种运输公司和汽车公司越来越多地增加了对其的投资,并且整个社会的关注也在不断增加。交通部已将ITS研究列入“十五”科技发展计划和2010年长期规划。相信在各个领域的共同努力下,有望大大提高中国ITS和智能车辆的技术水平。可以预测,智能车辆的研究将随着中国的快速经济发展而拥有一个更加崭新的未来。 1.3本设计应解决的主要问题本设计我们应当要解决的有:当红外对管中的发射装置发射的红外光被接受装置接收后,单片机如何能够得到一个信号,从而调用红外避障子程序,使小车避开障碍物;超声波模块如何通过对测距信息的处理从而达到避障的目的;如何调节PWM的占空比,从而调节电机的转速;如何当按下红外遥控器的按键时,小车能够完成相应的动作。。2本设计该设计是一款使用STC89C52微控制器作为控制核心,具备有普通功能的简单型智能小车。它拥有着黑线跟踪、红外障碍物回避、红外遥控、加速和减速、超声波障碍物回避等功能。我们设计的智能小车只是具备智能车辆所拥有的最基本的功能。它的设计思想与一些高性能机器人的相似。智能机器人对于人类而言已经不是什么新鲜的东西了。它逐渐成为了人们的日常生活中必不可少的一部分,它为人类带来更多的幸福感。但是,智能车辆在某些特定方面具有着其它产品所不具备的优点,更加体现了自己的独特与创新,因此它的发展拥有着一个光明的未来。与此同时,小车的制造也非常符合社会发展的潮流,因为它的制造成本较低,更加环保,续航能力强,也更安全。2.1设计原理本设计方案采用微处理器(STC89C52单片机)作为整个系统控制的中心,通过红外避障模块对反射回来的红外线进行处理,从而实现红外避障;HC-SR04超声波探测模块能够测量小车到障碍物的距离,从而实现超声波避障;由51单片机输出PWM信号,然后通过编程来改变PWM信号的占空比,从而达到电机调速的目的;通过对按键信息的编码与解码,然后再通过单片机的处理,我们用红外遥控器对小车进行操作。2.2方案选择2.2.1遥控控制模块设计与论证方案一:选择红外遥控作为小车的遥控方式。首先,红外遥控是通过红外发射装置内的红外编码芯片将按键信息调制成一串0和1的二进制代码,其次,通过红外线发送到红外接收装置,然后通过由单片机充当的解码芯片进行解码,解码后的信息会被单片机识别,然后再根据不同的码信息,我们便能进行不同的控制操作。方案二:选择无线电遥控作为小车的遥控方式。无线电遥控是利用经过调制且带有编码信息的无线电波对远处的各种设备进行控制的遥控设备。当这些无线电波传播到远方的接收端后,电波导致的的电磁场变化又会在导体中产生电流。通过解码将信息从变化的电流中提取出来,这样便可以驱动远方各种机构去完成人们想要它完成的任务。方案三:红外遥控属于光传波,若有物体挡在它传播路线上时,它是无法穿透过去的,所以,它具有方向性且中间不能被隔断。同时,它对周围环境的影响也较小。而无线遥控则是无方向性的且可穿透一定的障碍物,它作用的有效距离比红外遥控高。本设计选用的是红外遥控方式,这是因为即使无线遥控控制的距离比红外遥控的更远,但原理更加简单且更容易实现的红外遥控更加适合本次设计。2.2.2电机驱动模块设计与论证目前比较常用的小车驱动电机主要有两种选择:方案一:小车通过直流电机进行驱动。直流电机能将小车电源中的电能转变为小车向前驱动的动力,这种电机被人们广泛应用在要求电机占用空间小、质量轻的小型电动设备中。直流电机的运行方式是这样的:当给直流电机内部转子上的绕组通电时,它便会成为一个通电线圈并在电机内部磁体产生的磁场中产生洛伦兹力,使其带着转子转动,同时通电线圈内的磁场方向将会改变,绕组上的电流也因此改变方向,但是洛伦兹力的方向从未改变,这使得电机将向顺时针或逆时针持续转动。由H型桥式电路直接驱动直流电机控制电机的正反转,使用PWM对电机调速的时,是靠单片机输出不同占空比(改变脉冲宽度)来控制输出电压的,电压减小电机转速就会下降,小车的速度也能够人为控制。方案二:小车通过步进电机进行驱动。步进电机是一款具有精确定位的电机,能将输入端输入的电脉冲信号转变为转子的角位移从而计算出小车前行的距离。步进电机是通过控制脉冲信号的频率来控制小车的速度,在不超负荷的情况下,只要首先给予步进电机一个脉冲信号,让转子转动,然后再输入连续不断的脉冲信号波形,步进电机便能不断地转下去。相比直流电机,步进电机在正常情况下难以获得较高的转速,这便会影响小车以后功能的实现,因此在本设计的最佳选择便是使用直流电机驱动小车。2.2.3避障循迹模块设计与论证方案一:由左右两组红外对管、电压比较芯片、电位器、状态指示灯组成的红外避障模块检测到前方障碍物的存在,然后通过单片机的控制来让小车进行回避。本设计采用红外对管来检测小车前方存在的障碍物,其分别被安装在小车的前部、左边和右边。其中左边与右边的红外对管是分离的,用于红外避障。而小车前部的则是一体的,用于黑线寻迹。其障碍的原理也十分简单,就是利用红外对管中的红外发射装置发出红外光,而红外光由于障碍物的存在被反射回来,并由红外对管中的接收装置吸收,由于接受到的光线强度不同,所以输出的电压也不同,当有大量的红外线被反射回来时,通过电压的比较,电压比较器会输出一个低电平信号,由于电压比较器直接与单片机I/O相连,因此信号会传输到单片机内,然后单片机就会调用红外避障子程序,小车便会在单片机的控制下做出相应的避障功能。同时两个LED指示灯也会亮起,当小车左边的红外对管检测到障碍物时,在单片机调用的右转子程序的控制下,小车会因为躲避障碍物而向右转,当小车右边的红外对管检测到障碍物时,在单片机调用的左转子程序的控制下,小车会因为躲避障碍物而向左转。当小车两边的红外对管都没有检测到障碍物时,红外线没有被反射,因此小车上的接收装置无法接收到红外线,于是电压比较器会输出一个高电平信号到单片机,在单片机的控制下小车会继续向前行驶。方案二:采用超声波模块测量物体的距离,通过这个距离来让小车完成避障。其障碍的原理如下:首先由小车上超声波发射器发射的超声波会向小车前方传播,当它遇到障碍物时,会被反射回去小车上,当超声波返回的距离比较小时,也就说明了前方有障碍物,小车便会后退一点距离,随后它会转一下方向,再次去判断前方是否开阔,如果开阔,它便会往前走。如果有障碍物,它便会重复上一次的操作,直到前方开阔。小车会在往前走到下一个障碍物之前,会离障碍物有一定距离,这个距离便是我们能够设置的小车的刹车距离,它能够避免小车因行驶过快而撞上障碍物。小车在这个距离检测到有障碍物后便会进行一个小小的后退并掉头,如果它检测到前方开阔后便会继续前进。当它又检测到障碍物时便会重复之前的操作。这两种方案都被我用到了智能小车的设计上。2.2.4电源模块设计与论证电源模块的正常运行是小车上各个模块能正常执行各自功能的最基本的保障条件。因此,电源模块决定着小车的好坏。电源模块的设计方案有:方案一:直流电机由电压为12V的蓄电池直接供电,而12V的电压会经过稳压电路后降为5V,最后会为单片机和其它模块电路充电。蓄电池拥有着输出电压稳定、续航能力强的优点,但是由于它的质量与体积都过大,所以并不适合本次小型智能小车的设计。方案二:将2节3.7V的锂电池串联起来,然后直接给小车的直流电机充电,再通过稳压电路将7.4V的电压降为5V,最后会为单片机和其它模块电路充电。本方案使用的锂电池电压输出稳定、体积小、使用方便、可充电反复利用,因此,此方案十分适合本次智能小车的设计。2.2.5数据显示模块设计与论证本设计需要显示超声波测距得到的距离,显示方案有以下两种:方案一:将8位共阴极数码管与数码管锁存模块连接起来,然后在与单片机的I/O口相连,通过单片机的控制,数码管便能显示出超声波测距得到的距离。方案二:将1602液晶与单片机I/O口相连,然后在单片机的控制下,1602液晶显示屏便能显示出超声波测距得到的距离。1602液晶是一种点阵型液晶模块,它能够显示出字母、数字、符号,同时,由于字符之间与行之间要存在有一定的距离,因此,组成1602液晶的若干个5*7或5*10的点阵字符位之间存在一个点距的距离,而且行与行之间也存在着距离。由于用液晶显示的电路比用数码管显示的电路更加简单,且功耗更低,因此选择用1602液晶显示的方案。2.3分析问题当红外对管中的发射装置发射的红外光被接受装置接收后会产生一个电压,经过电压比较器比较电压大小后,电压比较器便会输出一个信号到单片机,一旦前方有障碍物,单片机便会调用红外避障子程序,使小车避开障碍物;超声波模块对返回的信号进行处理后会输出到单片机上,单片机会读取它的数据,然后再通过超声波避障子程序计算出距离并避障;可利用软件编程调节PWM的占空比,从而调节电机的转速;可通过对按键信息的编码与解码以及单片机的处理后,小车便能受到我们的控制。2.4设计过程2.4.1红外遥控模块2.4.1.1红外遥控模块的工作原理红外线遥控是一种以波长为0.76~1.5μm之间的近红外光作为遥控光源,并通过这些近红外光传输控制信号的遥控设备。在我们日常生活中的一些常用的家用电器比如电视、DVD,电风扇、空凋等和一些小型汽车玩具上均已装备了红外线遥控设备,它具备着不占空间、价格实惠、使用便利等优点,但是红外遥控也有着作用范围小,容易被阻隔的缺点,但它已经能够满足本设计的要求。一般而言,红外遥控系统由发射装置和接收装置两大部分组成。其中发射装置中的红外编码芯片是其最核心的部分,发射装置就是通过它对按键信息进行编码和传送。另外,键盘电路、电源和红外发射电路也是发射装置重要的组成部分。红外接收设备的最核心部分便是红外解码芯片,它能对接收到的编码进行解码,而红外接收电路、电源和应用电路则是红外接收设备其它的组成部分。其流程图为图3.1所示:图3.1红外通信流程图遥控器的编码芯片会对按下遥控器的按键后所产生的按键信息进行编码,然后红外接收头接收到编码芯片通过LED红外发射器发出脉冲编码并将编码解出,解出后输入到单片机的外部中断。单片机接收到脉冲编码后,会对其进行位“0”和位“1”的识别,然后通过得到的不同的码信息调用相关的子程序,小车会依据该子程序所代表的功能进行相应的操作。2.4.2电机驱动模块2.4.2.1L293D电机驱动芯片工作原理L293D是四倍高电流H桥驱动程序,提供的双向驱动电流高达600毫安,电压是从4.5V至36V的,专为驱动等感性负载继电器,电磁阀,直流双极步进和马达,也可以给其他高电流/高电压提供电源负载[2]。L293D电机驱动芯片内部结构如图1.0所示:图1.0L293D电机驱动芯片内部结构图以右电机驱动为例,当使能端ENA输入一个高电平,输入端IN1、IN2分别输入一个低电平、高电平时,三极管T1、T4截止,T2、T3导通,电机为正转。当使能端ENA输入一个高电平,输入端IN1、IN2分别输入一个高电平、低电平时,三极管T2、T3截止,T1、T4导通,电机为反转。而当使能端ENA输入一个低电平时,无论IN1和IN2为低电平还是高电平,电机都不会转动。电机驱动模块的原理图如图1.1所示:图1.1电机驱动模块2.4.2.2电机调速PWM脉宽调制,是靠改变脉冲宽度来控制输出电压,通过改变周期来控制其输出频率,而输出频率的变化可通过改变此脉冲的调制周期来实现[16]。这样,使调压和调频两个作用配合一致,且于中间直流环节无关,因而加快了调节速度,改善了动态性能。由于输出等幅脉冲只需恒定直流电源供电,可用不可控整流器取代相控整流器,使电网侧的功率因数大大改善。PWM信号对电机进行调速原理是使用PWM对电机调速的时,是靠占空比(改变脉冲宽度)来控制输出电压的,电压减小电机转速就会下降,再通过改变周期来控制其输出频率,脉冲频率对电机的转速有影响,脉冲频率高连续性好。当我们给予电机一个连续的脉冲,由于电机只能在高电平转动,因此我们3只要控制这个高低电平的持续时间(即占空比)便能调节电机的转速。如果高电平的持续时间更长一点,电压会变大,从而电机转动的时间也会更长,停止的时间则会更短,也就意味着电机的转速更快。同时,脉冲的频率也影响着电机的转动,如果脉冲的频率太小,那么电机转动起来便显的十分卡顿,只有脉冲的频率足够高,电机转动的连续性才会更好。电机参数表如图1.2所示:图1.2电机参数本设计是用51单片机定时器与中断实现来实现输出PWM信号,通过编程来改变PWM信号的占空比,从而达到电机调速的目的。利用这种方法的优点便是更加便利和易于入门。频率是由周期决定的,而周期则是定时器溢出时间和占空比决定的。周期=定时器溢出时间*占空比频率公式:f=1/T我们通过编程设置定时器溢出时间来实现对PWM的频率设定,通过程序设置驱动电机的高电平的占空比来实现调速。程序见目录。通过对PWM电机调速原理以及编程的理解,我们便能以PWM脉宽调制为基础,实现独立按键S2、S3对小车速度的调节。只要我们把独立按键S2、S3分别于单片机的P3.0与P3.1相连,然后通过单片机对独立按键调节小车行驶速度程序的调用,这样便可实现按下独立按键S2左右轮减速,按下S3左右轮加速的功能。2.4.3避障循迹模块2.4.3.1红外避障循迹模块红外避障模块由左右两组红外对管(LEAS1、RC1、LEAS2、RC2)、电压比较芯片(U5)、电位器(RW1、RW2)、状态指示LED灯(LED4、LED5)组成。其中左红外避障信号反馈端接单片机的P3.4引脚、右红外避障反馈接单片机的P3.5引脚,单片机会根据输入电平信号的高低来判断前方是否有障碍物,当低电平0时为有障碍物,单片机会调用相应的红外避障子程序来控制小车避开前方的障碍物,而当高电平1时则为无障碍物,小车会继续前进。红外避障模块原理图如图3.3所示:图3.3红外避障循迹模块LEAS1、LEAS2分别为是左、右红外对管中的红外发射管,它用来发射红外光的,而反射回来的红外光则是分别由左、右红外对管中的红外接收管RC1、RC2接收。U5为电压比较器,以左红外避障为例,当接收管接收到红外光后,IN3端会产生一个电压,然后模拟电压信号会输入到电压比较器U5并转化为高低电平信号,当I1+端的电平大于I1—端的的电平时,输出端Q1输出为高电平,反之输出的则为低电平。RW1为电位器,它能通过调节电阻的大小来控制3脚的电压,电阻越小,电压越大。其主要的障碍原理为:小车前进时红外发射管LEAS1、LEAS2会不断发出红外光,当前方有障碍物时,红外光便会被反射回来并被红外接收管RC1、RC2接收,IN3、IN4端便会产生一个电压,电压信号会反馈到电压比较器U5中,当小车的左边有障碍物时,由于2脚的电压比3脚的电压大,Q1会输出低电平信号到单片机和LED灯的负极,于是指示灯LED4发亮,单片机会调用左红外避障子程序进行左转躲避。当小车的右边有障碍物时,由于6脚的电压比5脚的电压大,Q2会输出低电平信号到单片机和LED灯的负极,于是指示灯LED5发亮,单片机会调用右红外避障子程序进行右转躲避。当小车的前方没有障碍物时,电压比较器输出的则是一个高电平,小车则会继续前进。红外循迹的原理和红外避障的原理是类似的的,红外寻迹模块是由智能小车底板上2组红外对管(U1、U2)、电压比较芯(U5)、电位器(RW3、RW4)、状态指示LED灯(LED2、LED3)组成。寻迹模块中的红外对管与避障模块中的是不同的,它们是集成在一起的。本设计的红外寻迹是利用判断黑白线来完成寻迹,当红外对管中的发射装置发出红外光遇到黑线时,接受装置接收到的反射回来的红外光很少,相当于没有,因此电压比较器输出的是一个高电平;当红外对管中的发射装置发出红外光遇到白线时,大部分的红外光被反射回来并被接受装置接收,因此电压比较器输出的是一个低电平。单片机根据电压比较器输入是高电平还是低电平来判别小车是否沿着黑线行驶,如果当左边的红外对管检测到白色时,单片机便会调用黑线寻迹子程序使小车左电机前进,右电机停止来令小车右转,当右边的红外对管检测到白色时,单片机便会调用黑线寻迹子程序使小车右电机前进,左电机停止来令小车左转;当左右两个红外对管都检测到黑线时小车的左右电机都前进,都检测到白色时小车会自动停止。2.4.3.2超声波测距避障模块本设计采用的HC-SR04超声波探测模块是通过超声波感应而不与物体直接接触的方式进行测距的,测距范围为2cm--400cm,精度为3mm。只要通过程序控制HC-SR04超声波探测模块中的超声波发射器,让它发射超声波,接收器会对反射回来的超声波进行处理,我们只要读取它接收回来的数据便能进行测距了。同时超声波模块中还包括有一个控制电路。将IO口TRIG与模块相连,然后直接给IO口一个不少于10us的高电平,超声波模块便启动测距功能。通过IO口输入的高电平经过模块中的集成电路处理后,它便会让超声波发射头发出八个频率为四十千赫兹的方波。对于信号是否已经返回,它能够自动地去进行检测。如果有信号返回,信号便会被接收头接收,然后经过集成电路的处理,高电平便会从回响信号输出口ECHO输出,通过这些处理,超声波从发射到返回所花费的时间便能通过高电平维持的时间得到体现,测量的距离也能通过计算得出,测量的公式为:测量距离=[电平持续时间*声速(340m/s)]/2HC-SR04超声波原理图如图1.3所示:图1.3HC-SR04超声波原理图从图中可以看出超声波发射电路由STC11单片机、MAX232芯片、晶振和超声波发射器等组成,当STC11收到触发信号后,通过内部程序的控制,使发射电路发射出八个频率为四十千赫兹的方波。而当下面的接收电路接收到信号后,信号会通过TL074组成的电路进行放大并滤波,然后反馈给STC11单片机进行处理,处理完后信号由ECHO输出到STC89C52单片机上去读取高电平持续的时间,从而计算出距离。同时,为了让模块能够正常工作,此模块就不适合通电电连接,若要通电连接,模块的GND端必须先连接。HC-SR04超声波探测模块电气参数如表1.0所示表1.0HC-SR04超声波探测模块电气参数由表可以看出超声波模块需要工作在一个电压稳定为5V的环境下。超声波测量角度的大小与被测物体平面的面积有关,为了防止物体太小而导致超声波测量不到,当超声波测量距离为4m时,被测物体的面积最好不要少于1平方米。同时还有注意测量完成一次到下一次测量开始的时间间隔最好为60ms以上,因为这样才能避免发射信号干扰到回响信号,超声波时序图如图1.4所示:图1.4超声波时序图从时序图可以看出,只要在输入端TRIG输入一个不低于10us的TTL脉冲,模块内部便会自动发出8个40kHz的脉冲,当脉冲被前方的物体反射回来的时候,它便会输出一个回响信号,回响信号的脉冲宽度越大,则所测的距离便越长,也就是说这两者成正比关系。由此通过发射信号到收到的回响的时间间隔便能通过计算得到测试距离。公式为:uS/58=厘米或者uS/148=英寸这公式与上面公式的原理是一样的。STC89C52单片机会读取输入的回响信号的数据,然后通过内部的超声波测距避障子程序计算出测量距离,判断是否达到了避障距离,若没有达到便继续前进,若达到了便后退并进行避障。2.4.4电源模块电源模块的正常运行是小车上各个模块能正常执行各自功能的最基本的保障条件。因此,电源模块决定着小车的好坏。电源模块原理图如图1.5所示:图1.5电源模块原理图J1为电池接口,它与电池盒相连接。由于小车的电源是两个串联起来的3.7V的锂电池,所以当电源开关按下后便会产生一个7.4V的电压。又因为小车上的单片机和其他许多芯片的供电要求都是5V,所以7.4V的电压会经过降压芯片LM7805的降压,得到一个5V的电压。但对于电机驱动而言,它需要比较大的电流,因此电机驱动模块会直接与7.4V的电压相连。电源模块中的BC1和BC2为滤波电容,它们能够使输出电压和输入电压更加稳定。F1为保险丝,能够防止电路因为短路而损坏。2.4.5数据显示模块本设计中小车超声波测距中测量出的距离通过具有显示内容丰富、低功耗、不占地方的1602液晶显示出来的。LCD1602具有两种接口方式,分别为8位并行2线或3线串行。具体的1602液晶接口电路如图1.6所示:
图1.61602液晶接口电路图中LCD1602与STC89C52单片机是通过并行连接的方式进行数据传输的。LCD1602的引脚2、15和引脚1、16分别接电源电压的正极和负极,为LCD1602供电;由于有时1602液晶需要调节背光灯光度,因此它的3脚通常与一个10K电位器相连,这样便能达到调节的目的;作为单片机控制信号输入与输出端,4、5、6脚应该分别与单片机的P3.5、P3.6、P3.4脚相连;作为单片机数据信息输入端,7—14脚应与单片机的P0.0—P0.7脚相连。数据显示的原理也十分简单,首先通过超声波测距避障子程序将小车离障碍物的距离计算出来,然后再将这些数据信息通过单片机P0.0-P0.7引脚直接输出至LCD1602的DO-D7引脚。2.5总结本次设计的智能小车能够通过遥控完成基本的前进、后退、左转、右转和停止的功能,而且通过软件编程去调节PWM的脉冲宽度使小车的速度得到调节。同时小车还能够完成红外线避障、超声波测距避障和黑线寻迹等功能。通过对本次智能小车的设计,我明白了开发一个完整的电子产品不仅需要我们拥有着丰富的理论知识,还需要我们拥有较强的动手能力与编程能力。因为只有我们明白各个器件和电路的原理,我们才能把它们组成为小车的一个模块,然后再把小车的各个模块组合起来,让其成为一个完整的智能小车系统。而通过编程我们才能让智能小车系统按照我们的要求去完成一些功能。为了让智能小车系统在实物上得到体现,我们需要对硬件进行设计,明白如何去在电路上组装这些器件,做出一个完整的智能小车实物,这非常考验我们的动手能力。总之,通过这次设计,我学会了红外线避障、黑线寻迹和超声波测距的基本原理,同时对编程软件的使用以更加熟练,较弱的编程能力也得到提高。但是由于能力的限制和一些客观的因素,本设计的智能小车还难以完美无缺地去实现要求的功能。例如,当小车进行超声波测距避障时,如果小车行驶的环境比较复杂,那么小车有时便会撞上障碍物。这是因为小车只装有一个超声波模块,有时超声波会往另一个方向反射回来,无法被接收头接收,这便导致了小车认为前面没有障碍物而继续前进,最终撞上障碍物。同时,红外避障也存在一些缺陷,由于红外传感器的检测范围是有限的且容易受到自然光的影响,所以这会导致小车无法检测到障碍物和黑线,从而无法完成红外避障与黑线寻迹。还有小车在调速方面也显得比较麻烦。这些都是小车需要改进的地方。为了使小车更加完美,我们可以安装更多的超声波模块以防止小车撞上障碍物;我们也可以安装更多的红外避障模块与寻迹模块,这样便可使小车能够适应更加复杂的环境,寻迹的准确性和灵敏度也会更高。我们还可以为智能小车增加一个人体检测模块,但人体靠近时,可以报警和迎宾,使小车更加智能化。参考文献[1]赵旭东,魏慧竹,李曦.基于红外线传感器的智能寻迹小车设计[J].四川水泥.2016(10):37-42.[2]赵龙,王星,车通.智能小车的设计[J].企业技术开发.2012(20):75-78.[3]雷银.智能小车[J].电子制作.2011(06):44-46.[4]嵌入之梦.小车大观[J].电子制作.2011(12):24-28.[5][6]丁一峰.智能小车的设计与应用探讨[J].散文百家(新语文活页).2016(01):12-22.[7]徐锦钢,杨克,沈緐.大学生电子设计竞赛智能小车的制作研究[J].江西电力职业技术学院学报.2013(04):54-68.[8]李瀚霖.智能小车研究与设计[J].科技致富向导.2011(26):14-18.[9]周淑娟.基于单片机智能寻迹小车的设计方案[J].工业技术与职业教育.2011(9):55-74.[10]黄杰.基于模糊控制的智能车辆设计[J]中国科技信息.2010(20):88-94.[11]陈铁军.智能控制理论及应用[M].北京:清华大学出版社,2009:42-45.[12]张毅刚,彭喜元.单片机原理及应用[M].高等教育出版社,2010:60-66.[13]姚培.基于单片机控制的智能循迹避障小车[J].机电信息.2010(12):12-18.[14]杨刚.电子系统设计与实践[J].电子工业出版社,2009:84-92.[15]赵振德.多功能遥控智能小车的制作[J].电子制作.2011(4):55-62.[16]佚名.PWM脉冲宽度调制原理[EB/OL].(2011-10-07)[2020-04-13].……谢辞经过几个月时间的努力,我的毕业设计终于成功完成。通过查阅收集到的与本设计有关的文献资料,我对智能小车的设计有了一个大体的思路,然后再通过老师的帮助,我成功地设计出了小车的各个模块,最后再将这些模块组合起来,最终完成了智能小车的设计。因此,在这里我要特别感谢我的指导老师陈蕴基老师,即使老师还有工作要忙,但是他对于我在设计中遇到的问题都会耐心地为我解答,他还给予了我关于小车硬件设计和软件设计方面的宝贵意见,也正是通过这些意见,我才能够成功地完成毕业设计,在此我要对老师表示由衷的感谢。附录附录1红外避障程序:#include<reg52.h>//51头文件#include<..\CONFIG\QXA51.h>//QX-A51智能小车配置文件unsignedcharpwm_left_val=140;//左电机占空比值取值范围0-170,0最快unsignedcharpwm_right_val=150;//右电机占空比值取值范围0-170,0最快unsignedcharpwm_t;//周期voiddelay(unsignedintz)//毫秒级延时{ unsignedintx,y; for(x=z;x>0;x--) for(y=114;y>0;y--);} /*小车前进*/voidforward(){ left_motor_go;//左电机前进 right_motor_go;//右电机前进}/*小车左转*/voidleft_run(){ left_motor_stops;//左电机停止 right_motor_go;//右电机前进 }/*小车右转*/voidright_run(){ right_motor_stops;//右电机停止 left_motor_go;//左电机前进}/*PWM控制使能小车后退*/voidbackward(){ left_motor_back;//左电机后退 right_motor_back;//右电机后退 }/*PWM控制使能小车高速右转*/voidright_rapidly(){ left_motor_go; right_motor_back; }//定时器0中断voidtimer0()interrupt1{ pwm_t++;//周期计时加 if(pwm_t==255) pwm_t=EN1=EN2=0; if(pwm_left_val==pwm_t)//左电机占空比 EN1=1; if(pwm_right_val==pwm_t)//右电机占空比 EN2=1; }voidkeyscan(){ for(;;) //死循环 { if(key_s2==0)//实时检测S2按键是否被按下 { delay(5);//软件消抖 if(key_s2==0)//再检测S2是否被按下 { while(!key_s2);//松手检测 beep=0; //使能有源蜂鸣器 delay(200);//200毫秒延时 beep=1; //关闭有源蜂鸣器 break; //退出FOR死循环 } } } }voidT0_init(){ TMOD|=0x02;//8位自动重装模块 TH0=220; TL0=220;//11.0592M晶振下占空比最大比值是256,输出100HZ TR0=1;//启动定时器0 ET0=1;//允许定时器0中断 EA =1;//总中断允许 }voidmain(){ keyscan();//等待按下S2启动小车 delay(1000);//延时1秒 T0_init();//定时器0初始化,产生PWM信号 while(1) { //为0识别障碍物为1没有识别到障碍物 if(left_led2==1&&right_led2==1)//左右都没识别到障碍物 { pwm_left_val=140;//左电机占空比值取值范围0-170,0最快 pwm_right_val=150;//右电机占空比值取值范围0-170,0最快 forward();//前进 } if(left_led2==1&&right_led2==0)//小车右侧识别到障碍物,左转躲避 { pwm_left_val=180;//左电机占空比值取值范围0-170,0最快 pwm_right_val=110;//右电机占空比值取值范围0-170,0最快 left_run();//左转 delay(40);//左转40毫秒(实现左小弯转) } if(left_led2==0&&right_led2==1)//小车左侧识别到障碍物,右转躲避 { pwm_left_val=100;//左电机占空比值取值范围0-170,0最快 pwm_right_val=180;//右电机占空比值取值范围0-170,0最快 right_run();//右转 delay(40);//右转40毫秒(实现右小弯转) } if(left_led2==0&&right_led2==0)//小车左右两侧都识别到障碍物,后退掉头 { pwm_left_val=150;//左电机占空比值取值范围0-170,0最快 pwm_right_val=160;//右电机占空比值取值范围0-170,0最快 backward();//后退 delay(100);//后退的时间影响后退的距离。后退时间越长、后退距离越远。 pwm_left_val=140;//左电机占空比值取值范围0-170,0最快 pwm_right_val=150;//右电机占空比值取值范围0-170,0最快 right_rapidly();//高速右转 delay(180);//延时时间越长,转向角度越大。 } }}超声波测距避障程序:#include<reg52.h>//51头文件#include<intrins.h>//包含nop等系统函数#include<..\CONFIG\QXA51.h>//QX-A51智能小车配置文件sbitDU=P2^6;//数码管段选sbitRX=P2^0;//ECHO超声波模块回响端sbitTX=P2^1;//TRIG超声波模块触发端sbitLCM_RW=P3^6;//定义LCD引脚sbitLCM_RS=P3^5;sbitLCM_E=P3^4;#defineLCM_DataP0//定义液晶屏数据口#defineBusy0x80//用于检测LCM状态字中的Busy标识unsignedcharpwm_left_val=100;//左电机占空比值取值范围0-170,0最快unsignedcharpwm_right_val=110;//右电机占空比值取值范围0-170,0最快unsignedcharpwm_t;//周期unsignedinttime=0;//传输时间unsignedlongS=0;//距离bitflag=0;//超出测量范围标志位unsignedcharcodeRange[]="==RangeFinder==";//LCD1602显示格式unsignedcharcodeASCII[13]="0123456789.-M";unsignedcharcodetable[]="Distance:000.0cm";unsignedcharcodetable1[]="!!!Outofrange";unsignedchardisbuff[4]={0,0,0,0};//距离显示缓存voiddelay(unsignedintz)//毫秒级延时{ unsignedintx,y; for(x=z;x>0;x--) for(y=114;y>0;y--);}voidDelay10us(unsignedchari) //10us延时函数启动超声波模块时使用{unsignedcharj; do{ j=10; do{ _nop_(); }while(--j); }while(--i);}voidcmg88()//关数共阴极码管{DU=1; P0=0X00;//共阴极数码管阳极给低电平,全部熄灭DU=0;}/************************************LCD1602液晶屏驱动函数************************************************///*******************读状态*************************//unsignedcharReadStatusLCM(void){ LCM_Data=0xFF; LCM_RS=0; Delay10us(1); LCM_RW=1; Delay10us(1); do{ LCM_E=0; Delay10us(1); LCM_E=0; Delay10us(1); LCM_E=1; Delay10us(1); } while(LCM_Data&Busy);//检测忙信号 return(LCM_Data);}/****************写数据************************/voidWriteDataLCM(unsignedcharWDLCM){ ReadStatusLCM();//检测忙 LCM_Data=WDLCM; LCM_RS=1; Delay10us(1); LCM_RW=0; Delay10us(1); LCM_E=0;//若晶振速度太高可以在这后加小的延时 Delay10us(1); LCM_E=0;//延时 Delay10us(1); LCM_E=1; Delay10us(1);}//****************写指令*************************//voidWriteCommandLCM(unsignedcharWCLCM,BuysC)//BuysC为0时忽略忙检测{ if(BuysC)ReadStatusLCM();//根据需要检测忙 LCM_Data=WCLCM; LCM_RS=0; Delay10us(1); LCM_RW=0; Delay10us(1); LCM_E=0; Delay10us(1); LCM_E=0; Delay10us(1); LCM_E=1; Delay10us(1);}//*******************LCM初始化**********************//voidLCMInit(void){ LCM_Data=0; WriteCommandLCM(0x38,0);//三次显示模式设置,不检测忙信号 delay(5); WriteCommandLCM(0x38,0); delay(5); WriteCommandLCM(0x38,0); delay(5); WriteCommandLCM(0x38,1);//显示模式设置,开始要求每次检测忙信号 WriteCommandLCM(0x08,1);//关闭显示 WriteCommandLCM(0x01,1);//显示清屏 WriteCommandLCM(0x06,1);//显示光标移动设置 WriteCommandLCM(0x0c,1);//显示开及光标设置}//*********************按指定位置显示一个字符***********************//voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData){ Y&=0x1; X&=0xF;//限制X不能大于15,Y不能大于1 if(Y)X|=0x40;//当要显示第二行时地址码+0x40; X|=0x80;//算出指令码 WriteCommandLCM(X,1);//发命令字 WriteDataLCM(DData);//发数据}//**********************按指定位置显示一串字符*************************//voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData){ unsignedcharListLength;ListLength=0; Y&=0x1; X&=0xF;//限制X不能大于15,Y不能大于1 while(DData[ListLength]>0x19)//若到达字串尾则退出 { if(X<=0xF)//X坐标应小于0xF { DisplayOneChar(X,Y,DData[ListLength]);//显示单个字符 ListLength++; X++; } }}/***************************************************************************//*定时器0中断*/voidtimer0()interrupt1 //T0中断用来计数器溢出,超过测距范围{ flag=1; //中断溢出标志 }voidStartModule() //启动超声波模块{ TX=1; //启动一次模块Delay10us(2); TX=0;} /*小车前进*/voidforward(){ left_motor_go;//左电机前进 right_motor_go;//右电机前进}/*PWM控制使能小车后退*/voidbackward(){ left_motor_back;//左电机后退 right_motor_back;//右电机后退 }/*小车停止*/voidstop(){ right_motor_stops;//右电机停止 left_motor_stops;//左电机停止 }/*PWM控制使能小车高速左转*/voidleft_rapidly(){ left_motor_back; right_motor_go; }/*定时器1中断输出PWM信号*/voidtimer1()interrupt3{ pwm_t++;//周期计时加 if(pwm_t==255) pwm_t=EN1=EN2=0; if(pwm_left_val==pwm_t)//左电机占空比 EN1=1; if(pwm_right_val==pwm_t)//右电机占空比 EN2=1; }/*判断S2是否被按下*/voidkeyscan(){ for(;;) //死循环 { if(key_s2==0)//实时检测S2按键是否被按下 { delay(5);//软件消抖 if(key_s2==0)//再检测S2是否被按下 { while(!key_s2);//松手检测 beep=0; //使能有源蜂鸣器 delay(200);//200毫秒延时 beep=1; //关闭有源蜂鸣器 break; //退出FOR死循环 } } } }/*计算超声波所测距离并显示*/voidConut(void){ time=TH0*256+TL0; TH0=0; TL0=0; S=(float)(time*1.085)*0.17;//算出来是MM if((S>=7000)||flag==1)//超出测量范围 { flag=0; DisplayListChar(0,1,table1);//1602显示数组table1 } else { disbuff[0]=S/1000;//距离数值千位 disbuff[1]=S%1000/100;//距离数值百位 disbuff[2]=S%100/10;//距离数值十位 disbuff[3]=S%10;//距离数值个位 DisplayListChar(0,1,table);//显示:Distance:000.0cm DisplayOneChar(9,1,ASCII[disbuff[0]]);//显示千位 DisplayOneChar(10,1,ASCII[disbuff[1]]); DisplayOneChar(11,1,ASCII[disbuff[2]]);DisplayOneChar(12,1,ASCII[10]); //显示. DisplayOneChar(13,1,ASCII[disbuff[3]]); }}/*超声波避障*/void Avoid(){ if(S<400)//设置避障距离,单位毫米 刹车距离 { beep=0;//使能蜂鸣器 stop();//停车 backward();//后退 delay(100);//后退时间越长、距离越远。后退是为了留出车辆转向的空间 do{ left_rapidly();//高速左转 delay(90);//时间越长转向角度越大,与实际行驶环境有关 stop();//停车 delay(100);//时间越长停止时间越久长 StartModule(); //启动模块测距,再次判断是否 while(!RX); //当RX(ECHO信号回响)为零时等待 TR0=1; //开启计数 while(RX); //当RX为1计数并等待 TR0=0; //关闭计数 Conut(); //计算距离 }while(S<280);//判断前面障碍物距离 beep=1;//关闭蜂鸣器 } else { forward();//前进 } }voidmain(){ cmg88();//关数码管 LCMInit();//LCM初始化 delay(5);//延时片刻 DisplayListChar(0,0,Range);//1602第一行显示Range数组内容 DisplayListChar(0,1,table);//1602第二行显示table数组内容 keyscan();//等待按下S2启动小车 delay(1000);//延时1秒 TMOD|=0x20;//定时器1工作模式2,8位自动重装。用于产生PWM TMOD|=0x01;//定时器0工作模块1,16位定时模式。T0用测ECH0脉冲长度 TH1=220;// TL1=220;//100HZT1 TH0 =0;TL0 =0;//T0,16位定时计数用于记录ECHO高电平时间ET1 =1;//允许T1中断 ET0=1;//允许T0中断 TR1=1;//启动定时器1 EA=1;//启动总中断 while(1) { StartModule(); //启动模块测距 while(!RX); //当RX(ECHO信号回响)为零时等待 TR0=1; //开启计数 while(RX); //当RX为1计数并等待 TR0=0; //关闭计数 Conut(); //计算距离 Avoid(); //避障 delay(65); //测试周期不低于60MS }}黑线寻迹程序:#include<reg52.h>//51头文件#include<..\CONFIG\QXA51.h>//QX-A51智能小车配置文件unsignedcharpwm_left_val=170;//左电机占空比值取值范围0-170,0最快unsignedcharpwm_right_val=170;//右电机占空比值取值范围0-170,0最快unsignedcharpwm_t;//周期/*小车前进*/voidforward(){ left_motor_go;//左电机前进 right_motor_go;//右电机前进}/*小车左转*/voidleft_run(){ left_motor_stops;//左电机停止 right_motor_go;//右电机前进 }/*小车右转*/voidright_run(){ right_motor_stops;//右电机停止 left_motor_go;//左电机前进}//定时器0中断voidtimer0()interrupt1{ pwm_t++;//周期计时加 if(pwm_t==255) pwm_t=EN1=EN2=0; if(pwm_left_val==pwm_t)//左电机占空比 EN1=1; if(pwm_right_val==pwm_t)//右电机占空比 EN2=1; }voidmain(){ TMOD|=0x02;//8位自动重装模块 TH0=220; TL0=220;//11.0592M晶振下占空比最大比值是256,输出100HZ TR0=1;//启动定时器0 ET0=1;//允许定时器0中断 EA =1;//总中断允许 while(1) { //为0没有识别到黑线为1识别到黑线 if(left_led1==1&&right_led1==1)//左右寻迹探头识别到黑线 { forward();//前进 } else { if(left_led1==1&&right_led1==0)//小车右边出线,左转修正 { left_run();//左转 } if(left_led1==0&&right_led1==1)//小车左边出线,右转修正 { right_run();//右转 } } }}红外遥控程序:#include<reg52.h>//51头文件#include<..\CONFIG\QXA51.h>//QX-A51智能小车配置文件/*====================================自定义类型名====================================*/typedefunsignedcharINT8U;typedefunsignedcharuchar;typedefunsignedintINT16U;typedefunsignedintuint;/*====================================硬件接口位声明====================================*/sbitIR=P3^2;//定义红外脉冲数据接口 外部中断O输入口ucharIRtime; //检测红外高电平持续时间(脉宽)ucharIRcord[4];//此数组用于储存分离出来的4个字节的数据(用户码2个字节+键值码2个字节)ucharIRdata[33];//此数组用于储存红外的33位数据(第一位为引导码用户码16+键值码16)bitIRpro_ok,IRok;//第一个用于红外接收4个字节完毕。IRok用为检测脉宽完毕voidinit() //初始化定时器0和外部中断0{ TMOD=0x02;//定时器0工作方式2,8位自动重装 TH0=0x00;//高8位装入0那么定时器溢出一次的时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 亲子读书心得体会15篇
- 中学生物教研组工作总结
- 中队委竞选演讲稿模板集锦9篇
- 中国医师节致辞范文(6篇)
- 中医院经济管理经验汇报材料-学习材料范文
- 应急值守课件教学课件
- 影像科紧急抢救预案及流程(修)
- 影响-“小组合作学习”实效性的因素及对策
- 机动车安全技术检测仪器设备计算机控制与通信技术条件 编制说明
- wipo-文本和图像作品的集体管理
- 设备管理的总结与反思
- 《货币金融学》蒋先玲版期末复习知识点总结
- 2024年通用技术集团招聘笔试参考题库含答案解析
- 幼儿园室内环境和湿度调节
- 2023汽车4s店承包合同
- 2023年少儿书法美术培训行业趋势报告
- 全国优质课一等奖人教版八年级生物上册《人类对细菌和真菌的利用》公开课课件(内嵌视频)
- 中建住宅给排水工程专项施工方案
- 认知语言学导论第四章(主体和背景)
- 新教师如何备课课件
- 农村小学基于国家中小学智慧教育平台下的双师课堂研究
评论
0/150
提交评论