2011年2月22日火曜日

距離センサーを考える


手元にある距離センサーを引っ張り出してみる。

左から "PING" "MAXSONAR EZ1" "SRF10" "GP2Y0A21YK"(ごちゃごちゃの基板についているやつ)
最初の3つは超音波、4番目は赤外線。

PING
超音波では一番ポピュラー。といっても以前はお手軽なのがこれしかなかったからだ。
ディスカバリーチャンネルの工作系番組でも時々見かける。
使い方はやや面倒で、発信トリガーを送ったらピンを入力に切り替えてパルスの長さを測る。
このパルス幅が音速での往復時間になる。
mbedならば、たぶん誰かが簡単に使えるライブラリを書いているだろうから簡単かもしれない。

遠い方は3m ぐらい、近い方は10cm ぐらいまで取れる。

このセンサーでハマるのは、なにも考えずにループでパルス幅をカウントしたりすると、
近い時にはループが速く回り、遠くでは遅くなる。
微分して速度を求めようとしたりするとトンチンカンなことになる。

まあ、障害物があったらよける程度の制御ではあまり難しいことを考えなくても大丈夫である。

MAXSONAR
PINGと同じだがスピーカーとマイクが兼用になっている。
アナログ(電圧)出力、シリアル出力、パルス出力があって、アナログでつなぐととても簡単。
電圧も3.3V 5V どちらでも良い。
ハマるポイントはPINGと同じなのだが、アナログ出力の場合気がつかないまま使える。

SRF10
これはI2C。 小さくて性能は上記2つに比べて少し良い。
といってももらったままお蔵になっていたので、使ったことはない。
あとでI2Cの勉強するときにやってみよう。

GP2Y0A21YK
これは赤外線センサーである。片方の目から赤外線を発して、もうひとつの目で受ける。
光の速度はあまりに速いのでこの程度のセンサーでは往復時間を測ることはできない。
このセンサーは、対象が近くにあるときと遠くにあるときで反射した赤外線の入射角が異なることを
利用している。
ゆえに、出力が線形ではなく離れると分解能が低下する。
大体 10cm~50cmが実用域なので、障害物よけなどに使える。

前述の超音波センサーは意外と感度がよく棒などでも拾えるが、こいつは仕組の関係で
面をセンスするのが得意である。

===========
一番簡単な、MAXSONARのアナログ入力でもやってみようかな。