樹莓派使用HC-SR04超聲波測距模塊
1、HC-SR04 介紹
HC-SR04 模塊可以測量 3cm – 4m 的距離,測量角度爲15度,精確度可以達到 3mm。這個模塊包括超聲波發射器、超聲波接收器和控制電路三部分。有如下 4 個引腳:
- VCC:5V DC供電;
- Trig:Trigger引腳輸入信號,10us TTL脈衝;
- Echo:Echo引腳輸出信號,5V脈衝信號
- GND:地
【注意】 Echo 返回的是 5v信號,而樹莓派的 GPIO 接收超過 3.3v 的信號可能會被燒燬,因此需要加一個分壓電路
2、HC-SR04測距原理
- 樹莓派向 Trig 腳發送一個持續 10us 的脈衝信號;
- HC-SR04 接收到樹莓派發送的脈衝信號,開始發送超聲波 (start sending ultrasoun),並把 Echo置爲高電平。 然後準備接收返回的超聲波;
- 當 HC-SR04 接收到返回的超聲波 (receive returned ultrasound) 時,把 Echo 置爲低電平。
3、Python程序
完整代碼如下:
#導入 GPIO庫
import RPi.GPIO as GPIO
import time
#設置 GPIO 模式爲 BCM
GPIO.setmode(GPIO.BCM)
#定義 GPIO 引腳
GPIO_TRIGGER = 23
GPIO_ECHO = 24
#設置 GPIO 的工作方式 (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)
# 測距函數
def ultrasonic_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
return distance
if __name__ == '__main__':
try:
while True:
dist = ultrasonic_distance()
print("Measured Distance = {:.2f} cm".format(dist))
time.sleep(1)
# Reset by pressing CTRL + C
except KeyboardInterrupt:
print("Measurement stopped by User")
GPIO.cleanup()
參考鏈接: