Я пытаюсь использовать ультразвуковой датчик для измерения расстояния (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
Мне кажется, что я что-то очевидное отсутствует. Буду признателен, если кто-то может указать мне, что это такое.