冯聪2091224107Arduino智能小车(3)

2019-03-10 17:52

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

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

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

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

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

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

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

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


冯聪2091224107Arduino智能小车(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小缸径多缸增压柴油机发展综述

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: