Re: The history of "M&Y"

Team "M&Y" and "花鳥風月"
the soliloquy of the father
毎日更新!

Arduinoねた その48 SRF-05続き

2014-01-11 | Arduinoねた

SRF-05 は、1cm~4mが検知できるそうです。

(まあ、本当に1cmを検知できるかっていうと、ちょっと疑問ですが・・・)


で、これは超音波センサーなので・・・

当たり前ですが、センサーが超音波を発して、何かに当たって反射して帰ってきた超音波をセンサーが受け取って検知します。

超音波を発してから受け取るまでに掛かった時間を計れば、距離が判る訳です。

ということは、近くに物があれば、すぐに「あったよ」と判断できるのですが・・・物が近くに無い場合は計測に時間が掛かることになります。


レスキューBでは、ロボットは迷路の中に居るので、前や横に壁が無いことは無いハズです。

ただ、いつもは10cm程度の近さにあるけど、数タイルの直線などがあれば100cmくらいの距離になることもあります。

でも、遠く離れた壁までの距離を測る必要はなく・・・

ロボットの居るタイルの前後左右に壁があるかを検知できれば、事足ります。

つまり、1mも2mも測る必要はなく、単に30cm程度を測れれば十分です。


どうもそんな時の為に、pulseIn( ) には、第3のパラメータが用意されています。

timeout(タイムアウト)までの時間で、単位はマイクロ秒です。

例えば、

  d = pulseIn( port , HIGH , 2000 ) / 58;

とすれば、超音波を発してから2000マイクロ秒(つまり2ミリ秒)経っても超音波が帰って来なかったら、そこで計測を終わりにします。

そうすると、対象物までの距離が30cm以下の場合は、その距離が返されます。 対処物が30cm以上離れていると、タイムアウトになり 「0」 が返されます。

(つまり、0が返されたら、対象物までの距離が30cm以上であると判断する)

こうすることで、ほんのちょっとだけ処理時間を短縮できるのですが・・・

タイムアウトになったからといって、発した超音波が消えるわけではなく、対象物に当たると、いずれ帰ってきます。 これをセンサーが間違って受けてしまうと、誤計測になってしまいます。

(これを、干渉というのでしょうか!?)

この方法を使う場合は、よく考えて、誤検知が起こらないように考慮する必要がありますねぇ。


ちなみに、音速は 340.29m/s(海面の場合) なので・・・

発した超音波が1m進むのに掛かる時間は、2.939ミリ秒になります。

対象物までの距離が4mの場合は、往復で8mあるので、23.509ミリ秒掛かることになります。

これを速いと見るか、遅いと見るか・・・

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする