シャープの測距センサ(PSD, Position Sensing Device)は赤外線を使った距離センサです (入手先の例:秋月電子)。 測定範囲の違ういくつかのセンサが販売されています (GP2Y0A21YK: 10cm〜80cm, GP2Y0A02YK: 20cm〜150cm, GP2Y0A710K: 1m〜5.5m)。 電源電圧範囲は 4.5[V]〜5.5[V]ですので、5[V]動作のArduinoに 直接つないで使うことが出来ます。
このセンサは距離に対して反比例した電圧を出力します。測定範囲よりも近くでは電圧が下がりはじめるので注意します(より遠い距離と同じ電圧になってしまう)。
測距時に大きな電流が流れるので、センサの近くで、電源のプラスとマイナスの間に10[uF]程度の容量の電解コンデンサをつけます。
また秋月電子で販売されているGP2Y0A21YK, GP2Y0A02YKに付属のケーブルは、電源(プラス側)が黒になっていて、まぎらわしいので注意します(2013/11時点)。購入後ピンを入れ替えるといいでしょう(コネクタのピンを止めているプラスチックの爪を軽く持ち上げると抜ける)。
このスケッチではセンサの電圧出力をArduinoのA0ピンにつなぎます。 analogReadで読んだそのままの値と距離[cm]へ変換した値をシリアルへ出力します。 試すと分かりますが、正確な距離というよりは、おおざっぱな距離を知るためと思った方がよいと思います。 スケッチの中の値 12288 は、GP2Y0A02YK: 20cm〜150cmの場合の値で、データシートのグラフの値(L=30[cm]でE=2[V])から求めています:
k/L = E[V]k = L*E = 30[cm]*2[V] = 60[cm・V] analogReadの返す値をaとすると
a = E[V]/5[V]*1024, E[V] = a*5[V]/1024, L = k/E = k/(a*5/1024) = (k*1024/5)/a = (60*1024/5)/a = 12288/a距離の違うセンサを使うときは変更してください。また他の近似方法がいい場合もあると思います。
void setup() { Serial.begin(9600); while (!Serial) {} } void loop() { int l = analogRead(A0); int ll = l; ll = 12288/ll; Serial.print(l); Serial.print(" "); Serial.println(ll); delay(500); }