冯聪2091224107Arduino智能小车

更新时间:2024-07-03 16:39:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

教学单位 信息工程系 学生学号 2091224107

本科毕业论文(设计)

题 目 基于Arduino开发板的智能小车设计 学生姓名 冯聪 专业名称 电子信息科学与技术 指导教师 夏洪星

2012年12月20日

基于ARDUINO开发板的智能小车设计

摘要:随着科技的发展,芯片技术已经越来越与我们的生活紧密联系,他给我们的生活带来了不少的便利,不管是智能手机还是相机和电脑,都离不开芯片技术的发展与进步。而在最近几年,新出现了一种叫做Arduino的芯片开发板,他的成本低廉,开发简单方便,而且功能强大。可以非常方便的连接各种传感器,是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的开发板板)和软件(arduino IDE)。她适用于艺术家、设计师、爱好者和对于“互动”有兴趣的朋友们。Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。我在这里就是使用的Arduino的开发平台,充分利用他的各种便利特性设计了这样的一款智能小车,这款智能小车可以利用传感器自动采集环境数据从而按照程序自动运行,他虽然只是一个简单的应用而已但是已经能够初步表现出了Arduino开发平台的宽广潜力和应用价值。

摘要:芯片;Arduino;智能小车;传感器

I

The intelligent car based on Arduino development board

Abstract: As the development of science and technology, the microchip technology has became more closer relationship to our life which gives our life more communicate, not only the telephone but computers and digital cameras can not work without the microchip’s development. Nowadays, there is a new microchip board which called “Arduino”, it’s cheap and easy to develop but high performance. It also could be easily connected to kinds of sensors. It is really an open-source digital platform with easy to develop, including hardware and software (arduino IDE).It is apply to artist designer fans and anyone be interested in interaction. Arduino can accept the environment and change or feedback it by control light and motor. Now, in here, I chose the arduino board and take full use of it to develop this intelligent car which one could get the date around to working automatic .Maybe now it is only a simple application but it still show us the board potential and value.

Key words :microchip; Arduino; intelligent car; sensor

II

目 录

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.1 ATMEGA 328.............................................................................................. 18 3.1.2 主要特性说明.......................................................................................... 19 3.1.3 各个引脚说明.......................................................................................... 19 3.2 由ATMEGA 328组成的Arduino开发板介绍............................................ 19 3.2.1 Arduino开发板的特性说明................................................................... 20 3.2.2 Arduino开发板对应的扩展板............................................................... 21 3.3 智能小车驱动系统介绍.............................................................................. 21

III

3.3.1 驱动系统模块的运作方式...................................................................... 21 3.3.2 PWM的介绍............................................................................................... 22 3.4 PID技术介绍............................................................................................... 22 3.5 总结.............................................................................................................. 23 4. 主控制器软件的设计 ........................................................................................... 25

4.1 Arduino编程简介....................................................................................... 25 4.2 各种模块设计.............................................................................................. 26 4.2.1 寻线和红外避障传感器程序设计.......................................................... 26 4.2.2 超声波传感程序设计.............................................................................. 27 4.2.3 DS18B20温度传感程序设计................................................................... 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

IV

1.绪论

1.1 智能小车的研究 1.1.1 背景

随着改革开发的三十多年来,中国的经济,科技,文化等各行各业都有了突 飞猛进的发展,随之而来的是信息化的时代,计算机技术和芯片技术的进步,现在人们的日程生活中都已经离不开了各种科技产品,其中不管是电脑,电视,空调,手机还是相机,都离不开芯片技术的发展和进步,芯片从很早的六七十年代的简单的单片机,到现在先进的处理器,已经变得越来越强大,而芯片技术进入中国也已经经过了几十年的发展和进步,而现在51单片机已经是早已经为人们所熟知,学习电子专业的大学生们基本上51单片机都是他们的必修课,但是随着人们的要求越来越高,对芯片的性能要求也不断的提高,51单片机陈旧的结构和落后的性能已经越来越不能满足人们和学生们对知识的渴望,所以此时一种崭新的硬件平台横空出世,他开发简单,操作方便,硬件电路成本低廉,非常适于开发和设计,一时间风靡全球,成为了学生,老师,设计师们手中的利器,用它可以方便的完成各种以前需要复杂步骤的功能,他就是Arduino开发平台。

他是一个开源的平台,适合没有基础的学生学习和使用,而且在网上资料丰富,你还可以在社区中和前辈们互相讨论,交流心得。 1.1.2 智能小车的研究目的

智能小车是一个非常棒的平台,他可以移动,具有载重能力,且原理简单。容易实现,比起难以控制还要加上各种算法的飞行器来说,小车是一个传统却又不失魅力的开发单位,我们可以给小车加上各种功能,比如追寻太阳角度,收集太阳能的小车,比如可以自动搬送货物的小车等等,智能小车强调的就是一个“智能”,从哪里能够体现出智能呢,就是人类给他一个指令之后,他能够自己进行判断,然后进行处理。现在小到孩子们的玩具,大到送往太空进行科学研究的探测仪,都可以采用智能小车的形式,于是这便更令智能小车有了用武之地,而且他还可以使用在我们生活中的方方面面,我们可以为超市提供智能小车,这样他可以让年老的购物者毫不费力的指挥并使用,并且在用完之后能够自动回到存放他的位置,节省了人力物力,使生活变得更加方便。他也可以用在工程方面,可

1

以去一些人类到达不了的地方,我们为他装上各种传感器,于是他便能为我们传回各种有用的数据。我们甚至可以把他用在军事上,可以让他代替人类去完成危险的事情,可以让他去排雷,去发射导弹,等等。 1.1.3 智能小车的研究意义

通常的小车大家都见过,小时候相信大家肯定都玩过电动的四驱车,但是那种小车只能一个劲的往前跑,甚至你都追不到他,玩起来也非常麻烦。再到后面便有了遥控车,这种遥控车便是利用无线电遥控来控制舵机从而达到操纵车子的运行方向以及前后的目的,但是这种车子还要顾及到使用者的能力以及操纵的水平。而且现在有很多地方因为距离太过遥远,而且无线电收到干扰,需要人力来操作等等一系列的限制从而引发了一种全新的模式,那就是智能小车,他能够不需要人来进行控制,能够自动利用传感器来感知和读取环境中的数据,从而按照要求来自动工作,这样的话就能够在人类不能涉足地方进行工作,而且还能够极大的减轻了人力和物力,因为具有非常大的使用价值和广阔的前景。 1.2 国内外研究的概况

国外的智能小车研究早就已经是非常成熟的技术了,飞思卡尔公司还在中国内地举办了多届智能小车大赛,让大学生们能够参与到智能小车的开发中来,可以说智能小车无论是在国内还是国外都是一个非常热门的项目,历届的国际机器人大赛中都缺少不了智能小车平台的项目,例如智能小车组成的足球队来踢足球等等一系列有趣的项目,国外的很多芯片也都支持对智能小车的开发,其中就包括Arduino平台中使用的AVR中ATMEGA168或是328的芯片,虽然还只是8位芯片,但是却是采用了RISC指令,并且采用了各种先进技术,使得芯片的技术大幅提升,这也给了智能小车平台非常大的开发空间,而飞思卡尔公司也提供了很多强大的芯片来支持我们的开发,由此可见智能小车平台的成熟。其次包括美国送上火星的探索者号机器人等等,都是非常先进的智能小车,他不光是驱动系统非常先进,机动能力非常强,而且身上搭载了各种先进的仪器,比如红外摄像仪,钻探器,太阳能电池板,化学成分分析仪等一些列仪器来进行科学开发,美国的军方也早已开发出能够自动排雷的智能小车甚至已经有公司研制出了可以代替人类开车的智能汽车,这都将带给人类全新的体验。虽然国内在这方面还并不能

2

最先进的国家相比,但是已经有越来越多的年轻人对这一充满活力的平台感兴趣从而投入到他的开发和创造过程中来。 1.3 智能小车系统的发展史

智能小车其实很久有已经有人设想过了,只不过当时限于条件而未能实现,然而现在依靠芯片技术的发展,智能小车早已经不是什么先进技术,早在51单片机风靡之时就已经可以造出有着简单功能的智能小车,可以完成一些虽然智能但是相对简单的功能,那都是受限于芯片的处理能力,但是现在芯片技术已经相对发达的多,我们就可以完成更多更复杂的功能,我们可以利用传感器,比如温度传感器,红外传感器,超声波传感器,电子罗盘,加速度传感器等一系列先进的传感器来感知外界环境从而实现自主控制的功能,从而让小车越来越智能。 1.4 主要工作

我在这里设计的智能小车会具备以下功能:1,寻线功能,也就是会跟着地上的黑线来走。 2,红外避障功能,利用红外传感器来感知外界环境从而避开障碍。3,超声波测距功能,利用超声波传感器来测量距离。4,使用BS18B20温度传感器测量温度的功能。5,用红外遥控器进行小车的控制。 1.5 小结

本章主要简单的介绍了一下Arduino 以及其平台和智能小车的一些概念和他的意义,并说明这里将要完成并实现哪些功能。

3

2.基于Arduino开发板的智能小车控制系统的整体设计

2.1 智能小车控制系统的整体设计 2.1.1 寻线功能的实现

小车想要完成寻线功能,看起来好像有点不可思议,那么我们就把人当做例子来好好考虑这个问题,我们人是肯定可以跟着黑线走的,那么我们是怎样完成这样一个功能的呢,首先,我们要能够看见黑线,那就是我们要有眼睛,如果都看不见(或是识别不了)那就无从谈起了,好吧,那么智能小车也是一样的,如果想要他能够跟着黑线走那么他首先也要能够“看见”那些黑线,那么我们在这里就要使用到传感器,所谓传感器呢,简单的说就是一种检测装置,能够感受到被测量的信息,并将检测到的信息,按一定的规律变换成为电信号或者是其他所需形式的信息输出,以满足信息的传输,处理,存储,显示,记录,控制等要求。

那么我在这里就将选择一个红外巡线传感器,而这个红外传感器就将充当智能小车的眼睛来检测黑线,那么具体是一个什么样的原理呢,我在下面说明。

寻线原理:红外巡线传感器模块的原理是利用红外对管检测自己发出的红外线对反射光(深色反射弱,浅色反射强)。寻线传感器可以帮助你的机器人进行白线或者黑线的跟踪,可以检测白底中的黑线,也可以检测黑底中的白线,检测到黑线返回低电平。

好了,其实原理很简单,就是利用一个红外对射管,一个负责发射,一个负责接收,当遇到黑线时则红外线都被吸收掉了,不能返回另一个接收管,那么传感器就会传回一个低电平,那么你就可以专门检测电平是高是低,如果是低,那么就可以判断是遇到了黑线,并做出相应的动作。

以下便是这个传感器的相应数据: 模块参数:

信号类型:数字输出 工作电压:+5V DC 尺寸:45*16mm

输出电平:TTL电平(黑线低电平,白线高电平) 工作电流:<10 ma

4

知道了传感器的原理之后便可以加以利用。

但是只知道传感器的原理还是不够的,我们还要知道小车的运行原理,要控制小车能够跟着黑线走。我们知道小车的运行状态无非就是前进,后退,左转,右转,只要能完成这些就能够有沿着黑线走的硬件条件了,我们再来看看具体小车的前进,后退等功能是怎样实现的呢。

我设计的小车是采用前置驱动,由两个电机分别控制左右两个前轮,然后后面是个万向轮,可以自由转动。那么当确定了小车的模型之后,如果小车的两个前轮同时以相同的速度向前转的话那么小车就往前走。当小车右轮向前转左轮不懂那么小车就会向左转,同理小车左轮向前转右轮不动那么小车就向右转,两个轮子同时以相同的速度向后转那么小车就会倒车,那么我们就弄清楚了小车具体是怎样实现他的各种运行姿态的。

接下来就是由传感器控制小车运行了,这其中就涉及到一个逻辑的问题,不过还好这个逻辑问题比较简单,我们这样分析:在这里我会设置三个寻线传感器

三个传感器也就有三种情况,分别是每个传感器遇到黑线而两外两个没有遇到黑线时的三种情况。中间一个是为了检测黑线,当中间的一个检测到黑线就返回低电平,此时小车直走,当黑线向左边转弯,此时小车若直走则左边的传感器则会检测到黑线,此时返回低电平,此时就要右轮转,左轮停,小车就会向左转弯,当转过弯后左边的传感器已经检测不到黑线,中间的又能检测到黑线了,那么就继续向前直走。同理,当黑线向右转弯时右边的传感器也会检测到黑线,返回低电平,此时小车左轮转,右轮停止,那么小车就会像右转,直到中间的传感器检测到黑线为止。

以上便是寻线小车整体的一个设计思路和逻辑,其实也并不复杂对吧,还是比较简单的。其实这就是算法,所谓算法可以简答的理解为方法,方法越合理越简洁就越好,效率和执行的效果也会越好的。

接下来我给出一个流程图好让大家能够更清楚的明白其中的步骤和关系。

5

左边传感器检测到黑线 中间传感器检测到黑线 右边传感器检测到黑线 传感器接受外界环右边电机两个电机左边电机芯片接受传感再次判断传感器状态 控制电机转动 图1小车电机的控制框图

而至于更具体的是怎么控制电机转动的,那么将会涉及到PWM技术,这个我们将会在后面谈。

重复电机操作

2.1.2避障功能的实现

至于小车的避障功能,其实和红外寻线功能有些类似,所谓万变不离其中,首先我们要选用传感器,在这里我们选用红外避障传感器,他是由一个红外发射管和一个红外接收管构成,工作原理则是:传感器发射红外线,根据反射红外光探测前方障碍物,无障碍物时输出高电平,有障碍时输出低电平,这样看来其实这个传感器的原理和之前的寻线传感器是差不多的,那么我们就可以如法炮制,我们先将传感器装在小车的前端来感受环境变化,在这里我一样使用三个传感器,分别放在正前方,左前方,右前方。那么在这里情况稍微会比前面的寻线功能要稍微复杂一点,因为寻的线只有一条,但是在这里有可能是只有一个传感器被遮挡,也有可能有两个传感器被遮挡,也有可能是三个传感器都被遮挡,那么这里我们就需要把这几种情况都要考虑进去。我先在这里给出传感器的各项数据。

6

信号类型:数字输出 工作电压:5V DC 电流:<100mA

探测距离:3~30cm(不同物体反射率不定) 引脚定义:OUT VCC GND

好的,那么我们就来具体分析,我们在面对小车时分别从左到右把三个红外传感器标注为1号,2号和3号传感器。那么我便给出以下表格。

表1小车控制的逻辑分析

被遮挡的号 传感器号

1

2

3

1,2号

1,3号

2,3号

1,

2,3号 没被挡

生的操出低电出低电个轮子车左轮作

平,此平右边都后时左边轮子轮子

正传,

个轮子车左轮个轮子走 都后

正传,都后

转,小右轮反传,小右轮反转,小车后退转(两车后退并向右轮速度并向右转

相同)转 此时小车做原地转弯

转,左车后退转(两

转,右边轮子并向右轮速度边轮子停 停

相同)此时小车做原地转弯

写成文字形式就是如下:

①当左边的传感器遇到东西阻挡时会输出低电平,此时左边轮子转,右边轮子停,小车就向右转

②当右边的传感器遇到东西阻挡时也会输出低电平右边轮子转,左边轮子停,小车左转

7

③当前面的传感器遇到东西阻挡时则会小车两个轮子都后转,小车后退并向右转(右轮停,左轮转)(其实也可以设一个随机函数,看情况,这个随便)

④当左前两个都被阻挡时小车左轮正传,右轮反转(两轮速度相同)此时小车做原地转弯,直到前面的传感器没有被挡住,然后就跳到了左边传感器被挡住的那种情况再去处理??

⑤当右前两个传感器被阻挡时??处理方式同上

⑥当左边和右边两个传感器都被挡住时处理方式和前面传感器被挡住(③)的处理方法相同

⑦当三个传感器都被挡住时,处理方式也与前面传感器被挡住(③)的处理方法相同

⑧当三个传感器都没有被挡住时,自然就是直走了

这里一共有8中情况,还是有点多的,但是我们细心一看不难发现其实当中间的或是两边的或是三个都被挡住时的处理情况是一样的,中间和左边以及中间和右边被挡住的处理情况也是一样的,那么其实真正产生的效果也就是那么几种而已。

那么我们分析清楚了逻辑方面之后后面也就好操作了,不过这里和前面的寻迹稍有不同,那么就是在转弯的问题上会稍有不同,因为这个红外传感器的问题,红外传感器不可能检测得太远,那么有可能出现这样一种情况,那就是当小车已经冲到面前了才感知到前方有障碍,需要躲避,那么我在寻迹中使用的转弯手段是好比向左转那么就是右边的轮子前进,但是有一个问题,那就是如果障碍物靠的太近会不会就挤在障碍物上动弹不得了,这是我们需要考虑的一个地方,所以在这里我就不会采用寻迹的那种转弯方式,而是好比右边遇到障碍物要向左转,在这里我右轮不动,而左轮后退,那么同样就能实现向左转的行为,而且本身车子是在向后退的,那便不存在挤到障碍物上的问题了。

所以在这里编写程序上有的地方便是不能和寻迹的地方共用而是要另写新的函数了,这里是需要值得注意的地方。 2.1.3 超声波测距功能的实现

对于超声波测距功能,我使用的是SR04,它是最常见的超声波传感器之一,

8

价格便宜,好用。

采用IO口触发测距,要给至少10us的高电平信号; 模块自动发送8个40KHz的方波,自动检测是否有信号返回;

有信号返回时,便通过IO口输出一高电平,而在这里发出信号的时间和收到信号的时间差便是信号往返路程的总时间,所以距离=(电平时间差*声速)/2;

超声波的原理是非常简单的,想要在Arduino平台中实现也是一件非常方便的事情,不过因为要显示到电脑上,所以别忘了串口的波特率设置哦,亲。

不过在这里我想要介绍的重点确是另外一个,是什么呢,就是Arduino的库功能,Arduino是一个非常贴近上层的硬件平台,他打包了很多底层的东西,让我们能够不用了解具体的硬件,话是这么说,可以具体是个什么意思呢,就好比一起玩单片机时,我们就要知道他有哪些寄存器,有哪些逻辑功能,哪些寻址功能,这样我们才能按照最初的逻辑一步一步的把一个东西完成,但是这样做要麻烦,而且需要相当的基础,但是Arduino就不是这样,他正是将那些琐碎的具体的东西都屏蔽掉,而是把人们真正常常会直接用到的功能事先打包好,要用的时候直接拿出来用就可以了,不用管他具体是怎么实现的,这就让没有太多基础的人也能够上手操作,只需有清晰的逻辑思维便能完成你想要的工作。而且Arduino是一个开源平台,谁都可以将自己打包好的库文件发到网络上进行共享,这就为资源的利用起到了很大的推动作用,我正好也找到了一个SR04的库文件,我们可以直接拿来使用,便能够轻松的得到我们想要的结果,这不是一件很棒的事情吗。

2.1.4 温度传感功能的实现

至于温度传感功能,我在这里选用的是DS18B20数字温度传感器,其实之前我本来是准备选择LM35线性温度传感器的,不过因为DS18B20的指标要稍微好一点,测量温度的范围要广一些,所以我才选用了DS18B20,不过等我真正要着手做DS18B20时才发现它要稍微复杂一些,我真是自找苦吃,早知道就用LM35的。所以在这里我就把这两个一起介绍一下,因为一个是数字传感器,一个是模拟传感器,我以他们为代表来分别介绍。

首先说说DS18B20数字温度传感器:DS18B20数字温度传感器是美国DALLAS

9

公司生产的单总线数字温度传感器。DSl820数字温度计提供 9 位(二进制)温度读数 指示器件的温度 信息经过单线接口送 入 DSl8B20 或从 DSl8B20 送出 因此从主机 CPU 到DSl820 仅需一条线(和地线) DSl820 的电源可以由数据线本身提供而不需要外部电源 因为每一个 DSl820 在出厂时已经给定了唯一的序号 因此任意多个 DSl820 可以存放在同一条单线总线上 这允许在许多不同的地方放置温度敏感器件 DSl820 的测量范围从-55 到+125 增量值为 0.5 可在 l s(典型值)内把温度变换成数字 。简单的理解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毫秒。

10

DS18B20读取暂存数据: (1)DS18B20复位。

(2)写入跳过ROM的字节指令。 (3)写入读暂存的功能命令。

(4)读入第0个字节 LS Byte,转换结果的低八位。 (5)读入第1个字节 MS Byte,转换结果的高八位。 (6)DS18B20复位,表示读取暂存结束。

数据求出十进制:

(1)整合LS Byte和MS Byte的数据。 (2)判断是否为正负数。

(3)求十进制值。正数乘0.0625,一位小数点乘0.625,二位小数点乘6.25。 (4)十进制的“个位”求出。

而至于具体的总线的时序问题便不再这里赘述了。 2.1.5 红外控制功能的实现 为了实现这个红外控制功能,我所选择的是38K红外接收模块,并且还带有了一个小遥控器以方便控制。要怎样实现控制呢,在这里我想要实现的目标是对小车行走进行控制,也就是控制小车前进,后退,左转,右转,要怎么实现呢。我前面的寻线也好,红外避障也好,都提供了一个队小车行走的控制函数,我们在这里进行调用就好了,这不是问题,那我们就来看看红外是怎样控制小车的,也就是怎样把信号传递给智能小车,然小车又是怎样识别并且做出相应动作的。 首先,红外遥控是由红外发射和红外接收系统组成的,我给出一个图来说明: 键盘 编码调制 解调 光电放大 单片机 红外发射 图2红外控制原理图 红外接收部分

11

这个图简洁的介绍了红外装置的工作原理,因为我所购买的红外模块会有一个遥控器,所以在发射部分不是我们的重点,接收部分才是我们所要重点考虑的地方。接收电路是一种集成红外接收和放大一体的红外接收模块,这就使我们使用起来非常方便,他能够完成从红外线接收到输出与TTL电平信号兼容的一系列工作,这个红红外模块共有三个引脚,信号线,VCC,GND。

在这里我们要了解一下红外的具体工作原理,红外发射的遥控器发射的38K红外载波信号是由遥控器里的编码芯片对其进行编码,我就用TC9012简单说明一下其编码,TC9012的一帧数据里面有32位码,其中有两次8位用户码,8位数据码,8位数据码的反码,以及最后位的同部位。发送编码的格式如下图:

图3红外编码模式图

我们就要想办法能够读出每个红外遥控器上按钮所代表的值。在这里我使用了一个红外遥控的库文件“IRremote”中的 “IRrecvDump”,利用这个库文件,然后将红外接收传感器连接到Arduino上,分别按下遥控器中的每个按钮,就会在监视窗中显示每个按钮的十六进制编码。

图4红外遥控编码图

12

这个表是我先一一对应每个按钮记录下十六进制数字之后再转换成十进制的数字以用来在编写程序时使用,我们现在已经知道了每个按钮的编码,那么我们就可以在程序中对每个按钮进行定义,让他们具有各种意义,比如让小车前进或后退或转弯。 不过限于红外发射的本质,也就是红外线,所以在控制范围上是有限制的,就好比家里的电视遥控器,必须对准了才能遥控,所以我就准备把红外接收头装在小车后面,我就在后面进行控制。其次当然还会有一定的距离限制。也就是这些限制导致红外能够使用的地方比较少,最开始像诺基亚等手机都是使用红外进行数据传输的,不过要手机相对,这就比较麻烦,所以就被淘汰了,改用非常方便的蓝牙进行传输了。 2.2 智能小车系统的结构框图 寻线传感器 避障传感器 红外遥控 智能小车 电机控制小车姿态

图5小车控制框图 这里是小车被三个传感器控制的运行状态,另外还有两个传感器的结果是要输出到电脑用专用软件的监视窗口去进行监视的,还有下面框图。

13

温度传感器 超声波传感器 智能小车 电脑监视窗口

图6小车控制框图2 一个智能小车,关键就在于他能够自主运行,所以需要通过芯片对他进行控制。他可以通过传感器就好比人类的眼睛嘴巴鼻子和耳朵,能够感知自然环境的变化从而做出相应的行动。 2.3 系统需要注意的几个要点 系统设计主要包括了硬件和软件两个方面,所以我们依据控制原理尽可能使其模块化分开设计,这样不仅便于调试,降低设计难度,还易于我们添加新的模块,增加功能,加强其扩展性。 在这里我们使用的是Arduino平台,Arduino平台优点非常多,因为开发板是意大利人已经设计好的,所以在这里我们可以非常方便的使用,各种传感器和扩展模块也能够便于使用。 在这里要要注意开发实物应该与论文同步进行,这样在遇到问题时能够随时进行改进,程序方面也应该尽量做上标注,这样也可以增加程序的可读性。 2.4 小结 本章主要讲述了我们的目的,主要是要达到哪些要求,这里阐述了寻线功能,避障功能,超声波传感器功能,温度传感器功能,红外控制功能。以及要实现他们的主要思路,这才是最后重要的,有了思路后面就会简单很多,哪怕遇到了困难也能找出问题所在并加以解决。

14

Arduino非常方便的与一个USB设备通信,例如USB键盘,鼠标,U盘,相机等。

LCD Keypad Shield

使用2行16个字符液晶,具有对比度调节,使用1个模拟口模拟5个按键输入,1个复位按键,未使用的I/O口都扩展出来备用,充分利用I/O口。

Color LCD Shield

使用诺基亚6100彩色LCD作为显示的彩色LCD扩展板,可实现128*128像素的彩色图像显示。

Ethernet Shield

以W5100为核心的网络扩展模块,可以使Arduino成为简单的Web服务器或者通过网络控制读写Arduino的数字和模拟接口等网络应用。可以直接使用IDE中的Ethernet库文件实现一个简单的Web服务器。

XBee传感器扩展板

XBee扩展板主要是侧重于一些传感器,无线通信模块的接口扩展,使这些模块能够方便的和Arduino进行连接。

WIFI Shield

基于WIFI210的WIFI无线模块提供TTL电平串口到IEEE802.11b/g/n无线通信的桥接。任何具有TTL串口的设备都可以很容易的建立起无线网络,实现远程管理和控制。内部集成多种通信协议及其加密算法。只需要简单的设置即可实现多种场合的应用。

此外还有很多扩展板分别用于连接各种传感器和扩展模块。 3.3 智能小车驱动系统介绍 3.3.1 驱动系统模块的运作方式

在这里我使用两个电机然后加上变速齿轮以带动小车前进,其次后面还会有一个万向轮来进行转向。我分别控制两个电机,当其中一个电机转动,另一个电机停止的时候就会进行转向,当两个电机同时以相同的速度转动是那么就会前进或是后退,为了控制电机的速度,我在这里使用了PWM技术,也就是脉冲宽度编码调制,这个我会在后面详细进行说明,所以我们就可以通过这些硬件来实现小车的前进后退以及转弯。

20

在这里我写了一个电机驱动的程序用于方便的来控制电机,其次为了能够更好的驱动两个电机我还使用了一个298电机驱动模块来增加驱动能力。 3.3.2 PWM的介绍

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。

脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。

而在Arduino的UNO开发板上正好有6组PWM输出,所以我们可以非常方便的进行使用。

而在Arduino中使用PWM的话是用的analogWrite(pin,value)这个函数,pin是指的引脚,必须在支持PWM的引脚上使用这个函数,value则是控制电压,即控制电机转速,调节范围是0-255,其次还有一个函数digitalWrite(pin,state)pin一样是指引脚,state则是指的电机状态是正传还是反转,当state是1时正转,是0时则反转。 3.4 PID技术介绍

PID技术是我们传感器技术的一个基础,当今的自动控制技术都是基于反馈的概念。反馈理论的要素包括三个部分:测量、比较和执行。测量关心的变量,与期望值相比较,用这个误差纠正调节控制系统的响应。

21

这个理论和应用自动控制的关键是,做出正确的测量和比较后,如何才能更好地纠正系统。

PID(比例-积分-微分)控制器作为最早实用化的控制器已有70多年历史,现在仍然是应用最广泛的工业控制器。PID控制器简单易懂,使用中不需精确的系统模型等先决条件,因而成为应用最为广泛的控制器。

PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。其输入e (t)与输出u (t)的关系为

u(t)=kp[e(t)+1/TI∫e(t)dt+TD*de(t)/dt] 式中积分的上下限分别是0和t

因此它的传递函数为:G(s)=U(s)/E(s)=kp[1+1/(TI*s)+TD*s] 其中kp为比例系数; TI为积分时间常数; TD为微分时间常数。 它由于用途广泛、使用灵活,已有系列化产品,使用中只需设定三个参数(Kp, Ti和Td)即可。在很多情况下,并不一定需要全部三个单元,可以取其中的一到两个单元,但比例控制单元是必不可少的。

首先,PID应用范围广。虽然很多工业过程是非线性或时变的,但通过对其简化可以变成基本线性和动态特性不随时间变化的系统,这样PID就可控制了。

其次,PID参数较易整定。也就是,PID参数Kp,Ti和Td可以根据过程的动态特性及时整定。如果过程的动态特性变化,例如可能由负载的变化引起系统动态特性变化,PID参数就可以重新整定。

第三,PID控制器在实践中也不断的得到改进。

我在这里特地引入了PID技术是因为如果想要小车运行的更好更稳定或是有更高的要求时,就能够使用PID技术来进行改进和完善。 3.5 总结

在这一章里主要是进行了主控制器的硬件设计并介绍,在这里比较详细的介绍了Arduino平台的微处理器的各种特性,以及开发板的整体性能,还有各种便于开发的扩展板,还简单提到了小车的驱动系统,最后介绍了一下PWM技术以及PID技术,这都是传感以及控制中所需要用到的技术。

22

4. 主控制器软件的设计

4.1 Arduino编程简介

Arduino是一个面向上层的平台,在前面我已经介绍了Arduino的一些硬件资源,所以在这里我们要使用这个平台其实就是控制他的这些硬件资源。

我使用的是UNO开发板,他的各个资源如下: 数字引脚:0-13 模拟引脚:A0-A5

串行通信:0-1(0是RX,接收数据,1是TX,发送数据) 外部中断:2, 3

PWM输出:3, 5, 6, 9, 10, 11

SPI通信:10(SS),11(MOSI),12(MISO),13(SCK) TWI通信:A4(SDA),A5(SCL)

在这里我所需要实现的一些功能就需要控制上面的一些引脚,让其输入或输出信号。

其中数字引脚和模拟引脚是非常重要的,数字引脚用于输入和输出数字信号,模拟引脚则用于输入和输出模拟信号,模拟引脚中其实就是比数字引脚多了一个数模转换器,其实模拟引脚也是可以当作数字引脚使用的。

先来看看数字引脚的控制,有函数pinMode(pin,mode),这个函数用于配置引脚为输入和输出模式,mode参数就表示模式,分别为INPUT和OUTPUT。函数digitalWrite(pin,value)用于设置引脚的输出电压是高电平还是低电平,HIGH是高电平,LOW则是低电平,value就是设置电压的参数。函数digitalRead(pin)则表示读取引脚的电压为高电平还是低电平,当然先要在引脚配置中配置为输入模式,我们一般是用这个函数来读取外界传感器的高低电平的。

模拟引脚的控制其实也很简单,analogReference(type),这个函数是用来配置模拟引脚的参考电压的,因为我们读取模拟引脚的值的方式一般是先获取到模拟值,然后我们再把模拟值进行转换,type有一下三种类型:

DEFAULT:默认值,参考电压,参考电压为5V。 INTERNAL:低电压模式,使用片内基准电源。

23

EXTERNAL:扩展模式,通过AREF引脚获取参考电压。 函数analogRead(pin),这个函数用于读取引脚的模拟量电压值,每读取一次需要花100us的时间,函数返回类型是int型,范围是0-1023。analogWrite(pin,value)这个函数是通过PWM方式输出一个模拟量,一般是用来控制舵机或是亮度或是电机转速的,我在这里就是用的这个函数来控制电机转速的。 4.2各种模块设计 4.2.1 寻线和红外避障传感器程序设计 在这里为了方便,我把寻线功能和避障功能做到了一起并用了一个简单的函数让两个功能可以互相切换,我把数字引脚中的8脚做成了一个转换开关,当8脚为高电平时则是寻线状态,当8脚是低电平是则是避障状态。那么以下便是程序的一个简单的流程图: 开始 各种参数初始化 子函数的构造 判断第8引脚状态 digitalRead(8)==1 有黑线吗? 被挡住了吗 左边有 中间有 右边有 左边被挡 中间被挡 back 右边被挡 左转 直走 右转 turnRR turnRR turnLL 图9程序设计的流程图

24

以上就是寻线和红外避障功能的一个简单的流程图,他告诉了我们这个程序是怎样运作的。 4.2.2 超声波传感程序设计 超声波传感器测距是通过先发射超声波然后检测传回的超声波所耗费的时间从而计算距离的一个方式,下面是流程图。 各种参数定义及初始化 发出超声波 接收超声波 进行计算 输出

图10超声波测距的图 以上就是超声波的一个简单的流程图。 4.2.3 DS18B20温度传感程序设计 在这里我使用了总线的库以及温度的库,所以可以非常方便的得出结果。得出以下控制图。 各种参数初始化及定义 读取传感器内部ROM 将结果输出

图11温度传感图 这里重要的是读取出DS18B20内部的ROM并且输出到电脑监视窗口中。

25

4.2.4 红外遥控程序设计 我所使用的红外模块,因为配备了一个遥控器,所以我先读取出每个遥控中按钮的值,然后将每个按钮的值记录下来,所以就将每个值作为一个操作命令,当遥控器中的那个按钮按下时,就会发射出那个对应的值,然后当红外接收头接收到信号时,处理器就会读取到那个值并按照程序做出相应的反应,以下就是红外控制的图。 各种参数定义以及初始化 红外遥控发射信号 处理器接收信号并做出相关处理 控制电机

图12红外遥控图 4.3 程序逻辑与思路 程序的设计我尽量以模块化的方式来进行设计,这样的好处是可以从总体上来进行大局的规划,也可以非常方便的进行更改和改进,而且一旦出了问题可以非常明确的找出出问题的地方且不用牵涉到大局就可以完成修改,这种方法简单且实用,特别是遇到的系统越是特别复杂庞大时就越能体现出这种设计方法的优势,比如在这里我先设计出要控制电机的子函数,然后到后面就可以方便调用,而且在设计程序时尽量用标准规范的格式,尽量在程序后面写上标注,这样也便于理解。

26

4.4 总结

在系统设计中程序是扮演着非常重要的角色的,程序的好坏直接决定着运行的结果,如果程序出错当然系统就不能正常运转,但是除了出错这种情况外,顶尖的程序员和普通程序员所写出的程序也是有很大的差距的,就好比我在这里所设计的智能小车中的寻线程序,到底小车怎样进行寻线是一个非常重要的问题,把这个根源上的方法上的问题解决好了就会取得非常好的效果的,显然如果是方法没选好那么效率就会变得非常低下,效果也不理想了,所以应该在这里多下工夫的。

27

5. 系统整体调试与总结

5.1 软件的调试与运行

软件的调试与运行也是非常重要的一个环节,他是用来检测系统的工作状态以找出系统可能出现的问题的。在这里我分别对小车的每个功能进行了调试。

首先是小车的寻线功能,最开始我是画了一根很细的线,可是由于传感器精度不高,所以无法检测出来,所以并没有成功,最后我用绝缘胶带贴在地上便组成了一个小圈这样传感器就能检测出来了,而且我还反复调试程序,调整PWM输出,提高速度,让小车可以非常顺利的沿着黑线走并且不出边界。

红外避障功能中因为避障用的红外传感器检测距离有限,所以只有面前的东西他才能检测到并做出相应的动作,而且障碍物必须面积比较大,关键还是要传感器要能够检测得到,因为传感器就是小车的“眼睛”。

超声波测距功能,这个可以连上电脑用电脑的监视窗口查看返回的结果,我也调整了刷新时间,便于观测。其中超声波测距的距离也是有限制的,当然不可能无限远的距离也测量。

DS18B20温度传感器,温度传感器要能够读取传感器内部的寄存器,也就是存储温度的存储器,然后对这个值进行一定的转换,最后在通过总线接口输出到处理器中并由处理器输出到监视窗口由我们观测到。

红外遥控,这个就是要先得到遥控器中的数值,然后把这个数值带到程序中进行操作。

5.2 设计存在的不足

在设计中我只使用了三个寻线传感器,如果传感器更多一些,我就可以写一些更复杂的算法,这样小车也就能够跑的更加的流畅,速度也可以更快一些,避障传感器也是一样,有了更多的避障传感器也能够感知到更多的环境变化。而且其实我在寻线传感器中的算法还是过于简陋,我是这样想的,因为黑线只有一条,所以肯定一个传感器在检测到黑线的时候另外的传感器是检测不到黑线的,所以我写的程序就是当其中一条传感器检测到黑线时让小车做出怎样的动作,其实也有很过更好的算法,比如,因为有三个寻线传感器,中间一个两边各一个,所以我们可以让黑线一直都保持在让中间的传感器检测得到的一个状态,这样的话小

28

车同样能够沿着黑线走了,我们在程序时就要写一个循环函数用来循环检测中间传感器的状态,这样,小车就不断的调整自身的姿态,走起来也会顺畅的多。其次我还想到如果只有两个传感器的话程序要怎么写,如果只有一个传感器的话程序要什么写,两个传感器的话用我的思路稍做改进就行的,如果只有一个传感器的话该怎么办呢,这个问题我还真想了一会儿,后来想到其实不也能够用扫描的办法吗,我就先让小车左右摆,这样前面的那一个传感器就能够扫描到黑线,当扫描到黑线的一瞬间就往前走,这样也能够实现寻线的功能,不过效率肯定就低一些了。至于其他的一些程序,比如什么超声波或是温度之类的,如果能够用到库函数的就尽量用库函数,这样既能够减少开发成本,也能够很方便的完成开发,这也是Arduino系统的一大优势。 5.3设计可能的改进与完善

设计中其实电力还是不够充足,导致电机工作的不是很快,其实也可以换成那种已经做好的电源模块,那样的话驱动力就会好的多了。设计过程中也遇到过很多问题,有很多是程序的问题,在设计的过程中得到教训:不要一口气把程序写完,应该是边写边调试,这样能够尽早发现问题,也能够在发现问题的时候便于调试和修改,一下子把程序写完了也不好找到问题的所在。其实我最想做的还是给小车装上ZIGBEE,那样就可以与电脑连接,可以在电脑上无线控制小车的运行并且可以把小车当作一个平台来实时采集数据。

29

参考文献

[1]程晨,Arduino开发实战指南[M],机械工业出版社。2002

[2]孟立凡,郑宾.传感器原理及技术[M],北京:国防工业出版社。2005 [3]刘君华,传感器技术及应用实例[M],电子工业出版社。2008 [4]传感器应用技巧141例[M],科学出版社。2006 [5]传感器电子制作DIY[M],科学出版社。2007 [6]传感器与检测技术[M],清华大学出版社。2011 [7]传感器技术及应用[M]北京航空航天大学出版社。2010

[8]单片机原理与应用实例仿真[M]北京航空航天大学出版社。2007 [9]C程序设计教程[M]清华大学出版社。2010 [10]爱上Arduino[M]人民邮电出版社。2012

30

附录 附录 1.元件清单 名称 数量 Arduino主板 电机驱动板 扩展板 寻线传感器 红外传感器 红外遥控器 温度传感器 超声波传感器 小车底板 杜邦线 电池盒 2.实物图 1 1 1 3 3 1 1 1 1 20 1

31

致 谢

历时将近两个月的时间终于将这篇论文写完,在论文的写作过程中遇到了无数的困难和障碍,都在同学和老师的帮助下度过了。尤其要强烈感谢我的论文指导老师夏洪星老师,他对我进行了无私的指导和帮助,不厌其烦的帮助进行论文的修改和改进。另外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。在此向帮助和指导过我的各位老师表示最衷心的感谢!

感谢这篇论文所涉及到的各位学者。本文引用了数位学者的研究文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。

感谢我的同学和朋友,在我写论文的过程中给予我了很多你问素材,还在论文的撰写和排版等过程中提供热情的帮助。

由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正。

32

本文来源:https://www.bwwdw.com/article/v1k.html

Top