Make.

超音波距離センサ(HC-SR04)を使う

Pocket

RaspberryPiでの超音波距離センサモジュールHC-SR04の使い方を説明します。 超音波距離センサを使うと、センサから対象物までの距離を簡単に測ることができます。
このモジュールはAmazonでも500円以下で売られており、簡単に手に入れることができます。


超音波距離センサについて

このセンサは、センサから超音波を出し、その反射を受信して対象物までの距離を測る測距センサです。測定可能距離 2cm-450cmとなります。

00042

この超音波距離センサは、以下の手順で制御を行います。

  1. TRIG端子を10us以上Highにします。
    このセンサモジュールが40kHzのパルスを8回送信して受信します。
  2. 受信すると、ECHO端子がHighになります。
    超音波を送信してから受信するまで、ECHO端子はHighになります。
  3. ECHO端子がHighになっている時間の半分を音速で割った数値が距離になります。

上記のように制御は簡単です。


超音波距離センサモジュールを接続する

RaspberryPiを超音波距離センサモジュールHC-SR04を接続するには1つ注意点があります。
この超音波距離センサモジュールHC-SR04がECHO端子から出力する電圧は5Vですが、Raspberry Piの入出力端子でありGPIOは、3.3V用であるためです。

00043

そのため、モジュールの出力ECHO端子の出力を、5Vから3.3Vに分圧する必要があります。
5Vから3.3Vに変換する方法
ECHO端子の5V出力を分圧し、3.3Vにして以下のように接続します。

00041


プログラムで制御する(Python)

RaspberryPiでHC-SR04を操作するためにPythonでプログラムを作成します。
プログラムを実行すると、以下のようにcm単位でセンサーが計測した距離を表示します。
以下のプログラム「hcsr04.py」で制御します。

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

def reading(sensor):
    import time
    import RPi.GPIO as GPIO
    GPIO.setwarnings(False)
    
    GPIO.setmode(GPIO.BOARD)
    TRIG = 11
    ECHO = 13
    
    if sensor == 0:
        GPIO.setup(TRIG,GPIO.OUT)
        GPIO.setup(ECHO,GPIO.IN)
        GPIO.output(TRIG, GPIO.LOW)
        time.sleep(0.3)
        
        GPIO.output(TRIG, True)
        time.sleep(0.00001)
        GPIO.output(TRIG, False)

        while GPIO.input(ECHO) == 0:
          signaloff = time.time()
        
        while GPIO.input(ECHO) == 1:
          signalon = time.time()

        timepassed = signalon - signaloff
        distance = timepassed * 17000
        return distance
        GPIO.cleanup()
    else:
        print "Incorrect usonic() function varible."
        
print reading(0)

実行結果は以下のようになります。

$ sudo python hcsr04.py
154.683113098

なお、距離が近すぎても、遠すぎても超音波の反射が計測できないため計測できません。計測ができない場合は、ECHOの出力を途中で打ち切るようです。以下のような出力結果になります。

$ sudo python hcsr04.py
495.055675507

モジュールとして、450cm以上の距離は計測できないため、450cm以上の場合は無効値としておきましょう。


 

Pocket