RaspberryPiで距離測定

・超音波距離センサーHC-SR04
 配線を
  VCCーー5V
  Trigーー11(GPIO0)
  Echoーー500オームーー1KオームーーGND
            |ーーーーーーー 13(GPIO2) 5Vを1:2で分けて 3.3Vに
  GNDーーGND

・仕様
 (仕様は販売元であるスイッチサイエンスから拝借)

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

・pythonで記載すると

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
import sys
TRIG = 11
ECHO = 13

def reading():  
     GPIO.setwarnings(False)  # GPIO.cleanup()をせずに終わっている時のエラーを未表示
     GPIO.setmode(GPIO.BOARD)
        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)    #トリガ端子を10us以上High
        GPIO.output(TRIG, False)
   signaloff =time.time()          
        while GPIO.input(ECHO) == 0: #送るときの時間
           signaloff = time.time()
        
        signalon= time.time()
        while GPIO.input(ECHO) == 1: #受信すると、出力端子がHigh
           signalon = time.time()
        timepassed = signalon - signaloff
        distance = timepassed * 340 / 2 *100
  GPIO.cleanup() 
        return distance
       
 
       
if __name__ == '__main__':

    try:
        while True:
            data = reading()
            if data >= 480.0:
                pass
            else:
                print (data)
                time.sleep(3)

    except KeyboardInterrupt:
        sys.exit(0)

・機器不良?
 初回に while GPIO.input(ECHO) == 0が聞いていない時があるようである

・シャープの測距モジュールGP2Yで測定
 付属のケーブルの色とピン配置が違っているので注意
 1信号 2GND 3Vcc(5v)に接続

 あとはADコンバータの信号線に接続するだけでOK

カテゴリー iot