超聲波傳感器使用聲音脈沖和簡單的計(jì)算來確定其自身與前方物體之間的距離。它們通常用于機(jī)器人中,以確保機(jī)器人不會(huì)行走或滾入障礙物。樹莓派 Pico 基于 RP2040 芯片的多功能微控制器板,當(dāng)與超聲波傳感器(例如 HC-SR04)等傳感器結(jié)合使用時(shí),Pico 成為測量距離、檢測物體和創(chuàng)建智能自動(dòng)化應(yīng)用的理想平臺(tái)。下面我們將了解如何在樹莓派 Pico 上使用超聲波傳感器。
材料清單
– 樹莓派 Pico
– HC-SR04 超聲波傳感器
– 跳線若干
– 面包板或 Pico 擴(kuò)展板
超聲波傳感器的引腳排列如下:
– VCC 引腳用于為傳感器供電。它通常需要 5V 直流電源。
– Trig 引腳用于向傳感器發(fā)送觸發(fā)信號(hào)。當(dāng)高電平信號(hào)(通常為 5V)施加到該引腳時(shí),傳感器開始發(fā)射超聲波。
– Echo 引腳用于接收來自傳感器的回波信號(hào)。當(dāng)傳感器發(fā)出的超聲波擊中物體并反彈回來時(shí),傳感器會(huì)在該引腳上產(chǎn)生脈沖。
– VCC 引腳是傳感器的接地連接,應(yīng)連接到電路的接地 (0V)。
HC-SR04 的測距過程
1. 樹莓派向 Trig 腳發(fā)送一個(gè)持續(xù) 10us 的脈沖信號(hào)。
2. HC-SR04 接收到樹莓派發(fā)送的脈沖信號(hào),開始發(fā)送超聲波 (start sending ultrasoun),并把 Echo置為高電平。然后準(zhǔn)備接收返回的超聲波。
3. 當(dāng) HC-SR04 接收到返回的超聲波 (receive returned ultrasound) 時(shí),把 Echo 置為低電平。
從上述過程可以看出,Echo 高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回所經(jīng)過的時(shí)間間隔~
請對照下圖接線。
Pico 的 3V3 引腳連接到超聲傳感器的 VCC 引腳。
Pico 的 GND 引腳連接到超聲傳感器的 GND 引腳。
Pico 的 GPIO 引腳 3 連接到超聲傳感器的 Trig 引腳。
Pico 的 GPIO 引腳 2 連接到超聲傳感器的 Echo 引腳。
電路連接好之后,將樹莓派 Pico 連上 PC 并打開 Thonny。
1、從計(jì)算機(jī)庫導(dǎo)入 Pin 類,然后導(dǎo)入 utime 庫。前者用于控制 GPIO 引腳,后者是基于時(shí)間的函數(shù)庫。
from machine import Pin import utime
2、創(chuàng)建兩個(gè)新對象,觸發(fā)器和回聲。這些對象配置要與超聲傳感器一起使用的 Pico 的 GPIO 引腳。例如,我們的觸發(fā)引腳用于發(fā)送電流脈沖,因此它是輸出引腳?;夭ㄒ_接收反射的脈沖,因此回波是輸入。
trigger = Pin(3, Pin.OUT) echo = Pin(2, Pin.IN)
3、創(chuàng)建一個(gè)函數(shù) ultra(),其中將包含讀取所需的代碼。
def ultra():
4、將觸發(fā)引腳拉低,以確保其未激活,然后暫停兩微秒。
trigger.low() utime.sleep_us(2)
5、在將觸發(fā)器引腳拉低之前,將觸發(fā)器引腳拉高五秒鐘。這將從超聲波傳感器發(fā)送一個(gè)短脈沖,然后關(guān)閉該脈沖。
trigger.high() utime.sleep_us(5) trigger.low()
6、創(chuàng)建一個(gè) while 循環(huán)以檢查回波引腳。如果沒有收到回波脈沖,則更新變量 signaloff,使其包含以微秒為單位的時(shí)間戳。
while echo.value() == 0: signaloff = utime.ticks_us()
7、創(chuàng)建另一個(gè) while 循環(huán),這次檢查是否已收到回聲。這會(huì)將當(dāng)前時(shí)間戳(以微秒為單位)存儲(chǔ)到 signalon 變量中。
while echo.value() == 1: signalon = utime.ticks_us()
8、創(chuàng)建一個(gè)新的 timepass 變量,該變量將存儲(chǔ)脈沖離開傳感器,撞擊物體并作為回波返回傳感器所花費(fèi)的總時(shí)間值。
timepassed = signalon - signaloff
9、創(chuàng)建一個(gè)新變量,距離。此變量將存儲(chǔ)方程式的答案。我們將行進(jìn)時(shí)間(經(jīng)過的時(shí)間)乘以聲速(343.2m/s,即每微秒 0.0343cm),該方程的乘積除以 2,因?yàn)槲覀儾恍枰傂羞M(jìn)距離,而只需從反對傳感器。
distance = (timepassed * 0.0343) / 2
10、打印一條消息到 Python Shell,顯示距離。
print("The distance from object is ",distance,"cm")
11.現(xiàn)在,我們移出該函數(shù),創(chuàng)建一個(gè)循環(huán),該循環(huán)將每秒運(yùn)行一次該函數(shù)。
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 按鈕以運(yùn)行代碼。在 Python Shell 中,您將看到每秒打印的距離。
審核編輯:劉清
-
直流電源
+關(guān)注
關(guān)注
8文章
1283瀏覽量
52297 -
回波信號(hào)
+關(guān)注
關(guān)注
1文章
14瀏覽量
8640 -
超聲波傳感器
+關(guān)注
關(guān)注
18文章
574瀏覽量
35874 -
樹莓派
+關(guān)注
關(guān)注
116文章
1696瀏覽量
105456
原文標(biāo)題:在樹莓派 Pico 上使用 HC-SR04 超聲波測距模塊
文章出處:【微信號(hào):趣無盡,微信公眾號(hào):趣無盡】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論