2017-01-28 1 views
0

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.

Répondre

1

C'est parce que c'est ainsi que fonctionne le capteur d'écho à ultrasons. Vous lui envoyez une impulsion à la ligne GPIO_TRIGGER. Cela fait que le capteur commence à envoyer une brève impulsion sonore. Cependant, cela en soi prend du temps. Ensuite, il doit attendre jusqu'à ce qu'il ait reçu un écho de cette impulsion. La sortie du capteur devient haute quand a fini d'envoyer l'impulsion sonore, et il redevient bas quand il a fini de recevoir l'impulsion sonore. Le temps entre deux est le temps nécessaire pour que l'impulsion sonore atteigne un objet et soit réfléchie.