我試圖使用超聲波傳感器來測量到障礙物(X)從傳感器(S)的距離(d),使用超聲傳感器測量距離。其基本原理是,我要發出聲脈衝和接收回來,並使用它需要旅行從 s到X和背面(比如,T)的時候,我會用計算距離以下公式: D =(V * T)/ 2。 (V是空氣中聲音的速度)。 以下是一些Python代碼來實現相同的:在覆盆子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
在我看來,我失去了一些東西明顯。如果有人能指出我是什麼,我會很感激。