电子说
超声波传感器使用声音脉冲和简单的计算来确定其自身与前方物体之间的距离。它们通常用于机器人中,以确保机器人不会行走或滚入障碍物。树莓派 Pico 基于 RP2040 芯片的多功能微控制器板,当与超声波传感器(例如 HC-SR04)等传感器结合使用时,Pico 成为测量距离、检测物体和创建智能自动化应用的理想平台。下面我们将了解如何在树莓派 Pico 上使用超声波传感器。
材料清单
– 树莓派 Pico
– HC-SR04 超声波传感器
– 跳线若干
– 面包板或 Pico 扩展板
超声波传感器的引脚排列如下:
– VCC 引脚用于为传感器供电。它通常需要 5V 直流电源。
– Trig 引脚用于向传感器发送触发信号。当高电平信号(通常为 5V)施加到该引脚时,传感器开始发射超声波。
– Echo 引脚用于接收来自传感器的回波信号。当传感器发出的超声波击中物体并反弹回来时,传感器会在该引脚上产生脉冲。
– VCC 引脚是传感器的接地连接,应连接到电路的接地 (0V)。
HC-SR04 的测距过程
1. 树莓派向 Trig 脚发送一个持续 10us 的脉冲信号。
2. HC-SR04 接收到树莓派发送的脉冲信号,开始发送超声波 (start sending ultrasoun),并把 Echo置为高电平。然后准备接收返回的超声波。
3. 当 HC-SR04 接收到返回的超声波 (receive returned ultrasound) 时,把 Echo 置为低电平。
从上述过程可以看出,Echo 高电平持续的时间就是超声波从发射到返回所经过的时间间隔~
请对照下图接线。
Pico 的 3V3 引脚连接到超声传感器的 VCC 引脚。
Pico 的 GND 引脚连接到超声传感器的 GND 引脚。
Pico 的 GPIO 引脚 3 连接到超声传感器的 Trig 引脚。
Pico 的 GPIO 引脚 2 连接到超声传感器的 Echo 引脚。
编程
电路连接好之后,将树莓派 Pico 连上 PC 并打开 Thonny。
1、从计算机库导入 Pin 类,然后导入 utime 库。前者用于控制 GPIO 引脚,后者是基于时间的函数库。
from machine import Pin import utime
2、创建两个新对象,触发器和回声。这些对象配置要与超声传感器一起使用的 Pico 的 GPIO 引脚。例如,我们的触发引脚用于发送电流脉冲,因此它是输出引脚。回波引脚接收反射的脉冲,因此回波是输入。
trigger = Pin(3, Pin.OUT) echo = Pin(2, Pin.IN)
3、创建一个函数 ultra(),其中将包含读取所需的代码。
def ultra():
4、将触发引脚拉低,以确保其未激活,然后暂停两微秒。
trigger.low() utime.sleep_us(2)
5、在将触发器引脚拉低之前,将触发器引脚拉高五秒钟。这将从超声波传感器发送一个短脉冲,然后关闭该脉冲。
trigger.high() utime.sleep_us(5) trigger.low()
6、创建一个 while 循环以检查回波引脚。如果没有收到回波脉冲,则更新变量 signaloff,使其包含以微秒为单位的时间戳。
while echo.value() == 0: signaloff = utime.ticks_us()
7、创建另一个 while 循环,这次检查是否已收到回声。这会将当前时间戳(以微秒为单位)存储到 signalon 变量中。
while echo.value() == 1: signalon = utime.ticks_us()
8、创建一个新的 timepass 变量,该变量将存储脉冲离开传感器,撞击物体并作为回波返回传感器所花费的总时间值。
timepassed = signalon - signaloff
9、创建一个新变量,距离。此变量将存储方程式的答案。我们将行进时间(经过的时间)乘以声速(343.2m/s,即每微秒 0.0343cm),该方程的乘积除以 2,因为我们不需要总行进距离,而只需从反对传感器。
distance = (timepassed * 0.0343) / 2
10、打印一条消息到 Python Shell,显示距离。
print("The distance from object is ",distance,"cm")
11.现在,我们移出该函数,创建一个循环,该循环将每秒运行一次该函数。
while True: ultra() utime.sleep(1)
下面是完整的代码:
from machine import Pin import utime trigger = Pin(3, Pin.OUT) echo = Pin(2, Pin.IN) def ultra(): trigger.low() utime.sleep_us(2) trigger.high() utime.sleep_us(5) trigger.low() while echo.value() == 0: signaloff = utime.ticks_us() while echo.value() == 1: signalon = utime.ticks_us() timepassed = signalon - signaloff distance = (timepassed * 0.0343) / 2 print("The distance from object is ",distance,"cm") while True: ultra() utime.sleep(1)
将代码作为 code.py 保存到树莓派 Pico 上,然后单击 Run 按钮以运行代码。在 Python Shell 中,您将看到每秒打印的距离。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !