用手机怎么演示超声波测距(昉星光2演示案例之超声波测距)

本次演示为将带领大家在昉·星光开发板上,使用超声波测距模块进行测距(昉·星光和昉·星光 2开发板的操作步骤相同)。

1.准备工作

在开始本次演示的实际操作之前,大家需要做好一些准备工作,主要涉及到的硬件如下:

  • 开发板:昉·星光 2开发板(昉·星光也可以)
  • 超声波测距模块: HC-SR04
  • 杜邦线:若干

用手机怎么演示超声波测距(昉星光2演示案例之超声波测距)(1)

硬件准备

2. 超声波测距传感器测距原理

本次演示中,使用的超声波测距传感器型号为HC-SR04,该模块具体如下:

用手机怎么演示超声波测距(昉星光2演示案例之超声波测距)(2)

超声波传感器正面

用手机怎么演示超声波测距(昉星光2演示案例之超声波测距)(3)

超声波传感器顶部

在超声波传感器的最前面,有两个金属探头,一个类似喇叭用于发射超声波,一个类似麦克风用于接收反射回来的超声波。

超声波测距利用超声波在空气中的传播时间来进行测距。HC-SR04发射40KHz的超声波,遇到障碍物后将会反射。从发射和反射回来,超声波在空气中经过一定距离需要一定的时间。因此,我们计算计算传播过程所花费的时间,就能计算出HC-SR04与障碍物之间的距离。

用手机怎么演示超声波测距(昉星光2演示案例之超声波测距)(4)

原理图

在超声波传感器模块上,有两个控制引脚,分别为Trig和Echo。使用这两个引脚控制HC-SR04进行测距,具体步骤如下:

  1. 将Trig引脚保持高电平至少10us
  2. HC-SR04将对外发送40KHz的超声波,共8个周期
  3. 读取Echo引脚的输出电平,高电平持续的时间就是超声波从发射到返回的时间
  4. 根据得到的时间,计算出实际的距离

距离计算公式:

  • 距离 =(超声波速度 * 高电平保持时间)/ 2
  • 超声波速度:取声波在空气中的速度240m/s

因为超声波从HC-SR04到障碍物需要一个来回,所以实际距离为超声波路程的一半。

3. 超声波测距实验

通过上述超声波测距的原理,我们可以得知,可以通过两个引脚,一个引脚控制HC-SR04的Trig来控制超声波的发射,一个引脚从HC-SR04的Echo读取电平状态来得知超声波是否返回。

首先,参考下图,将超声波测距模块,连接到昉·星光 2开发板:

用手机怎么演示超声波测距(昉星光2演示案例之超声波测距)(5)

连接

用手机怎么演示超声波测距(昉星光2演示案例之超声波测距)(6)

实物连接

注意:应根据实际使用的传感器,确定供电电压。本次课程中使用的HC-SR04使用5V供电电压。

然后,编写如下的程序:

# -*- coding: utf-8 -*- # file: ~/projects/distance/udm.py # pip3 install gpio import os import time from time import sleep #导入 GPIO库 import gpio as GPIO import time #定义 GPIO 引脚 GPIO_TRIGGER = 54 GPIO_ECHO = 51 #设置 GPIO 的工作方式 (IN / OUT) GPIO.setup(GPIO_TRIGGER, GPIO.OUT) GPIO.setup(GPIO_ECHO, GPIO.IN) def distance(): # 发送高电平信号到 Trig 引脚 GPIO.output(GPIO_TRIGGER, True) # 持续 10 us time.sleep(0.00001) GPIO.output(GPIO_TRIGGER, False) start_time = time.time() stop_time = time.time() # 记录发送超声波的时刻1 while GPIO.input(GPIO_ECHO) == 0: start_time = time.time() # 记录接收到返回超声波的时刻2 while GPIO.input(GPIO_ECHO) == 1: stop_time = time.time() # 计算超声波的往返时间 = 时刻2 - 时刻1 time_elapsed = stop_time - start_time # 声波的速度为 343m/s, 转化为 34300cm/s distance = (time_elapsed * 34300) / 2 print("往返时间=%0.3fms 物体距离=%0.2fcm" % (time_elapsed*1000, distance)) return distance whileTrue: print("测量距离:") distance() sleep(1)

上述程序的逻辑根据超声波测距模块的原理,首先输出高电平到Trig引脚,保持10us,触发超声波发送,然后从Echo引脚读取高电平信号,从而得到间隔时间,再根据公式计算出实际的距离。

编写完成后,运行 udm.py ,即可按键控制LED了。

# 安装GPIO模块 sudo pip3 install gpio # 如果遇到错误,可以使用sudo python3 udm.py运行: python3 udm.py

实际运行和测量结果如下:

用手机怎么演示超声波测距(昉星光2演示案例之超声波测距)(7)

21cm距离测量

用手机怎么演示超声波测距(昉星光2演示案例之超声波测距)(8)

21cm距离测量结果

用手机怎么演示超声波测距(昉星光2演示案例之超声波测距)(9)

25cm距离测量

用手机怎么演示超声波测距(昉星光2演示案例之超声波测距)(10)

25cm距离测量结果

注意:因为超声波实在空气中传播,也会受到现场环境的影响,所以实际使用中,可以进行多次测量,然后取平均值。

4. 总结

在本次演示中,我们学习了通过使用超声波测距模块进行测距。

在实际处理的过程中,涉及到了以一定的时序控制外部设备,然后再从外部设备读取数据的逻辑。虽然其中的控制时序非常简单,但这是很多复杂控制的基础。

参考资料:

  • HC-SR04 超音波測距感測模組(https://ithelp.ithome.com.tw/articles/10249987)

本项目演示作者:HonestQiao

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页