2017-01-28 13 views
0

Я пытаюсь использовать ультразвуковой датчик для измерения расстояния (D) от датчика (S) до препятствия (X). Основной принцип заключается в том, что я собираюсь отправить импульс звука и получить его обратно, и используя время, необходимое для перехода от от S до X и обратно (скажем, T), я собираюсь рассчитать расстояние, используя следующие формула: D = (V * T)/2. (V - скорость звука в воздухе). Ниже некоторые питона код для достижения той же:Измерение расстояния с помощью ультразвуковых датчиков в малине 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 

Я с трудом понять, почему начала и время рассчитываются как это. Для меня кажется, что время начала - это время «когда мы впервые получаем высокий сигнал», а время остановки - это время «когда мы в последний раз получаем высокий сигнал», так что их различие выйдет на время », для которого импульс был высоким », который, как я думаю, будет независим от расстояния, так как максимум будет отправляться на одну и ту же продолжительность каждый раз. Я попытался взглянуть на другие источники, и все они, кажется, рассматривают это время, то есть время, для которого вход был высоким для датчика 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 

Мне кажется, что я что-то очевидное отсутствует. Буду признателен, если кто-то может указать мне, что это такое.

ответ

1

Это потому, что работает ультразвуковой датчик эха. Вы отправляете импульс на линию GPIO_TRIGGER. Это приводит к тому, что датчик начинает посылать короткий импульс звука. Однако это само по себе занимает некоторое время. Затем он должен ждать, пока он не получит эхо этого импульса. Выход датчика высок, когда он закончил передачу звукового импульса, и он снова опускается, когда он закончил получать звуковой импульс. Время между ними - это время, необходимое для того, чтобы звуковой импульс достиг некоторого объекта и отражался обратно.