2017-01-28 4 views
0

Ich versuche mit einem Ultraschallsensor den Abstand (D) vom Sensor (S) zu einem Hindernis (X) zu messen. Das Grundprinzip ist, dass ich einen Schallimpuls aussenden und es zurückbekomme, und ich nutze die Zeit, die es benötigt, um von S nach X und zurück (sprich: T) zu reisen, um den Abstand zu berechnen Formel: D = (V * T)/2. (V ist die Schallgeschwindigkeit in der Luft). Hier finden Sie einige Python-Code, um das gleiche zu erreichen:Messabstand mit Ultraschallsensoren in Raspberry Pi

#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 

Ich habe Schwierigkeiten zu verstehen, warum die Start- und Stoppzeit werden wie folgt berechnet. Für mich scheint die Startzeit die Zeit zu sein, "in der wir zuerst ein High-Signal bekommen" und die Stopp-Zeit ist die Zeit "wenn wir das High-Signal zuletzt bekommen", so dass sich ihre Differenz als Zeit herausstellen wird. " für die der Puls hoch war ", was ich denke, wird unabhängig von der Entfernung sein, da das Hoch jedes Mal für die gleiche Dauer gesendet worden wäre. Ich habe versucht, andere Quellen zu betrachten, und sie scheinen alle nur diese Zeit zu berücksichtigen, dh die Zeit, für die der Input für den ECHO-Sensor hoch war. Ich stimme jedoch nicht zu.

Es denken, dass Code wie folgt sein sollte:

# 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 

Es scheint mir, dass ich etwas offensichtlich fehle. Ich werde es schätzen, wenn mich jemand auf das hinweisen kann, was es ist.

Antwort

1

Dies ist, weil so der Ultraschall-Echo-Sensor arbeitet. Sie senden einen Impuls an die GPIO_TRIGGER Linie. Dadurch sendet der Sensor einen kurzen Schallimpuls. Das selbst braucht jedoch etwas Zeit. Dann muss es warten, bis es ein Echo dieses Impulses empfangen hat. Der Ausgang des Sensors geht hoch, wenn den Fertigschallimpuls gesendet hat, und es wird wieder niedrig, wenn den Schallimpuls empfangen hat. Die Zeit dazwischen ist die Zeit, die der Schallimpuls benötigt, um ein Objekt zu erreichen und zurückreflektiert zu werden.