본문 바로가기
RaspberryPi

초음파 센서의 원리와 파이썬 프로그램

by 미사사 고라쿠 2017. 5. 2.

import RPi.GPIO as gpio
import time

gpio.setmode(gpio.BOARD)

trig = 15
echo = 16

gpio.setup(trig, gpio.OUT, initial=gpio.LOW)
gpio.setup(echo, gpio.IN)

try :
        while True :
                gpio.output(trig, False)
                time.sleep(0.5)
                gpio.output(trig, True)
                time.sleep(0.00001)
                gpio.output(trig, False)

                while gpio.input(echo) == 0 :
                        start_time = time.time()

                while gpio.input(echo) == 1 :
                        end_time = time.time()

                distance = (end_time - start_time) * 17000
                print ' dist = ', distance

except KeyboardInterrupt :
        gpio.cleanup()
        print ' == '
        print ' end of progran '

================================================

아래의 코딩이 훨씬 이해하기 쉽다.

왜냐면 의미를 잘 살린 알고리듬이기 때문이다.

================================================
import time

gpio.setmode(gpio.BOARD)

trig = 15
echo = 16

gpio.setup(trig, gpio.OUT,initial=gpio.LOW)
gpio.setup(echo, gpio.IN)

try :

        while True :
                gpio.output(trig,False)
                time.sleep(0.5)
                gpio.output(trig, True)
                time.sleep(0.000001)
                gpio.output(trig, False)

                while True :
                        if gpio.input(echo) == 0 :
                                pass
                        else :
                                start_time = time.time()
                                break
                while True :
                        if gpio.input(echo) == 1 :
                                pass
                        else :
                                end_time = time.time()
                                break

                distance = (end_time - start_time) * 17000
                print ' Dist = ', distance

except :
        gpio.cleanup()
        print ' '
        print ' == Good Bye == '
====


The timing diagram of HCSR04


is shown. To start measurement, Trig of SR04 must receive


a pulse of high (5V) for at least 10us, this will initiate the sensor will transmit out 8 cycle of


ultrasonic burst at 40kHz and wait for the reflected ultrasonic burst. When the sensor detected


ultrasonic from receiver, it will set the Echo pin to high (5V) and delay for a period (width)


which proportion to distance. To obtain the distance, measure the width (Ton) of Echo pin.


Time = Width of Echo pulse, in uS (micro second)


Distance in centimeters = Time / 58


Distance in inches = Time / 148


Or you can utilize the speed of sound, which is 340m/s


 


hc-sr04 초음파 센서의 기본 측정법은

위 매뉴얼을 확인해야 한다.


위 매뉴얼에서 얘기하는 것은

음파가 사되어지는 물체와의 거리에 따라 echo back의 진폭에 비례한다. 라고 되어 있습니다.


즉, 멀면 진폭이 크고, 작으면 진폭이 작다  이런 것이다.


나는 잘못된 생각 때문에 많은 시간을 버려야 했다.

거리는 초음파를 쏜 시간과 초음파가 도착한 시간의 차이에 비례한다 라고 생각했다.

이는 대부분의 초음파 원리를 이렇게 설명하기 때문에 빚어진 것이다.


맞는 말이지만

HC-SR04는 거리를 Pulse Width 에 비례하여 측정하게 되어 있음을 잊어서는 안된다.


위 코딩의 내용 중에서


                while gpio.input(echo) == 0 :
                        start_time = time.time()

                while gpio.input(echo) == 1 :
                        end_time = time.time()

의 의미는


처음 초음파의 echo  input을 받은 시간 = start_time

echo input 이 끝나는 시점을 end_time


이렇게 해서 거리를 구한 것이다.


센서의 원리와 매뉴얼을 먼저 참고 했어야 했다.