超音波センサ(HC-SR04)を使って距離を測定

超音波式の測距センサー「HC-SR04」を使って、対象物までの距離を測定したので紹介します。今回使用した「HC-SR04」は、秋月さんで500円程度で販売されています。超音波センサーと聞くと高そうですけど、意外に安くで手に入ります。

超音波式の測距センサー(HC-SR04)

ラズパイとの配線接続図は以下です。今回は、GPIOの22ピンと27ピンを使用しました。注意点として、センサ(HC-SR04)の電源が5Vで、ラズパイのGPIOが3.3Vなので、センサからの出力(Echo信号)を分圧して、電圧を下げてからラズパイ側に入力しています。

ラズパイとHC-SR04の配線接続図

センサの制御方法はシンプルで分かりやすいです。

  1. Trig端子を10us以上Highにします。
  2. HC-SR04は、Trig端子がLowになってから、40kHZのパルスを8回送信します。
  3. HC-SR04は、対象物に反射したパルスを受信します。
  4. HC-SR04は、パルスの伝搬遅延時間分だけEcho端子をHighで出力します。
  5. Echo端子がHighになった時間を計測して対象物までの距離を算出します。

距離の算出式:Distance in cm = echo pulse width in uS/58

実際に、以下のような試験環境で、対象物(段ボール)を10cm~50cmまで5cm単位でずらしながら距離を計測しました。

計測結果です。思いのほか精度が出ていました。

実際の距離(cm)測定結果(cm)
1010.7740533763
1515.1395797729
2020.3477925268
2525.0339508057
3030.1024009442
3534.9159898429
4040.000882642
4544.7733648892
5049.7431590639

測定に使用した簡易プログラムです。プログラムを実行すると、計測距離が表示されます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
import RPi.GPIO as GPIO

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
TRIG = 27
ECHO = 22

# GPIO端子の初期設定
GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.output(TRIG, GPIO.LOW)
time.sleep(0.3)

# Trig端子を10us以上High
GPIO.output(TRIG, GPIO.HIGH)
time.sleep(0.00001)
GPIO.output(TRIG, GPIO.LOW)

# EchoパルスがHighになる時間
while GPIO.input(ECHO) == 0:
    echo_on = time.time()

# EchoパルスがLowになる時間
while GPIO.input(ECHO) == 1:
    echo_off = time.time()

# Echoパルスのパルス幅(us)
echo_pulse_width = (echo_off - echo_on) * 1000000

# 距離を算出:Distance in cm = echo pulse width in uS/58
distance = echo_pulse_width / 58

print distance

これを使って、体温測定時の距離を計測できれば、自動でデータが取れるので助かりそうです。ちょっと、体温測定の補正値算出に使ってみようかと…

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA