冯聪224107Arduino智能小车.docx
- 文档编号:23394717
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:36
- 大小:368.10KB
冯聪224107Arduino智能小车.docx
《冯聪224107Arduino智能小车.docx》由会员分享,可在线阅读,更多相关《冯聪224107Arduino智能小车.docx(36页珍藏版)》请在冰豆网上搜索。
冯聪224107Arduino智能小车
教学单位信息工程系
学生学号2091224107
本科毕业论文(设计)
题目基于Arduino开发板的智能小车设计
学生姓名冯聪
专业名称电子信息科学与技术
指导教师夏洪星
2012年12月20日
基于ARDUINO开发板的智能小车设计
摘要:
随着科技的发展,芯片技术已经越来越与我们的生活紧密联系,他给我们的生活带来了不少的便利,不管是智能手机还是相机和电脑,都离不开芯片技术的发展与进步。
而在最近几年,新出现了一种叫做Arduino的芯片开发板,他的成本低廉,开发简单方便,而且功能强大。
可以非常方便的连接各种传感器,是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的开发板板)和软件(arduinoIDE)。
她适用于艺术家、设计师、爱好者和对于“互动”有兴趣的朋友们。
Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。
我在这里就是使用的Arduino的开发平台,充分利用他的各种便利特性设计了这样的一款智能小车,这款智能小车可以利用传感器自动采集环境数据从而按照程序自动运行,他虽然只是一个简单的应用而已但是已经能够初步表现出了Arduino开发平台的宽广潜力和应用价值。
摘要:
芯片;Arduino;智能小车;传感器
TheintelligentcarbasedonArduinodevelopmentboard
Abstract:
Asthedevelopmentofscienceandtechnology,themicrochiptechnologyhasbecamemorecloserrelationshiptoourlifewhichgivesourlifemorecommunicate,notonlythetelephonebutcomputersanddigitalcamerascannotworkwithoutthemicrochip’sdevelopment.Nowadays,thereisanewmicrochipboardwhichcalled“Arduino”,it’scheapandeasytodevelopbuthighperformance.Italsocouldbeeasilyconnectedtokindsofsensors.Itisreallyanopen-sourcedigitalplatformwitheasytodevelop,includinghardwareandsoftware(arduinoIDE).Itisapplytoartistdesignerfansandanyonebeinterestedininteraction.Arduinocanaccepttheenvironmentandchangeorfeedbackitbycontrollightandmotor.Now,inhere,Ichosethearduinoboardandtakefulluseofittodevelopthisintelligentcarwhichonecouldgetthedatearoundtoworkingautomatic.Maybenowitisonlyasimpleapplicationbutitstillshowustheboardpotentialandvalue.
Keywords:
microchip;Arduino;intelligentcar;sensor
目录
1.绪论1
1.1智能小车的研究1
1.1.1背景1
1.1.2智能小车的研究目的1
1.1.3智能小车的研究意义2
1.2国内外研究的概况2
1.3智能小车系统的发展史3
1.4主要工作3
1.5小结3
2.基于Arduino开发板的智能小车控制系统的整体设计4
2.1智能小车控制系统的整体设计4
2.1.1寻线功能的实现4
2.1.2避障功能的实现6
2.1.3超声波测距功能的实现8
2.1.4温度传感功能的实现9
2.1.5红外控制功能的实现11
2.2智能小车系统的结构框图14
2.3系统需要注意的几个要点15
2.4小结15
3.主控制器16
3.1微处理器介绍17
3.1.1ATMEGA32818
3.1.2主要特性说明19
3.1.3各个引脚说明19
3.2由ATMEGA328组成的Arduino开发板介绍19
3.2.1Arduino开发板的特性说明20
3.2.2Arduino开发板对应的扩展板21
3.3智能小车驱动系统介绍21
3.3.1驱动系统模块的运作方式21
3.3.2PWM的介绍22
3.4PID技术介绍22
3.5总结23
4.主控制器软件的设计25
4.1Arduino编程简介25
4.2各种模块设计26
4.2.1寻线和红外避障传感器程序设计26
4.2.2超声波传感程序设计27
4.2.3DS18B20温度传感程序设计28
4.2.4红外遥控程序设计29
4.3程序逻辑与思路30
4.4总结30
5.系统整体调试与总结32
5.1软件的调试与运行32
5.2设计存在的不足32
5.3设计可能的改进与完善33
参考文献34
附录35
致谢36
1.绪论
1.1智能小车的研究
1.1.1背景
随着改革开发的三十多年来,中国的经济,科技,文化等各行各业都有了突
飞猛进的发展,随之而来的是信息化的时代,计算机技术和芯片技术的进步,现在人们的日程生活中都已经离不开了各种科技产品,其中不管是电脑,电视,空调,手机还是相机,都离不开芯片技术的发展和进步,芯片从很早的六七十年代的简单的单片机,到现在先进的处理器,已经变得越来越强大,而芯片技术进入中国也已经经过了几十年的发展和进步,而现在51单片机已经是早已经为人们所熟知,学习电子专业的大学生们基本上51单片机都是他们的必修课,但是随着人们的要求越来越高,对芯片的性能要求也不断的提高,51单片机陈旧的结构和落后的性能已经越来越不能满足人们和学生们对知识的渴望,所以此时一种崭新的硬件平台横空出世,他开发简单,操作方便,硬件电路成本低廉,非常适于开发和设计,一时间风靡全球,成为了学生,老师,设计师们手中的利器,用它可以方便的完成各种以前需要复杂步骤的功能,他就是Arduino开发平台。
他是一个开源的平台,适合没有基础的学生学习和使用,而且在网上资料丰富,你还可以在社区中和前辈们互相讨论,交流心得。
1.1.2智能小车的研究目的
智能小车是一个非常棒的平台,他可以移动,具有载重能力,且原理简单。
容易实现,比起难以控制还要加上各种算法的飞行器来说,小车是一个传统却又不失魅力的开发单位,我们可以给小车加上各种功能,比如追寻太阳角度,收集太阳能的小车,比如可以自动搬送货物的小车等等,智能小车强调的就是一个“智能”,从哪里能够体现出智能呢,就是人类给他一个指令之后,他能够自己进行判断,然后进行处理。
现在小到孩子们的玩具,大到送往太空进行科学研究的探测仪,都可以采用智能小车的形式,于是这便更令智能小车有了用武之地,而且他还可以使用在我们生活中的方方面面,我们可以为超市提供智能小车,这样他可以让年老的购物者毫不费力的指挥并使用,并且在用完之后能够自动回到存放他的位置,节省了人力物力,使生活变得更加方便。
他也可以用在工程方面,可以去一些人类到达不了的地方,我们为他装上各种传感器,于是他便能为我们传回各种有用的数据。
我们甚至可以把他用在军事上,可以让他代替人类去完成危险的事情,可以让他去排雷,去发射导弹,等等。
1.1.3智能小车的研究意义
通常的小车大家都见过,小时候相信大家肯定都玩过电动的四驱车,但是那种小车只能一个劲的往前跑,甚至你都追不到他,玩起来也非常麻烦。
再到后面便有了遥控车,这种遥控车便是利用无线电遥控来控制舵机从而达到操纵车子的运行方向以及前后的目的,但是这种车子还要顾及到使用者的能力以及操纵的水平。
而且现在有很多地方因为距离太过遥远,而且无线电收到干扰,需要人力来操作等等一系列的限制从而引发了一种全新的模式,那就是智能小车,他能够不需要人来进行控制,能够自动利用传感器来感知和读取环境中的数据,从而按照要求来自动工作,这样的话就能够在人类不能涉足地方进行工作,而且还能够极大的减轻了人力和物力,因为具有非常大的使用价值和广阔的前景。
1.2国内外研究的概况
国外的智能小车研究早就已经是非常成熟的技术了,飞思卡尔公司还在中国内地举办了多届智能小车大赛,让大学生们能够参与到智能小车的开发中来,可以说智能小车无论是在国内还是国外都是一个非常热门的项目,历届的国际机器人大赛中都缺少不了智能小车平台的项目,例如智能小车组成的足球队来踢足球等等一系列有趣的项目,国外的很多芯片也都支持对智能小车的开发,其中就包括Arduino平台中使用的AVR中ATMEGA168或是328的芯片,虽然还只是8位芯片,但是却是采用了RISC指令,并且采用了各种先进技术,使得芯片的技术大幅提升,这也给了智能小车平台非常大的开发空间,而飞思卡尔公司也提供了很多强大的芯片来支持我们的开发,由此可见智能小车平台的成熟。
其次包括美国送上火星的探索者号机器人等等,都是非常先进的智能小车,他不光是驱动系统非常先进,机动能力非常强,而且身上搭载了各种先进的仪器,比如红外摄像仪,钻探器,太阳能电池板,化学成分分析仪等一些列仪器来进行科学开发,美国的军方也早已开发出能够自动排雷的智能小车甚至已经有公司研制出了可以代替人类开车的智能汽车,这都将带给人类全新的体验。
虽然国内在这方面还并不能最先进的国家相比,但是已经有越来越多的年轻人对这一充满活力的平台感兴趣从而投入到他的开发和创造过程中来。
1.3智能小车系统的发展史
智能小车其实很久有已经有人设想过了,只不过当时限于条件而未能实现,然而现在依靠芯片技术的发展,智能小车早已经不是什么先进技术,早在51单片机风靡之时就已经可以造出有着简单功能的智能小车,可以完成一些虽然智能但是相对简单的功能,那都是受限于芯片的处理能力,但是现在芯片技术已经相对发达的多,我们就可以完成更多更复杂的功能,我们可以利用传感器,比如温度传感器,红外传感器,超声波传感器,电子罗盘,加速度传感器等一系列先进的传感器来感知外界环境从而实现自主控制的功能,从而让小车越来越智能。
1.4主要工作
我在这里设计的智能小车会具备以下功能:
1,寻线功能,也就是会跟着地上的黑线来走。
2,红外避障功能,利用红外传感器来感知外界环境从而避开障碍。
3,超声波测距功能,利用超声波传感器来测量距离。
4,使用BS18B20温度传感器测量温度的功能。
5,用红外遥控器进行小车的控制。
1.5小结
本章主要简单的介绍了一下Arduino以及其平台和智能小车的一些概念和他的意义,并说明这里将要完成并实现哪些功能。
2.基于Arduino开发板的智能小车控制系统的整体设计
2.1智能小车控制系统的整体设计
2.1.1寻线功能的实现
小车想要完成寻线功能,看起来好像有点不可思议,那么我们就把人当做例子来好好考虑这个问题,我们人是肯定可以跟着黑线走的,那么我们是怎样完成这样一个功能的呢,首先,我们要能够看见黑线,那就是我们要有眼睛,如果都看不见(或是识别不了)那就无从谈起了,好吧,那么智能小车也是一样的,如果想要他能够跟着黑线走那么他首先也要能够“看见”那些黑线,那么我们在这里就要使用到传感器,所谓传感器呢,简单的说就是一种检测装置,能够感受到被测量的信息,并将检测到的信息,按一定的规律变换成为电信号或者是其他所需形式的信息输出,以满足信息的传输,处理,存储,显示,记录,控制等要求。
那么我在这里就将选择一个红外巡线传感器,而这个红外传感器就将充当智能小车的眼睛来检测黑线,那么具体是一个什么样的原理呢,我在下面说明。
寻线原理:
红外巡线传感器模块的原理是利用红外对管检测自己发出的红外线对反射光(深色反射弱,浅色反射强)。
寻线传感器可以帮助你的机器人进行白线或者黑线的跟踪,可以检测白底中的黑线,也可以检测黑底中的白线,检测到黑线返回低电平。
好了,其实原理很简单,就是利用一个红外对射管,一个负责发射,一个负责接收,当遇到黑线时则红外线都被吸收掉了,不能返回另一个接收管,那么传感器就会传回一个低电平,那么你就可以专门检测电平是高是低,如果是低,那么就可以判断是遇到了黑线,并做出相应的动作。
以下便是这个传感器的相应数据:
模块参数:
信号类型:
数字输出
工作电压:
+5VDC
尺寸:
45*16mm
输出电平:
TTL电平(黑线低电平,白线高电平)
工作电流:
<10ma
知道了传感器的原理之后便可以加以利用。
但是只知道传感器的原理还是不够的,我们还要知道小车的运行原理,要控制小车能够跟着黑线走。
我们知道小车的运行状态无非就是前进,后退,左转,右转,只要能完成这些就能够有沿着黑线走的硬件条件了,我们再来看看具体小车的前进,后退等功能是怎样实现的呢。
我设计的小车是采用前置驱动,由两个电机分别控制左右两个前轮,然后后面是个万向轮,可以自由转动。
那么当确定了小车的模型之后,如果小车的两个前轮同时以相同的速度向前转的话那么小车就往前走。
当小车右轮向前转左轮不懂那么小车就会向左转,同理小车左轮向前转右轮不动那么小车就向右转,两个轮子同时以相同的速度向后转那么小车就会倒车,那么我们就弄清楚了小车具体是怎样实现他的各种运行姿态的。
接下来就是由传感器控制小车运行了,这其中就涉及到一个逻辑的问题,不过还好这个逻辑问题比较简单,我们这样分析:
在这里我会设置三个寻线传感器
三个传感器也就有三种情况,分别是每个传感器遇到黑线而两外两个没有遇到黑线时的三种情况。
中间一个是为了检测黑线,当中间的一个检测到黑线就返回低电平,此时小车直走,当黑线向左边转弯,此时小车若直走则左边的传感器则会检测到黑线,此时返回低电平,此时就要右轮转,左轮停,小车就会向左转弯,当转过弯后左边的传感器已经检测不到黑线,中间的又能检测到黑线了,那么就继续向前直走。
同理,当黑线向右转弯时右边的传感器也会检测到黑线,返回低电平,此时小车左轮转,右轮停止,那么小车就会像右转,直到中间的传感器检测到黑线为止。
以上便是寻线小车整体的一个设计思路和逻辑,其实也并不复杂对吧,还是比较简单的。
其实这就是算法,所谓算法可以简答的理解为方法,方法越合理越简洁就越好,效率和执行的效果也会越好的。
接下来我给出一个流程图好让大家能够更清楚的明白其中的步骤和关系。
图1小车电机的控制框图
而至于更具体的是怎么控制电机转动的,那么将会涉及到PWM技术,这个我们将会在后面谈。
2.1.2避障功能的实现
至于小车的避障功能,其实和红外寻线功能有些类似,所谓万变不离其中,首先我们要选用传感器,在这里我们选用红外避障传感器,他是由一个红外发射管和一个红外接收管构成,工作原理则是:
传感器发射红外线,根据反射红外光探测前方障碍物,无障碍物时输出高电平,有障碍时输出低电平,这样看来其实这个传感器的原理和之前的寻线传感器是差不多的,那么我们就可以如法炮制,我们先将传感器装在小车的前端来感受环境变化,在这里我一样使用三个传感器,分别放在正前方,左前方,右前方。
那么在这里情况稍微会比前面的寻线功能要稍微复杂一点,因为寻的线只有一条,但是在这里有可能是只有一个传感器被遮挡,也有可能有两个传感器被遮挡,也有可能是三个传感器都被遮挡,那么这里我们就需要把这几种情况都要考虑进去。
我先在这里给出传感器的各项数据。
信号类型:
数字输出
工作电压:
5VDC
电流:
<100mA
探测距离:
3~30cm(不同物体反射率不定)
引脚定义:
OUTVCCGND
好的,那么我们就来具体分析,我们在面对小车时分别从左到右把三个红外传感器标注为1号,2号和3号传感器。
那么我便给出以下表格。
表1小车控制的逻辑分析
被遮挡的传感器号
1号
2号
3号
1,2号
1,3号
2,3号
1,2,3号
都没被挡住
产生的操作
输出低电平,此时左边轮子转,右边轮子停
输出低电平右边轮子转,左边轮子停
两个轮子都后转,小车后退并向右转
小车左轮正传,右轮反转(两轮速度相同)此时小车做原地转弯
两个轮子都后传,小车后退并向右转
小车左轮正传,右轮反转(两轮速度相同)此时小车做原地转弯
两个轮子都后转,小车后退并向右转
直走
写成文字形式就是如下:
①当左边的传感器遇到东西阻挡时会输出低电平,此时左边轮子转,右边轮子停,小车就向右转
②当右边的传感器遇到东西阻挡时也会输出低电平右边轮子转,左边轮子停,小车左转
③当前面的传感器遇到东西阻挡时则会小车两个轮子都后转,小车后退并向右转(右轮停,左轮转)(其实也可以设一个随机函数,看情况,这个随便)
④当左前两个都被阻挡时小车左轮正传,右轮反转(两轮速度相同)此时小车做原地转弯,直到前面的传感器没有被挡住,然后就跳到了左边传感器被挡住的那种情况再去处理……
⑤当右前两个传感器被阻挡时……处理方式同上
⑥当左边和右边两个传感器都被挡住时处理方式和前面传感器被挡住(③)的处理方法相同
⑦当三个传感器都被挡住时,处理方式也与前面传感器被挡住(③)的处理方法相同
⑧当三个传感器都没有被挡住时,自然就是直走了
这里一共有8中情况,还是有点多的,但是我们细心一看不难发现其实当中间的或是两边的或是三个都被挡住时的处理情况是一样的,中间和左边以及中间和右边被挡住的处理情况也是一样的,那么其实真正产生的效果也就是那么几种而已。
那么我们分析清楚了逻辑方面之后后面也就好操作了,不过这里和前面的寻迹稍有不同,那么就是在转弯的问题上会稍有不同,因为这个红外传感器的问题,红外传感器不可能检测得太远,那么有可能出现这样一种情况,那就是当小车已经冲到面前了才感知到前方有障碍,需要躲避,那么我在寻迹中使用的转弯手段是好比向左转那么就是右边的轮子前进,但是有一个问题,那就是如果障碍物靠的太近会不会就挤在障碍物上动弹不得了,这是我们需要考虑的一个地方,所以在这里我就不会采用寻迹的那种转弯方式,而是好比右边遇到障碍物要向左转,在这里我右轮不动,而左轮后退,那么同样就能实现向左转的行为,而且本身车子是在向后退的,那便不存在挤到障碍物上的问题了。
所以在这里编写程序上有的地方便是不能和寻迹的地方共用而是要另写新的函数了,这里是需要值得注意的地方。
2.1.3超声波测距功能的实现
对于超声波测距功能,我使用的是SR04,它是最常见的超声波传感器之一,价格便宜,好用。
采用IO口触发测距,要给至少10us的高电平信号;
模块自动发送8个40KHz的方波,自动检测是否有信号返回;
有信号返回时,便通过IO口输出一高电平,而在这里发出信号的时间和收到信号的时间差便是信号往返路程的总时间,所以距离=(电平时间差*声速)/2;
超声波的原理是非常简单的,想要在Arduino平台中实现也是一件非常方便的事情,不过因为要显示到电脑上,所以别忘了串口的波特率设置哦,亲。
不过在这里我想要介绍的重点确是另外一个,是什么呢,就是Arduino的库功能,Arduino是一个非常贴近上层的硬件平台,他打包了很多底层的东西,让我们能够不用了解具体的硬件,话是这么说,可以具体是个什么意思呢,就好比一起玩单片机时,我们就要知道他有哪些寄存器,有哪些逻辑功能,哪些寻址功能,这样我们才能按照最初的逻辑一步一步的把一个东西完成,但是这样做要麻烦,而且需要相当的基础,但是Arduino就不是这样,他正是将那些琐碎的具体的东西都屏蔽掉,而是把人们真正常常会直接用到的功能事先打包好,要用的时候直接拿出来用就可以了,不用管他具体是怎么实现的,这就让没有太多基础的人也能够上手操作,只需有清晰的逻辑思维便能完成你想要的工作。
而且Arduino是一个开源平台,谁都可以将自己打包好的库文件发到网络上进行共享,这就为资源的利用起到了很大的推动作用,我正好也找到了一个SR04的库文件,我们可以直接拿来使用,便能够轻松的得到我们想要的结果,这不是一件很棒的事情吗。
2.1.4温度传感功能的实现
至于温度传感功能,我在这里选用的是DS18B20数字温度传感器,其实之前我本来是准备选择LM35线性温度传感器的,不过因为DS18B20的指标要稍微好一点,测量温度的范围要广一些,所以我才选用了DS18B20,不过等我真正要着手做DS18B20时才发现它要稍微复杂一些,我真是自找苦吃,早知道就用LM35的。
所以在这里我就把这两个一起介绍一下,因为一个是数字传感器,一个是模拟传感器,我以他们为代表来分别介绍。
首先说说DS18B20数字温度传感器:
DS18B20数字温度传感器是美国DALLAS公司生产的单总线数字温度传感器。
DSl820数字温度计提供9位(二进制)温度读数指示器件的温度信息经过单线接口送入DSl8B20或从DSl8B20送出因此从主机CPU到DSl820仅需一条线(和地线)DSl820的电源可以由数据线本身提供而不需要外部电源因为每一个DSl820在出厂时已经给定了唯一的序号因此任意多个DSl820可以存放在同一条单线总线上这允许在许多不同的地方放置温度敏感器件DSl820的测量范围从-55到+125增量值为0.5可在ls(典型值)内把温度变换成数字。
简单的理解DS18B20测温原理就是说把芯片把感知到的温度换成数值放在数据寄存器里面,要想得到寄存器里面的数据,只有按照DALLAS规定的一种时序才能正确传出数据,这种时序被称为单总线,CPU就可通过单总线协议,取得DS18B20里面的温度值。
在这里我就详细介绍一下DS18B20,他内部提供九位(二进制)温度读数,指示器件的温度。
而且DS18B20的电源可以由数据线本身提供而不需要外部电源。
每个DS18B20包括一个唯一的64位长的序号,该序号值存放在DS18B20内部的ROM重。
开始的8位是产品类型编码,接着的48位才是每个器件唯一的序号,最后8位是前面56位的CRC码。
DS18B20中还有用于贮存测得的温度值的两个8位存储器RAM,编号为0号和1号,1号用于存储温度值的符号,如果里面全是1则是代表温度为负数,如果全是0则代表是正数。
而0号则用于存放温度值的补码,LSB(最低位)的“1”表示0.5摄氏度。
将存储器中的二进制数求补再转换成十进制数并除以二就得到了温度的值(-550摄氏度至125摄氏度)。
不过好在我们只用一个DS18B20,所以不存在多个温度存储器需要的读ROM里面的序号,也就可以跳过ROM指令,直接执行DS18B20功能指令。
DS18B20温度读取参考步骤:
DS18B20开始转换:
(1)DS18B20复位。
(2)写入跳过ROM的字节命令。
(3)写入开始转换的功能命令。
(4)延迟大约750—900毫秒。
DS18B20读取暂存数据:
(1)DS18B20复位。
(2)写入跳过ROM的字节指令。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 冯聪 224107 Arduino 智能 小车