ラズベリーパイで超音波距離センサーHC-SR04を使う方法を解説します。

 

超音波距離センサーとは

左(Transmitter)から超音波を送信し、測定対象にぶつかって跳ね返ってきた超音波を右(Receiver)で受け取り、かかった時間を測定できるセンサーです。

かかった時間に音速を掛けて2で割れば、測定対象までの距離が計算できます。

距離(cm) = 超音波が行って戻って来るのにかかった時間(s) * 音速(cm/s) / 2

 

HC-SR04の主なスペックは以下の通りです。

電源 DC 5V
測定距離 2〜400cm(15度の範囲)
分解能 0.3cm
出力 超音波の往復時間
価格 300円(秋月電子)、652円(スイッチサイエンス)、700円(Amazon 3個入り

 

HC-SR04のピンは4本あり、以下のようになっています。

Vcc 電源のDC 5V
Trig 10μs以上Onにすると超音波を発信
Echo 超音波の発信終了から受信まで約3.7Vを出力
GND 電源のGND

 

Raspberry Piとの接続

超音波センサーHC-SR04は、Echoピンからの出力電圧が約3.7Vですので、電気的に厳密に使おうすると3.3Vが入力上限のラズパイで使うには工夫が必要です(そのままつないでしまう人もいます)。

具体的には同じ抵抗を2つ使い、HC-SR04からの出力電圧を半分にします。3.7V/2で1.85Vとなり、ラズパイは1.8Vぐらいから3.3Vまでを1(HIGH)として認識できますので、これで接続できるできるようになります。

1kΩぐらいの抵抗を使うといいでしょう。

分圧

このように抵抗を使って電圧をわけることを分圧(Voltage Divider)といいます。なお、異なる抵抗値の抵抗を2本使い、ラズパイにちょうど3.3Vぐらいが入力されるようにもできます。

 

やってみよう

それでは実際に電子回路を作って動かしてみましょう!

電子回路の作成

以下の通り電子回路を作成します。必要なパーツは

・ラズベリーパイ x 1
・HC-SR04 x 1(下の模式図では裏面がラズパイの方を向いています)
・1kΩ抵抗 x 2
・ミニブレッドボード x 1
・メス・オスジャンパーコード x 4
・オス・オスジャンパーコード x 1

 

プログラムの作成

プログラムは以下を使用できます。

ultrasonic-sensor.py

import RPi.GPIO as GPIO
import time
import sys

trig_pin = 15                           # GPIO 15
echo_pin = 14                           # GPIO 14
speed_of_sound = 34370                  # 20℃での音速(cm/s)

GPIO.setmode(GPIO.BCM)                  # GPIOをBCMモードで使用
GPIO.setwarnings(False)                 # BPIO警告無効化
GPIO.setup(trig_pin, GPIO.OUT)          # Trigピン出力モード設定
GPIO.setup(echo_pin, GPIO.IN)           # Echoピン入力モード設定

def get_distance(): 
    #Trigピンを10μsだけHIGHにして超音波の発信開始
    GPIO.output(trig_pin, GPIO.HIGH)
    time.sleep(0.000010)
    GPIO.output(trig_pin, GPIO.LOW)

    while not GPIO.input(echo_pin):
        pass
    t1 = time.time() # 超音波発信時刻(EchoピンがHIGHになった時刻)格納

    while GPIO.input(echo_pin):
        pass
    t2 = time.time() # 超音波受信時刻(EchoピンがLOWになった時刻)格納

    return (t2 - t1) * speed_of_sound / 2 # 時間差から対象物までの距離計算


while True:                         # 繰り返し処理
    try:
        distance = '{:.1f}'.format(get_distance())  # 小数点1までまるめ
        print("Distance: " + distance + "cm")       # 表示
        time.sleep(1)                               # 1秒まつ

    except KeyboardInterrupt:                       # Ctrl + C押されたたら
        GPIO.cleanup()                              # GPIOお片付け
        sys.exit()                                  # プログラム終了

 

動作チェック

Thonnyかターミナルからultrasonic-sensor.pyを実行します。この例だとセンサーを天井に向けた状態で、手をかざしてみています。うまく距離が測定できましたか?

プログラムを終了するときはThonnyのStopボタンを押すか、ターミナルではCtrl + C で停止できます。

 

おわりに

いかがだったでしょうか? 他のセンサーの使い方も今後どんどん乗せていきますのでお楽しみに😊

関連記事:使い方