私の可愛い猫ちゃんを動かしていると、壁にぶつかっているのに方向転換をせず、更にぶつかる動作をすることがあります。障害物の検出には「超音波距離センサー HC-SR04(2~180cm)」を使っています。
超音波発信機から放出された超音波は障害物で反射(エコー)してセンサーで受信されます。音速は340m/Sとし戻るまでの時間を計測すれば障害物までの距離はその半分になります。ここで障害物がセンサーに対して90度であれば、ほぼ100%反射して戻ってきます。
でも実際の障害物は何時もセンサーに対して90度とは限りません。そこで、センサーの検出が角度をつけるとどうなるか実験して見ました。
角度を変えて行くとエコーのパルス幅は広がっていきます。実際よりも長い距離の様なエコーになります。更に角度を変えセンサーに0度、又は180度にするとエコーは其の先にある障害物の反射を返してきます。これが最大測定距離(180cm)を越えるとエコーは常時ハイ レベルになって、距離を縮めても其の状態から復帰しません。一旦電源をOFFする必用があります。これは仕様書に書かれています。
実際の走行状態では、この様な最大距離を越えるような状況が起きてしまいます。評価用の迷路を使えば避けられると思います、つまり、最大距離が何時も180cm以内であれば、エコーが常時High levelになることはありません。しかし、その様な迷路を使わず、適当な場所で動かすと最大測定距離を越えた時に、超音波センサーがエラーロックした状態になってしまいます。
プログラムでロック状態を監視し、それが起きた時は超音波センサーモジュールの電源を一旦OFFして再びONにする様にすれば避けることが出来るのではないかと思います。このHC-SR04の回路がどうなっているのか分かればもっといい方法があるかも、、、、。
あるいは、最大距離300cmもモジュールを使えばほぼOKなになるのではと思いますが、お値段が¥3,800と高価で考えてしまいます。
ネットで調べて見るとエコー出力がHighにロックしてしまう現象は 外でも在るようでその回避方法がでていましたので、早速やって見ましたがNGで状況は変わりません。状況変わらずと云う報告もありました。