樹莓派使用HC-SR04超聲波測距模塊

樹莓派使用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測距原理

  1. 樹莓派向 Trig 腳發送一個持續 10us 的脈衝信號;
  2. HC-SR04 接收到樹莓派發送的脈衝信號,開始發送超聲波 (start sending ultrasoun),並把 Echo置爲高電平。 然後準備接收返回的超聲波;
  3. 當 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()

參考鏈接:

樹莓派上使用HC-SR04超聲波測距模塊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章