2017-01-28 178 views
0

我試圖使用超聲波傳感器來測量到障礙物(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 

在我看來,我失去了一些東西明顯。如果有人能指出我是什麼,我會很感激。

回答

1

這是因爲,那是多麼的超聲波回波傳感器的工作原理。你發送一個脈衝到GPIO_TRIGGER線。這會導致傳感器開始發送短暫的聲音脈衝。但是,這本身需要一些時間。然後它必須等到它收到該脈衝的回聲。傳感器的輸出變爲高時,它具有完成發送聲脈衝,並且它變爲低電平再次當它具有完成接收聲音脈衝。中間時間是聲脈衝到達某個物體並被反射回來所花費的時間。