2016年1月22日 星期五

Grovepi Ultrasonic Ranger 的詳細研究


這顆sensor 蠻好玩的... 它可以用超音波的量測方式...來測量在他前面的障礙物的距離....


然後它所提供的sample code非常簡單...

# GrovePi + Grove Ultrasonic Ranger
 
from grovepi import *
 
# Connect the Grove Ultrasonic Ranger to digital port D4
# SIG,NC,VCC,GND
 
ultrasonic_ranger = 4
 
while True:
    try:
        # Read distance value from Ultrasonic
        print ultrasonicRead(ultrasonic_ranger)
 
    except TypeError:
        print "Error"
    except IOError:
        print "Error"


他就直接呼叫  ultrasonicRead(port_num);

就可以得到距離值....用是很好用....不過以後要移植平台時...這樣就不行了

所以還是來研究一下他去怎麼實作的

從他的連結所下載的ultrasonic.zip來看

它提供了兩個function....

一種是 measure in centimeter.....
一種是 measure in inch

那來看看他的實作 ....

/*The measured distance from the range 0 to 400 Centimeters*/
void Ultrasonic::MeasureInCentimeters(void)
{
pinMode(_pin, OUTPUT);
digitalWrite(_pin, LOW);
delayMicroseconds(2);
digitalWrite(_pin, HIGH);
delayMicroseconds(5);
digitalWrite(_pin,LOW);
pinMode(_pin,INPUT);
duration = pulseIn(_pin,HIGH);
RangeInCentimeters = duration/29/2;
}

從這段code來看....

1.set low 2ms
2. set high 5ms
3.  然後set low之後...設成input mode
4.  接下來量取 ultrasonic 這次傳輸(拉high一段時間...再拉low)....level為high的時間為多少
5.   得到的答案就是   duration_time /29/2


   其實它的原理就是用超音波的速度*時間來得到 距離...由於時間是算來回的時間

  所以要除以2......

  音波的速度為 每秒 330公尺...這是一個大概值....以公式來說就是  331.5 + 0.6*溫度

   如果以室溫20度來說....速度大概就是  331.5*0.6*20 = 343 (m/s)

   從上段的code來看....  pulseIn 所回傳的單位是  微秒(10^-6)

   t*10^-6 * 343 /2*100 = t*0.0343/2 = t/29/2

  公式就是這樣來的....

 





Reference 1: http://www.seeedstudio.com/wiki/Grove_-_Ultrasonic_Ranger

Reference 2: http://www.seeedstudio.com/wiki/images/9/95/Ultrasonic.zip

Reference 3: https://developer.mbed.org/cookbook/Seeed-grove-ultrasonic-ranger

Reference 4: Make :感測器運用Arduino 和Raspberry Pi 感測的專題與實驗

沒有留言:

張貼留言