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.