센서 (S)에서 장애물 (X)까지 거리 (D)를 측정하기 위해 초음파 센서를 사용하려고합니다. 기본 원리는 내가 소리의 펄스를 보내고 되돌려 받고, S에서 X까지 그리고 뒤로 (말하자면 T) 여행하는 데 걸리는 시간을 사용하여 다음과 같이 거리를 계산할 것입니다. 공식 : D = (V * T)/2. (V는 공기 중 소리의 속도). 다음은 동일을 달성하기 위해 몇 가지 파이썬 코드 :라즈베리 파이의 초음파 센서를 사용한 측정 거리
#Define GPIO to use on Pi
GPIO_TRIGGER = 23
GPIO_ECHO = 24
print "Ultrasonic Measurement"
# Set pins as output and input
GPIO.setup(GPIO_TRIGGER,GPIO.OUT) # Trigger
GPIO.setup(GPIO_ECHO,GPIO.IN) # Echo
# Set trigger to False (Low)
GPIO.output(GPIO_TRIGGER, False)
# Allow module to settle
time.sleep(0.5)
# Send 10us pulse to trigger
GPIO.output(GPIO_TRIGGER, True)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
start = time.time()
while GPIO.input(GPIO_ECHO)==0:
start = time.time()
while GPIO.input(GPIO_ECHO)==1:
stop = time.time()
# Calculate pulse length
elapsed = stop-start
# Distance pulse travelled in that time is time
# multiplied by the speed of sound (cm/s)
distance = elapsed * 34300
# That was the distance there and back so halve the value
distance = distance/2
내가 어려움을 겪고 시작과 중지 시간은 다음과 같이 계산하는 이유를 이해한다. 나에게 그것은 시작 시간이 "우리가 처음으로 높은 신호를 얻었을 때"이고 멈추는 시간이 "우리가 마지막으로 높은 신호를 얻었을 때"라는 것인데, 그 차이가 시간이 될 수 있도록 " 펄스가 높았다 "고 말했고, 매 시간마다 똑같은 시간 동안 최고가 보내지는 것처럼 거리의 독립성이 있다고 생각합니다. 나는 다른 출처를 살펴 보려고 노력했으며,이 모든 것은 단지 시간 만 고려한 것인데, 즉 입력이 ECHO 센서에서 높았던 시간입니다. 그러나 나는 동의하지 않습니다.
그것은 그 코드는 다음과 같이해야한다고 생각 :
# start time is time when we start sending the signal
start = time.time()
GPIO.output(GPIO_TRIGGER, True)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
while GPIO.input(GPIO_ECHO)==0:
pass
# stop time is the time when we first get a high on the output.
stop = time.time()
while GPIO.input(GPIO_ECHO)==1:
pass
# Calculate pulse length
elapsed = stop-start
그것은 내가 뭔가를 분명 실종 나에게 보인다. 나는 누군가가 나에게 그것이 무엇인지 가르쳐 주면 고마워 할 것이다.