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
이렇게 해서 거리를 구한 것이다.
센서의 원리와 매뉴얼을 먼저 참고 했어야 했다.
'RaspberryPi' 카테고리의 다른 글
라즈비안 스트레치 에서 kodi 설치(인스톨)하기, 한글설정하기 (0) | 2017.06.30 |
---|---|
아두이노 I2C 와 SPI 통신은 무엇이 다른가요? -퍼온글 (0) | 2017.05.17 |
구글 클라우드 비전 API ... 놀랍다 (0) | 2017.04.12 |
처음으로 만든 브레드보드 이용 LED 등 켜기 (0) | 2017.04.12 |
파이썬의 일반 용어들 (0) | 2017.04.07 |