一起玩儿物联网人工智能小车(ESP32)——39. 利用红外避障模块增强自动避障功能(一)

摘要:本文介绍如何使用红外避障模块增强小车的避障功能

在前边避障小车中,大家可能已经发现了一个问题,当小车不是与侧面的障碍物保持平行行驶,而是缓慢接近的时候,超声波传感器可能要距离旁边的障碍物很近甚至接近贴上了才能发现障碍物的距离已经远小于停车距离了。这是因为超声波传感器与旁边障碍物的夹角很小的时候,能够反射回来的超声波信号极少,不足以正确的探测出障碍物的距离。这时,就需要考虑一些其他的手段来增强小车的探测能力,避免这种情况的发生。

这时有人会说了,在两侧也装两个超声波传感器,一边行走,一边测量距离旁边障碍物的距离不就行了么?这个方法是不行的。原因在之前介绍超声波传感器的时候已经说了,每个超声波发射器发射的超声波的频率都是基本相同的,这样当在一个狭小空间且多个超声波传感器一同工作的时候,一个发射器发射的超声波可能经过反射会被多个超声波接收器接收,这样接收器是无法辨别出哪个才是自己应该接收的信号,因而无法得到正确的测量结果。

在这里我们采用的是红外避障模块来探测车辆两侧与障碍物的距离,当两侧距离过小的时候,采取一定的措施,来避免小车与侧面障碍物发生碰撞。下图为市场上常见的红外避障模块。

红外避障模块具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,这时会有微弱的电流流过接收管,使其两端的电压发生了变化,当接收的红外光强达到一定程度,后边比较器芯片的输出电压就会发生反转,从而导致输出指示灯和OUT引脚的输出电平就会变化。

红外避障模块的主要组成如下图所示:

通过上面的而介绍,可以看出,这个红外避障模块输出的是开关量,也就是只有高电平或低电平两种状态,并不能得到与障碍物的距离是多少。红外避障模块共有3个引脚,功能说明如下:

引脚

功能

VCC

电源正极3.3V或者5V均可

GND

电源负极

OUT

状态输出引脚。当障碍物大于探测距离时,输出指示LED灭,OUT引脚为高电平。当障碍物距离小于探测距离时,输出指示灯LED点亮,OUT引脚为低电平。

在红外避障模块有两个LED灯,一个时电源指示LED,表示电源供电正常。输出指示LED用来指示OUT引脚输出电平的高低,当输出指示LED亮起时,OUT引脚输出电平为低电平,当输出指示LED熄灭时,OUT引脚输出为高电平。

另外,该传感器的探测距离是可以通过蓝色电位器来调节的。在调节时,通过观察输出指示LED的状态,来调节红外避障模块的有效检测距离,通常情况下,红外避障模块的有效检测距离范围在0~15cm左右。在这里需要强调一下,红外避障模块的探测距离收到周围阳光照射和发热物体的影响,每次使用前,最好重新调整一下检测的距离,确保其可以产生正确的输出信号。

下面就先用Mixly测试一下如何使用红外避障模块。在这里实现的功能很简单,就是当红外避障模块的OUT为高电平的时候,输出字符串“无障碍物!”,当红外避障模块的OUT引脚为低电平的时候,输出字符串“有障碍物!”。

首先将红外避障模块与ESP32开发板相连接,连接的方法如下:

红外避障模块

ESP32开发板

VCC

电源正极(+5V)

GND

GND

OUT

GPIO引脚P27

打开Mixly软件,选择“Arduino ESP32”开发板,首先初始化串口的波特率为:115200。串口在这里的目的只是为了输出提示信息。然后添加“控制”功能模块中的“如果”功能。默认的如果功能只是当满足条件的时候执行什么功能。在这里还需要不满足条件的时候,也要有信息输出。因此,单击“如果”功能左上角的蓝色图标,然后将“否则”拖拽到右边,就可以设置不满足条件的情况下执行某段程序了。如下图所示:

在这里,如果要判断的条件就是引脚27是否为高电平,这个判断需要用到“逻辑”功能模块中的相等逻辑,完成后的程序如下图所示:

从上面的程序可以看出,当数字输入引脚27为低电平时,输出“有障碍物!”字符串,否则输出“无障碍物!”字符串。编译、上传程序,执行结果如下:

在程序执行时,可以依据红外避障模块上面输出指示灯的状态来判断这里输出的信息是否正确。Mixly为我们生成的源代码如下所示:

void setup(){

  Serial.begin(115200);

  pinMode(27, INPUT);

}

void loop(){

  if (digitalRead(27) == LOW) {

    Serial.println("有障碍物!");

  } else {

    Serial.println("无障碍物!");

  }

  delay(500);

}

可以看到,在上面代码中首先利用pinMode(27, INPUT)这句代码将ESP32的27管脚设置为了输入状态,然后再利用digitalRead()函数就可以读取27引脚的状态了。

好了,今天就到这里了,下一篇将继续介绍如何把红外避障模块的功能,融入到之前的超声波避障小车中,提升小车自动避障的能力。

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起玩儿科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值