基于arduino的超声波避障小车设计
基于arduino的超声波避障小车设计,基于,arduino,超声波,小车,设计
长春理工大学本科毕业论文摘要随着5G技术的日趋成熟,无人驾驶有了更加有力的技术支持。无人驾驶技术是未来几十年汽车和科技公司的一个重要研究方向,避障技术是无人驾驶技术中最基础、最核心的一项技术,具有广阔的发展前景。本论文的设计内容为设计一辆基于Arduino的超声波避障小车,本设计将基于Arduino单片机作为控制中心,使用超声波传感器和红外寻迹传感器来获取环境信息,使用舵机来转动超声波传感器,使用L298N模块作为电机驱动模块驱动四轮小车,解决了小车绕过障碍物后返回原路线的难题,实现了设计要求。经过实验验证,本文所设计的小车能够检测障碍物并进行避障,并能够在避障后按照原路线进行行驶。达到了预期的目标和要求。关键词 Arduino 超声波 避障 小车AbstractAs 5G technology matures, driverless driving has more powerful technical support. Unmanned driving technology is an important research direction for automobile and technology companies in the next few decades. Obstacle avoidance technology is the most basic and core technology in unmanned driving technology, and has broad development prospects.The design of this paper is to design an Arduino-based ultrasonic obstacle avoidance car. This design will be based on the Arduino single-chip microcomputer as the control center, using ultrasonic sensors and infrared tracking sensors to obtain environmental information, using steering gear to rotate the ultrasonic sensor, using L298N As a motor drive module, the module drives the four-wheeled car, which solves the problem of the car returning to the original route after bypassing the obstacle, and realizes the design requirements.After experimental verification, the car designed in this paper can detect obstacles and avoid obstacles, and then follow the original route after avoiding obstacles. Achieved the expected goals and requirements.Key wards Arduino;ultrasound;avoidance;car目录摘要IAbstractII第1章绪论11.1 选题背景11.2 研究的目的和意义21.2.1研究目的21.2.2研究意义21.3 国内外研究现状31.3.1国外研究现状31.3.2国内研究现状31.4 论文的研究内容41.5 本章小结4第2章系统设计52.1 系统设计52.2 本章小结5第3章超声波测距原理63.1 超声波测距原理63.2 本章小结6第4章硬件设计74.1 硬件选择74.1.1单片机选择74.1.2超声波模块选择84.1.3舵机选择84.1.4红外寻迹模块选择94.1.5电机驱动模块选择104.1.6其它器件选择104.2 硬件组装114.3 本章小结11第5章软件设计125.1 各个模块程序设计125.1.1Arduino UNO单片机125.1.2超声波模块125.1.3舵机模块135.1.4红外寻迹模块135.1.5电机驱动模块145.2 小车子程序设计165.2.1靠近障碍物165.2.2检测障碍物165.2.3沿壁行驶185.2.4检测黑线195.2.5寻迹行驶205.3 小车完整程序设计215.4 本章小结22第6章工程定额概算236.1 小车制作过程成本预算236.2小车对环境的影响及其可持续性236.2.1材料污染环境问题236.2.2噪音污染问题236.2.3工业三废问题236.2.4社会可持续发展问题236.3 本章小结23第7章总结24参考文献25致谢26第1章绪论智能小车是一种由多个轮子驱动的能够自动完成一定任务的智能机器人。科学技术的不断发展,为智能小车提供了强有力的技术支持,使得智能小车的实现成为了可能,智能小车也因此成为了科学技术研究的一个热门的、重要的方向。智能小车自身也有着很多的优点,其中最为明显的优点是能够不需要人为干预地、自主地完成一定的任务;智能小车还拥有其它的一些优点,它具有体积比较小、重心比较低、运动灵活等优点1。避障技术就是智能小车通过自身的控制中心执行一定的避障程序来使智能小车实现躲避障碍物的一项技术,这项技术能够大大提高智能小车在执行任务过程中的安全性,避免智能小车受到损伤。1.1 选题背景智能小车在生活服务、工业制造、军事等行业已经有了广泛的应用1,使得智能小车的避障技术成为了国内外很多研究机构关注的焦点。智能小车避障技术的实现需要硬件和软件,硬件就是为智能小车添加控制芯片以及各种能够采集智能小车所处空间信息的传感器,软件就是基于智能小车所搭载的基于硬件系统编写的能够实现小车躲避障碍物功能的程序。智能小车避障系统目前已经处于大规模发展阶段,但是避障系统还存在诸多的缺陷和局限性,同时也有着广阔的发展前景,这使得更多的从事相关领域研究的人投入智能小车技术的研究之中。近些年来,经过所有从事研究智能小车人员的不断探索和研究,智能小车的避障算法越来越先进,智能小车在躲避障碍物的时候能够更加精准、更加准确,传统的避障智能小车变得更加智能、更能够适应复杂的工作环境。在生活服务领域:在汽车行业之中,5G技术的日趋成熟,为自动驾驶技术的实现提供了强大的技术支持,自动驾驶技术将会成为各个汽车品牌的一项核心卖点。自动驾驶技术中不可或缺、最为重要的一项技术就是避障技术,避障技术能够保证乘客在乘坐汽车时的安全性。在快递服务行业之中,快递行业的巨头们都在研究自主运行的快递车,旨在解决快递配送服务的最后一公里的难题,无人快递车目前已经在部分大学之中进行定点试运行,避障技术无疑是无人快递车的一项核心技术,避障技术能够避免快递车撞到行人或者其它障碍物。相信在不远的未来,我们收到的快递都是由无人快递车进行配送的,快递车成为我们生活中的重要组成部分。此外,在2020年伊始,新冠病毒蔓延全球,人类的生命受到了巨大的威胁,很多人因此丧命,但这次疫情也是一次机遇,为了尽量避免人与人之间的交叉感染,很多的科技公司拿出他们的正在研究的智能车辆,进行了试运行。顺丰快递公司使用它们公司的无人车为武汉配送瓜果蔬菜等生活物资;京东集团所研究的无人车为武汉的医院配送医疗物资。还有其它的智能小车配合5G技术使得医生能够远程会诊、远程查房。还有智能小车能够装载消毒剂,对空气进行消毒;搭载紫外线生成器,对病房进行紫外线消毒;还能够运送垃圾。这些智能小车,全部需要运用避障技术,这也正好体现了避障技术在未来智能生活、智能城市中的重要性。在工业制造领域:在快递分拣中心,上千个无人“小黄车”快速地、自主地分拣快递。我国的上海洋山港四期码头,最为吸引人的地方莫过于该码头高度的自动化。高度的自动化实现的方式是采用了上百台自动引导运输车,也被称为AGV。通过“智能”大脑,AGV可以自定行车路线,有效规避碰撞。洋山四期的锂电池驱动AGV采用了当今最前沿的技术,除了无人驾驶、自动导航、路径优化、主动避障外,还支持自我故障诊断、自我电量监控等功能2。显而易见,若想让上述的情况变成现实,必定离不开避障技术。在军事领域:无人机能够承担侦察、轰炸等任务。无人车还能够承担巡逻等任务。这一切也都离不开避障技术。综上所述:避障技术是未来智能时代最重要、最核心、最基础的一项技术,避障技术的研究对于实现理想的智慧城市有着极其重要的意义。1.2 研究的目的和意义1.2.1研究目的(1)设计一辆基于arduino单片机的利用超声波传感器模块来实现避障的小车,此外,小车能够在绕过障碍物后继续按照原路线进行行驶。(2)由于本科阶段的课程之中未涉及到arduino单片机的原理及应用的学习,但是本科的课程学习了最基础的51单片机,在学习的过程中积累了学习单片机的思路及学习方法,根据学习51单片机的方法和思路的积累,自己通过网上视频教程和相关书籍学习一种新的单片机:arduino的使用方法。(3)由于arduino使用类C语言进行编程,本科阶段的对C语言进行了学习。该设计能够提高C语言的编程能力。(4)通过自己动手搭建一个智能小车平台,能够掌握智能小车平台的搭建方法,提高动手能力。(5)该设计分为硬件搭建和软件编程两个方面,该设计能够掌握硬件与软件结合调试的基本方法和技巧。(6)设计过程可能会出现意想不到的问题,因此需要学会分析问题的原因,能够提高解决问题的能力。1.2.2研究意义智能小车在生活服务、工业制造、军事领域都有着深远的研究意义。生活服务:避障技术对于无人驾驶技术的最终实现有着极其重要的意义,它可以保证无人驾驶技术的安全性,保护了人们的生命财产安全,它本身就是自动驾驶技术中的一部分。此外,餐厅服务机器人、银行服务机器人等各种各样的机器人,想要真正实现,都离不开避障技术的支持。工业制造:快递中心的自动分拣机器人、无人码头的自动引导运输车的实现,都需要避障技术作为其技术基础。军事领域:随着信息技术近些年的飞速发展,战争已经从过去传统的机械化战争变成了信息化战争,信息化战争对于军事装备提出了新的要求,无人机,无人侦察车等多种装备成为了军事领域研究的重要方向。而这一切都离不开避障技术的支持。无人化、智能化、自动化才是未来人们的生活方式的常态,而这一切都离不开避障技术的支持,避障技术的研究有着深远的影响。1.3 国内外研究现状1.3.1国外研究现状国外智能小车的研究历史较长,始于上世纪50年代。它的发展历程大体可以分为三个阶段3。第一阶段:这个阶段仍处于智能小车研究的起步阶段,刚开始有科研人员开始了对智能小车的研究。1954年美国Barrett Electronics公司研究开发了世界上第一台自主引导车系统AGVS(Automated Guided Vehicle System)3。该系统是为了提高企业工厂物品搬运的自动化水平而进行的探索研究,实现了拖车在固定线路上的自主运行的功能。这也是人类对于智能小车技术最早的探索和研究。第二阶段:这个阶段是智能小车研究逐渐风行的阶段。在欧洲、美洲的美国以及亚洲的日本等国家意识到了智能小车发展的重要性,纷纷成立机构来加大对智能小车技术的研究和探索,这就促进了智能小车技术的整体进步。紧接着,智能小车的研究浪潮席卷了整个世界,大量的世界著名的公司陆续地投入到智能小车的研究之中。第三阶段:这个阶段智能小车的研究已经进入了深入、系统、大规模研究阶段3,国外对于智能小车的研究目前仍处于第三阶段。美国卡内基.梅隆大学、麻省理工大学、德意志联邦大学、日本大阪大学等很多的学校对智能小车进行了深入的研究。这个阶段,对于智能小车的研究成果呈现井喷状态,各种方案被用于实验验证,其中充满了大量的具有深远影响意义的解决方案。例如:UBM视觉系统、Combi road系统、航位推测系统。1.3.2国内研究现状相对于国外,我国开展智能小车技术方面的研究起步较晚,开始于上个世纪的80年代。虽然我国在智能车辆技术方面的研究总体上落后于发达国家,并且存在一定的技术差距4,但是随着我国政府和企业认识到了科技创新的重要性并加大了对科技创新的投入,以及我国科学技术研究人员的不懈努力,截止到今天,我国的智能小车技术的研究取得了丰硕的成果,在某些方面赶上了、甚至超越了世界先进水平。中国第一汽车集团公司和国防科技大学机电工程与自动化学院与2003年研制成功我国第一辆自主驾驶轿车4。这辆轿车除了能够完成在高速公路上的正常行驶之外,还能够实现超车这种复杂的自动控制。在当时,这辆的总体技术水平已经和世界上最为先进的智能小车水平不相上下。南京理工大学、北京理工大学、浙江大学、国防科技大学、清华大学等多所院校联合研制了7B.8军用室外自主车,该车装有彩色摄像机、激光雷达、陀螺惯导定位等传感器4。其体系结构以水平式结构为主,采用传统的“感知-建模-规划-执行”算法。智能车辆研究也是智能交通系统ITS的关键技术。随着ITS研究的兴起,我国已形成一支ITS技术研究开发的技术专业队伍。并且各交通、汽车企业越来越加大了对ITS及智能车辆技术研发的投入,整个社会的关注程度在不断提高4。总而言之,近些年我国经济的高速发展,为发展智能小车技术提供了经济基础;国家对于科技创新越来越重视,为发展智能小车技术提供了政策基础;各个大学培养出了大批的高素质人才,为发展智能小车技术提供了人才基础,可以肯定,我国对于智能小车的研究必然会越来越好,避障技术作为其中重要的一项组成部分,其研究也必然会越来越好。1.4 论文的研究内容该论文在四轮小车平台上基于arduino单片机进行研究,研究的主要内容为利用超声波模块、舵机模块、红外寻迹模块所采集环境信息并通过执行避障程序来使得小车实现避障,并且在避障之后智能小车能够按照原路线进行行驶。小车整个运行过程:在地面上铺设黑线作为小车的行驶路线,使用超声波传感器来检测小车距离障碍物的距离,当小车距离障碍物小于10cm时,小车先停止前进;然后小车向左行驶,并使超声波朝向障碍物,通过超声波传感器所测量的距离判断障碍物的左边界,然后向右行驶判断右边界,从而判断小车从障碍物左侧避障还是右侧避障,以保证小车采用最佳避障路线;绕过障碍物的过程采用沿壁行驶;然后通过红外寻迹传感器检测地面上的黑线,使小车车头回正;继续寻迹沿着黑线行驶,当小车检测到横向黑线时,小车停止运动。至此,小车完成全部任务。1.5 本章小结了解了避障技术的发展历程,认识到了避障技术的重要性和研究的深远意义。明确了该设计的研究内容。第2章系统设计2.1 系统设计本设计的设计目的是设计一台基于Arduino的超声波避障小车,因此,选择Arduino单片机作为整个系统的控制中心,使用超声波传感器作为该设计测量距离的传感器。小车在避障之前需要判断从哪一侧绕行,采用的方案为小车在障碍物前方横向行驶,超声波朝向障碍物,通过超声波测量的距离来判断障碍物的边界。因为需要转动超声波,所以需要一个舵机。小车绕过障碍物的过程选择小车沿着障碍物的侧面距离一定距离绕行的方案。由于小车需要在躲避障碍物之后继续沿着原路线行驶,因此选择在地上铺设黑线作为小车行驶的原路线,为小车配置红外寻迹传感器用来识别黑白线,使小车在躲避障碍物以后通过检测黑线回到原路线进行行驶,同时在小车绕过障碍物以后进行寻迹行驶,这样可以通过铺设黑线来自由规定小车的行驶路线,到小车检测到横向黑线时,小车停止前进。通过上述分析,可知该设计共分为7个部分,分别为:Arduino、超声波、红外寻迹、舵机、电机、电机驱动、电池。由此可以绘制整个小车系统框架,如图2-1所示。超声波红外寻迹舵机电池电机电机驱动Arduino图2-1 小车系统框架2.2 本章小结分析了小车系统各个部分,建立了设计的小车的系统框架。第3章超声波测距原理3.1 超声波测距原理超声波是一种频率高于20000赫兹的声波。它的方向性好、穿透能力墙,易于获得较集中的声能,在水中传播距离远,可用于测距、测速、清洗、焊接、碎石、杀菌消毒等。在医学、军事、工业、农业上有很多的应用5。超声波测距原理:超声波发射器向某一个方向发射一定频率的超声波信号,并在超声波发射的同时,计时器开始计时,超声波在空气中进行传播,当遇到物体的时候,超声波信号反射或者漫反射回来,当超声波接收器接收到反射波时,计时器停止计时,便可以得到超声波信号传播到物体并反射回来的时间,取超声波在空气中传播的速度为340m/s,便可以得到超声波到物体的距离为:距离=(时间*340m/s)/2超声波测距原理如图3-1所示。物体发射器接收器图3-1 超声波测距原理3.2 本章小结介绍了超声波的定义、优点及超声波测距的原理。第4章硬件设计硬件设计包括硬件选择和硬件组装两个部分。4.1 硬件选择4.1.1单片机选择由于该设计题目要求,因此选择该设计所使用的单片机为Arduino单片机。Arduino单片机是一款简单的、入门级别单片机,常作为新手学习的第一块单片机。其分为硬件(各种型号的Arduino板)和软件(Arduino IDE),于2005年冬季由一个欧洲团队开发6。Arduino单片机拥有着诸多的型号,人们接触较多的、常见的型号有Arduino Uno R3和Arduino Nano;此外Arduino单片机还有多种初学者用不到的型号,如Arduino LilyPad、Arduino Due。Arduino单片机所使用的编程软件是名为“Arduino”的软件,这款软件是推出Arduino的团队所推出的,可在Arduino官网下载。考虑到该设计要求采用四轮小车平台,并且会使用多个传感器,对于单片机的管脚需求较大, 因此选择管脚较多的型号:Arduino UNO。Arduino单片机是开源平台,市场上所售卖的Arduino单片机有两类,一类是意大利原装正版单片机,另一类是由第三方厂家根据Arduino官方公布的资料自己生产的;价格方面,意大利原装正版的该型号的单片机价格较高,一般是138元左右,第三方厂家所生产的该型号的单片机的价格较低,从十几元到几十元不等。经过对两种单片机的了解,综合考虑到小车的成本和运行的稳定性,最终选择第三方厂家生产的单片机。Arduino UNO单片机图片如图4-1所示。图4-1 Arduino UNO单片机4.1.2超声波模块选择超声波传感器有很多的型号,精度和价格也各不相同,经过对超声波各种型号的参数的了解和研究,综合考虑设计需求、设计成本和运行稳定性,选择的超声波传感器为大多数新手开始学习所使用的型号,即HC-SR04。该传感器的图片如图4-2所示。图4-2 超声波模块该型号超声波传感器性能稳定,测量精度高,盲区小。该传感器广泛应用于机器人避障、物体测距、液位检测、公共安防、停车场检测等领域7。该型号超声波传感器的电气参数如表4-1所示。表4-1 HC-SR04超声波电气参数电气参数HC-SR04超声波模块工作电压DC 5V工作电流15mA工作频率40Hz最远射程4m最近射程2cm测量角度15度输入回响信号10uS的TTL脉冲输出回响信号输出TTL电平信号,与射程成比例4.1.3舵机选择舵机的型号也多种多样,经过对舵机的各型号参数的了解和研究,综合考虑设计需要、设计成本和运行稳定性,选择的舵机为较为常用到的型号,即SG90。该舵机的图片如图4-3所示。图4-3 SG90舵机舵机主要由以下几个部分组成:舵盘、减速齿轮组、位置反馈电位仪、直流电机、控制电路板等8。该型号舵机的电气参数如表4-2所示。表4-2 SG90舵机电气参数电气参数SG90舵机工作电压DC 4.8V-6V无负载速度0.12秒/60度(4.8V)堵转扭矩1.2-1.4公斤/厘米(4.8V)使用温度-30+60摄氏度死区设定7微秒重量9克4.1.4红外寻迹模块选择红外寻迹模块也多种多样,经过对红外寻迹模块各个型号的了解和研究,综合考虑设计需要、设计成本和运行稳定性,选择红外寻迹模块的型号为TCRT5000。考虑到设计需要小车寻迹行驶,因此需要两个该型号的传感器。该红外寻迹模块图片如图4-4所示。图4-4 红外寻迹模块该传感器的应用范围为:电度表脉冲数据采样、传真机碎纸机纸张检测、障碍检测和黑白线检测9。该型号红外寻迹传感器的电气参数如表4-3所示。表4-3 TCRT5000红外反射传感器电气参数电气参数TCRT5000红外反射传感器工作电压DC 3.3V-5V检测距离1mm8mm使用,焦点距离为2.5mm输出形式数字开关量输出(0和1)4.1.5电机驱动模块选择经过对电机驱动模块各型号的了解和研究,并结合设计的需要,选择电机驱动模块的型号为L298N。由于该设计平台为4轮小车,一个L298N能够驱动两个电机,因此需要两个L298N模块。该电机驱动模块的图片如图4-5所示。图4-5 L298N模块L298N是ST公司生产的一种高电压、大电流的电机驱动芯片,该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W10。该电机驱动模块可以同时驱动两台直流电动机。该型号电机驱动模块的电气参数如下表4-4所示。表4-4 L298N电机驱动模块电气参数电气参数L298N电机驱动模块驱动电压5V-35V逻辑电压5V工作模式H桥驱动(双路)主控芯片L298N逻辑电流0mA-36mA驱动电流2A(MAX单桥)储存温度-20C+35C最大功率25W4.1.6其它器件选择小车选择:选择一台四轮双层的小车作为设计所用小车。电池选择:选择常见的可充电式电池18650锂电池作为供电电池,18650电池额定电压为3.7V,选择3节电池供电。并配置充电器。面包板选择:选择最小的面包板即可,主要用于将各模块的供电引脚接在一起。还需要配置18650的电池盒、开关、数量足够的杜邦线、舵机超声波支架、螺钉、螺母等。4.2 硬件组装将各个模块和零件按照正确的方式组装在一起。小车图片如图4-6所示。图4-6 小车图片4.3 本章小结对该设计所使用的零件选定型号,并组装好小车。第5章软件设计5.1 各个模块程序设计5.1.1Arduino UNO单片机Arduino UNO微控制器采用的是Atmel的ATmega328。Arduino UNO开发板有很多的接口和引脚,其中使用到的接口是USB接口,使用到的引脚为部分数字引脚、5V和GND引脚。USB接口可以用来给单片机下载程序,同时还兼具供电的功能。5V和GND引脚用于小车在运行过程中给Arduino供电。20个数字引脚的名称为0-13和A0-A5,其中A0-A5兼具模拟输入的功能,0-13引脚之中,引脚3、5、6、9、10、11具有PWM功能。5.1.2超声波模块超声波传感器共有4个引脚,分别为Vcc、GND、 Trig、 Echo,其中Vcc、GND接上5V直流电源为超声波供电, Trig控制发出的超声波信号,Echo接收反射回来的超声波信号。超声波传感器的工作原理:通过Trig引脚发一个10uS以上的高电平,模块内部便会自动发送8个40kHz的方波,然后检测Echo引脚由低电平变为高电平便开始计时,直到Echo引脚从高电平变为低电平为止,读取这段时间。便可以利用测得的时间和声音在空气中传播的速度计算出测得的距离,测量距离=(高电平持续时间*声速(取340m/s)/2。超声波时序图如图5-1所示。图5-1 超声波时序图将超声波传感器的Trig引脚连接在A1引脚,Echo引脚连接在A2引脚;因此可编写超声波模块测量距离的程序为:int Trig=A1;int Echo=A2;void setup() pinMode(Trig,OUTPUT); pinMode(Echo,INPUT);void loop() Distance_test( ();float Distance_test() digitalWrite(Trig,LOW); delayMicroseconds(2); digitalWrite(Trig,HIGH); delayMicroseconds(10); digitalWrite(Trig,LOW); delayMicroseconds(2); distance=pulseIn(Echo,HIGH)*340/2/10000.00;5.1.3舵机模块舵机模块一共有3个引脚,分别是Vcc(红色)、GND(棕色)和控制线(橙色)。Vcc和GND引脚接在5V电源上,控制线用来控制舵机所旋转的角度。工作原理:舵机内部有一个基准电压,微处理器产生的PWM信号通过信号线进入舵机产生直流偏置电压,与舵机内部的基准电压作比较,获得电压差输出。电压差的正负输出到电机驱动芯片上,从而决定正反转。当舵机开始旋转的时候,舵机内部通过级联减速齿轮带动电位器旋转,使得电压差为零,电机停止转动11。舵机的控制需要一个20mS左右的时基脉冲,该脉冲的高电平部分一般为0.5mS-2.5mS范围,总间隔为2mS。脉冲的宽度了决定马达转动的角度。例如:1.5mS的脉冲,电机将转向90度的位置。如果脉冲宽度小于1.5mS,那么马达将会转向0度方向。如果脉冲宽度大于1.5mS,那么马达会转向180度方向。脉冲的宽度和马达停止的角度成正相关。由于该设计所用的平台为Arduino UNO单片机,单片机的库函数包含对舵机进行控制的程序,调用库函数“Servo.h”能够使程序更加简单,只需要一条程序“myservo.write(degree)”便可以控制舵机的旋转角度。舵机的控制线接在具有PWM的9号引脚。可以编写舵机的控制程序为:#includeServo myservo;void setup() myservo.attach(9);void loop() myservo.write(degree);5.1.4红外寻迹模块红外寻迹模块共有4个引脚,分别为Vcc、GND、D0和A0,Vcc和GND引脚用来连接3V-5V的电源给传感器供电,D0引脚为数字信号输出引脚,A0引脚在该设计中用不到。该红外寻迹模块包含有发射管和接收管,其中发射管会不断向外界发射红外线,接收管则不断检测环境中的红外线强度。当发射管发射出的红外线没有被反射回来或反射回来但强度不够大时,此时模块的输出端为高电平,模块上的指示灯处于熄灭状态;当被检测物体出现在检测范围内时,红外线被反射回来且强度足够大时,模块的输出端为低电平,指示灯被点亮。该设计一共使用了两个该型号的红外寻迹模块,Vcc和GND用来接在5V的电源上供电,左侧红外寻迹模块的D0引脚接在A3引脚,右侧红外寻迹模块的D0引脚接在A4引脚。因此红外寻迹模块的程序为:int hw_left=A3;int hw_right=A4;int l,r;void setup() pinMode(hw_left,INPUT); pinMode(hw_right,INPUT);l=digitalRead(hw_left); r=digitalRead(hw_right);5.1.5电机驱动模块L298N模块共有13个引脚,其中左侧两个引脚为输出A,右侧两个引脚为输出B;前方左侧三个蓝色引脚从左到右分别为:12V供电引脚、GND、5V供电引脚;前方右侧六个引脚从左到右分别为:通道A使能、两个通道A控制引脚(IN1、IN2),两个通道B控制引脚(IN1、IN2),通道B使能。使用三节串联的18650锂电池给L298N模块进行供电,连接在L298N模块的12V供电引脚和GND引脚,两个L298N模块进行并联。L298N的5V供电引脚用来给单片机供电。L298N电机驱动模块的逻辑功能表如下表5-1所示。表5-1 L298N逻辑功能表ENAIN1IN2直流电机状态0-停止100制动101正转110反转111制动将小车车轮的电机分别连接在两个L298N对应的输出引脚,前方左轮、前方右轮、后方左轮、后方右轮的使能管脚分别连接在具有PWM功能的3、5、6、11引脚。前方左轮、前方右轮、后方左轮、后方右轮的控制引脚分别连接在0、1、2、4、7、8、10、12引脚。可以编写的小车行进的程序为:int ENA1=3;int flmotor1=0;int flmotor2=1;int ENB1=5;int frmotor1=2;int frmotor2=4;int ENA2=6;int blmotor1=7;int blmotor2=8;int ENB2=11;int brmotor1=10;int brmotor2=12;void setup() pinMode(ENA1,OUTPUT); pinMode(flmotor1,OUTPUT); pinMode(flmotor2,OUTPUT); pinMode(ENB1,OUTPUT); pinMode(frmotor1,OUTPUT); pinMode(frmotor2,OUTPUT); pinMode(ENA2,OUTPUT); pinMode(blmotor1,OUTPUT); pinMode(blmotor2,OUTPUT); pinMode(ENB2,OUTPUT); pinMode(brmotor1,OUTPUT); pinMode(brmotor2,OUTPUT);void loop() forward();void forward() analogWrite(ENA1,70); analogWrite(ENB1,70); analogWrite(ENA2,70); analogWrite(ENB2,70); digitalWrite(flmotor1,HIGH); digitalWrite(flmotor2,LOW); digitalWrite(frmotor1,HIGH); digitalWrite(frmotor2,LOW); digitalWrite(blmotor1,HIGH); digitalWrite(blmotor2,LOW); digitalWrite(brmotor1,HIGH); digitalWrite(brmotor2,LOW);(注:该程序仅列出小车前进的程序,其它行进情况的程序会在完整程序的文件中展示。)5.2 小车子程序设计小车整个运行过程可分为靠近障碍物、检测障碍物边界、沿壁行驶、检测黑线和寻迹行驶五个过程。为模块化编写程序,将上述5个过程分开进行编程。5.2.1靠近障碍物靠近障碍物是为了更好地执行沿壁程序。当小车距离障碍物距离大于30cm时,小车寻迹前行,当小车距离障碍物距离小于30cm时,小车间歇前进,目的是降低小车的速度,因为小车行驶过程中测得的距离与实际距离差值较大。当小车距离障碍物距离小于10cm时,小车停止。由此可编写程序为:myservo.write(90);delay(500);Distance_test();while(distance30) track(); Distance_test();stoprun();delay(100);Distance_test();while(distance10) forward(); delay(100); stoprun(); delay(100); Distance_test();stoprun();delay(1000);5.2.2检测障碍物检测障碍物子程序所要完成的任务是确定小车从障碍物的哪一侧绕过障碍物,为实现上述任务,实现的方案为小车先向左转过90度,舵机带动超声波传感器转向障碍物一侧,不断测量距离,同时每隔100mS记一次数,当距离小于一定值时,小车向前进行检测障碍物的沿壁行驶,否则小车右转180度,同样转动舵机带动超声波传感器朝向障碍物,不断测量距离,同样间隔计数,当距离小于一定数值并且计数值小于向左计数值的两倍时,小车向前进行检测障碍物的沿壁行驶,否则,小车停止。此时,如果向右计数值等于两倍的向左计数值并且距离小于一定值,说明小车距离障碍物左侧边界更近,小车应该从障碍物左侧绕行,小车向左转动180度,并向左行驶向左计数值乘100mS的时间。否则,便说明小车距离障碍物右侧边界更近,小车应该从障碍物右侧绕行。由此可编写检测障碍物子程序为:void zhangaiwu() turnleft(); delay(370); stoprun(); delay(1000); myservo.write(0); delay(500); Distance_test(); while(distance50) zhangaiwu_yanbileft(); delay(100); left=left+1; Distance_test(); stoprun(); delay(1000); turnright(); delay(650); stoprun(); delay(1000); myservo.write(180); delay(500); Distance_test(); while(distance50&(right2*left) zhangaiwu_yanbiright(); delay(100); right=right+1; Distance_test(); stoprun(); delay(1000); if(right=2*left)&(distance=20&distance=24) forward(); else if(distance24) runleft();void zhangaiwu_yanbileft() if(distance=20&distance=24) forward(); else if(distance24) runright();(注:小车行进相关程序详细代码可在完整程序的文件中查看。)5.2.3沿壁行驶沿壁行驶子程序所要完成的任务是让小车能够距离障碍物外边界一定距离沿障碍物外边界进行行驶。为实现此任务,实现的方案为旋转舵机使超声波传感器朝向障碍物一侧,当小车距离障碍物距离在一定范围之内时,小车向前行驶;当小车距离障碍物过远时,小车向靠近障碍物一侧行驶;当小车距离障碍物过近时,小车向远离障碍物一侧行驶;当小车距离障碍物超过一定限制时,小车以较大的转弯半径向靠近障碍物一侧进行行驶。由此,可编写沿壁行驶的子程序为:void yanbi_right() Distance_test(); if(distance=23&distance=27) forward(); else if(distance27&distance=23&distance=27) forward(); else if(distance27&distance=35) turnright(); else runright();(注:小车行进相关程序详细代码可在完整程序的文件中查看。)5.2.4检测黑线检测黑线子程序的任务是使黑线重新位于两个红外寻迹模块之间,使小车能够寻迹。为了实现该任务,实现的方案为当小车沿壁程序执行过程中两个红外寻迹模块检测是否有黑线,当检测到黑线时,小车向前行驶一段距离(约半个车身的距离),然后小车停止片刻,小车右侧红外寻迹模块检测黑线同时小车向右转动,当小车检测到黑线时,小车继续向右转动并继续检测黑线,当检测不到黑线时,黑线已经位于小车两个红外寻迹模块之间。由此,编写检测黑线子程序为:void jchx_right() forward(); delay(200); stoprun(); delay(1000); r=digitalRead(hw_right); while(r=LOW) hx_turnright(); r=digitalRead(hw_right); while(r=HIGH) hx_turnright(); r=digitalRead(hw_right); void jchx_left() forward(); delay(200); stoprun(); delay(1000); l=digitalRead(hw_left); while(l=LOW) hx_turnleft(); l=digitalRead(hw_left); while(r=HIGH) hx_turnleft(); l=digitalRead(hw_left); (注:小车行进相关程序详细代码可在完整程序的文件中查看。)5.2.5寻迹行驶寻迹行驶子程序的任务是使小车能够按照即定路线进行行驶。为了实现该任务,实现的方案为在地上(尽量选择颜色亮的颜色,减少对红外线的吸收)贴上黑线作为小车行驶的路线,使用两个红外寻迹来检测黑线,当两侧的红外寻迹模块均未检测到黑线时,小车向前行驶;当左侧红外寻迹模块检测到黑线时,小车向右侧转弯行驶;当右侧红外寻迹模块检测到黑线时,小车向左侧转弯行驶;当左右两侧两个红外寻迹传感器都检测到黑线时,小车停止前进。由此,可编写寻迹行驶子程序为:void track() l=digitalRead(hw_left); r=digitalRead(hw_right); if(l=LOW&r=LOW) forward(); else if(l=HIGH&r=LOW) turnleft(); else if(l=LOW&r=HIGH) turnright(); else if(l=HIGH&r=HIGH) stoprun(); while(1) (注:小车行进相关程序详细代码可在完整程序的文件中查看。)5.3 小车完整程序设计通过上述对各个模块的研究和对各个子程序的编写可以设计出该设计的完整程序。小车主程序的流程图如图5-2所示。是是是否是jchx_left();舵机转到90度;停止前进yanbi_right();jchx_right();舵机转到90度;停止前进l=LOW&r=LOWl=digitalRead(hw_left);r=digitalRead(hw_right);l=LOW&r=LOWl=digitalRead(hw_left);r=digitalRead(hw_right);Right2*left&距离10cm间歇前进Distance_test()zhangaiwu()stoprun()Distance_test()开始距离30cm舵机转到90track()Distance_test()yanbi_left();否是否否否track()track()图5-2 主程序流程图5.4 本章小结本章介绍了各模块的使用方法并进行了编程,同时对各个子程序进行了编程。并确定了主程序执行流程。第6章工程定额概算6.1 小车制作过程成本预算小车制作所用零件均从网络购物平台上进行购买。小车所有零部件价格如表6-1所示。表6-1 小车各零件价格 (单位:元)零件名称价格零件名称价格小车底盘41.9超声波2.4舵机4.8超声波舵机支架4.5Arduino UNO14.9L298N(两个)9.6518650电池(3节)2418650充电器1618650电池盒2.54红外寻迹模块(两个)6面包板0.65杜邦线4.75黑色胶带2-6.2小车对环境的影响及其可持续性6.2.1材料污染环境问题本设计所采用的零件由亚克力板、塑料、PCB板、电池、少量金属和橡胶做成。该设计所用到的小车在使用过程中不会污染环境,当小车报废以后,小车中亚克力不会对环境产生污染,可以随生活垃圾进行处理;塑料和橡胶零件需要特殊处理,处理之后可减轻对环境的污染;PCB板和电池会对土壤和水源产生污染,因此需要特殊处理。金属零件可以回收再利用。6.2.2噪音污染问题该设计所用小车在运行过程中产生噪声的是舵机转动和车轮转动,经测试,运行过程中最大噪声在噪音污染的标准之内,不会造成噪音污染。6.2.3工业三废问题“工业三废”广义上是指包括工业生产和人类生活在内所产生的废水、废气、废渣12。该设计所用小车使用电力进行驱动,运行过程中不会产生废气、废水、废渣,因此不涉及工业三废。6.2.4社会可持续发展问题该设计所用电池为可充电式锂电池,可大大降低由一次性干电池所带来的污染,该设计的设计理念符合社会可持续发展。6.3 本章小结确定了制作成本,分析设计的可持续性和环保性。第7章总结该设计在Arduino平台上实现了四轮小车检测障碍物,然后沿着最佳的线路绕过障碍物,然后继续按照原路线进行行驶。该设计解决了小车在绕过障碍物后返回原路线的难题。设计采用了超声波作为距离探测传感器,超声波传感器不受环境光线的影响,所选用的红外寻迹模块具有对环境光适应能力强的优点,因此该设计能够在一些弱光的环境中使用。在绕过障碍物的过程中采用沿壁的方案可以保证小车不会向远离障碍物的一侧行驶,导致小车无法回到原路线的情况,并且对于各种类型障碍物的障碍物具有较强的适应性。此外,该设计还有一些不足之处:加上小车检测障碍物边界的行驶路程,小车绕行的路线可能并不是最短的路线的情况;超声波传感器面对小型障碍物可能出现测量距离不准的情况;小车所设定的原路线不易出现半径过小的弯道,否则小车会冲出设定路线的情况。通过该设计,我学习了一种新的单片机:Arduino UNO单片机,提高了自己的编程能力,提高了自己软件和硬件结合调试的能力,提高了自己分析问题和解决问题的能力,提高了自学和探索的能力,提高了运用模块化设计的能力。总而言之,这次设计对我来说受益匪浅。参考文献1潘元骁.基于Arduino的智能小车自动避障系统设计与研究D.长安大学,2015-05-04.2seawaymaritime. 13.6亿中国人的骄傲!全球综合自动化程度最高的码头-洋山港“魔鬼码头”今天开港啦!.https:/www.sohu.com/a/209639609_276266,2017-12-10.3俞凡.基于单片机的厂区智能循迹灭火模型的设计和实现D.安徽农业大学,2016-06-01.4孙颖.基于路径规划的智能小车控制系统研究D.青岛大学,2007-05-16.5小宇聊电子.超声波测距原理(带原理图及源码).https:/baijiahao.baidu.com/s?id=1651773925685360513&wfr=spider&for=pc,2019-12-02.6张哲,陈丽银,汪栋,覃耀,黄世玲.基于 Arduino UNO大型汽车盲区检测与报警装置的设计J.科技创新与应用,2018(28):49-50.7陈翠.超声波测距模块工作原理_HC-SR04模块详解.http:/www.elecfans.com/tongxin/tongxinmokuai/2018/0517/678551.html,2018-05-17.8林志远,王忠策.机器人舵机控制器设计J.
收藏