J'essaie d'utiliser un capteur à ultrasons pour mesurer la distance (D) entre le capteur (S) et un obstacle (X). Le principe de base est que je vais envoyer une impulsion de son et la récupérer, et en utilisant le temps qu'il faut pour voyager de S à X et retour (disons, T), je vais calculer la distance en utilisant ce qui suit formule: D = (V * T)/2. (V est la vitesse du son dans l'air). Ce qui suit est un code python pour obtenir le même:Mesurer la distance à l'aide de capteurs à ultrasons dans la framboise 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
J'éprouve des difficultés à comprendre pourquoi le début et de fin sont calculées comme celui-ci. Pour moi, il semble que l'heure de début est l'heure «quand nous recevons un signal haut» et l'heure d'arrêt est l'heure «quand nous recevons le signal haut», de sorte que leur différence sera le moment » pour lequel le pouls était haut ", ce qui je pense sera indépendant de la distance puisque le haut aurait été envoyé pour la même durée chaque fois. J'ai essayé de regarder d'autres sources et elles semblent toutes considérer cette fois seulement, c'est-à-dire le moment où l'entrée était haute pour le capteur ECHO. Cependant, je ne suis pas d'accord.
Il pense que le code devrait ressembler à ceci:
# 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
Il me semble que je manque quelque chose d'évident. J'apprécierai si quelqu'un peut me montrer à ce que c'est.