M&Yが使っている超音波センサーは SRF-05 というものです。
なんで、これを選択したか!? というと、安かったから・・・
当時、超音波センサーは、結構な値段でした。
LEGO MINDSTORMS の超音波センサーは(確か)5,500円だし・・・
有名な PING))) も5,000円位していました。
安い超音波センサーを探していて見つけたのが SRF-05 で、当時は1,500円位でした。
ところが、最近、いくつかのチームから「SRF-05」について問合わせを受けました。
なんか、「SRFシリーズは、干渉に強い・・・」らしいです。
(本当にそうなの!?)
ということで、改めて、SRF-05のおさらいをしておこうかと・・・
SRF-05はDevantech社の超音波センサーです。
M&Yが、このセンサーを選択したのは、上にも書いたように単に安かったからです。
価格は11.49GBP(英ポンド)で、当時は1,500円くらいでした。(今は、円安なので、2,000円程度)
それと、最短検知距離が1cmだったから・・・
テクニカルシートはこちらです。
http://www.robot-electronics.co.uk/htm/srf05tech.htm
まあ、これを読めば、私が変な説明をする必要は無いですよね。(笑)
Arduinoとの接続は、3本で、5VとGNDと信号線、だけです。(Mode2の場合)
信号線1本で、入力と出力を切り替えて共用します。
プログラムは単純明快で・・・
int SRF05( )
{
int d;
pinMode( PORT , OUTPUT );
digitalWrite( PORT , HIGH );
delayMicroseconds(10);
digitalWrite( PORT , LOW);
pinMode( PORT , INPUT );
d = pulseIn( PORT , HIGH )/58;
return( d );
}
これで、PORT で指定したピンに信号線を接続したSRF-05で距離を測ります。
返す値は 1cm 単位になります。
まあ、これが普通だと思うのですが、これを実験していて・・・気が付いたのですが・・・
上のプログラムでは、1本の信号線を出力と入力に切り替えて使っています。
これを切り替えなくても、なんか動く(動いちゃう)みたいです。
ポートを入力に設定したままで
int SRF05( )
{
int d;
digitalWrite( PORT , HIGH );
delayMicroseconds(10);
digitalWrite( PORT , LOW);
d = pulseIn( PORT , HIGH )/58;
return( d );
}
を実行しても、普通に計測できます。(何で!?)
しかし、ポートを出力にしたままでは、計測できません。
まあ、ちゃんと、入力と出力を切り替えた方が、精神的にも良いと思います。(笑)