ラズベリーパイで超音波距離センサーの使い方
ラズベリーパイで超音波距離センサー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 で停止できます。
おわりに
いかがだったでしょうか? 他のセンサーの使い方も今後どんどん乗せていきますのでお楽しみに😊