ロボゼロに「赤外線距離センサー」を付けてみました
2012年12月6日
2012年12月8日改訂


 前回のジャイロと共に購入したセンサーラックと赤外線距離センサーを取り付けました。
 配布されたCDに取扱説明書が収録されているのでそれを参考にセンサーラックを組み立てて赤外線距離センサーを取り付けましたをロボゼロ本体に取り付けます。

 ラックの組み立てや取り付けはそれほど難しい作業ではありませんがひとつ厄介な作業があります。
 中距離用センサーのデータケーブルをジャイロのコネクターに接続するためにジャイロのコネクターハウジングに挿入する必要があります。
 慣れていいればそれほど難しい作業じゃないと思いますが、非常に細かい作業でちゃんとハウジングに入っていかずケーブルの金属部がコネクターの外に出たままでした。
 無理矢理押し込んだりしていたのでちゃんとセットされていなかったようです。
 またこれが私のロボゼロ史上最大の悲劇につながりました。
 後で分かったのですがこの部分がちゃんと通電していなかったため長距離センサーの値がほとんど一定でちゃんとデータが拾えていませんでした。

 今回のロボゼロはあまり電子基板の配線作業をやっていない方もされているのでケーブルは最初からコネクターハウジングに入れておいて距離センサーのケーブルは別途外付けのコネクターで接続するようにして欲しかったと思います。
 センサーを購入しない方にとっては無駄なパーツかも知れませんがジャイロ自体、通常のものようり高価なのでこれくらいのコスト増は許されると思います。
 またジャイロを付けない方もハウジングだけ提供するのではなくコネクター付きのケーブルが付いたものを提供して頂いたら良かったと思います。



 センサーラックが邪魔をして電源スイッチやDIPスイッチが操作しずらくなりました。
 特にSDカードは指で取り出せなくなってピンセットかラジオペンチが必要になりました。
 センサーを使わない時はセンサーラックは取り外す事になるでしょう。

 後日、同じアセンブリケーブルを取り寄せて本格的に直しました。
 詳しくはこちらを参照してください。

 センサーラックの取り付ける位置を間違えていました。(上の写真は修正後のものです)
 ロボゼロの背中の一番奥のネジ穴に付けていましたが、正しくはそれより20mm手前のネジ穴でした。
 センサーがリモコンの真上にあったためセンサーの赤外線を拾いやすくなっていたのだと思います。
 正しい位置にしたら干渉が少なくなりました。


 組み立てが終わったのでとりあえずCDに入っているサンプルプログラムを動かしてみました。
 サンプルプログラムはサンプルプログラムというフォルダーにレーダー1.TXT、レーダー2.TXT、障害物探知歩行.TXTが入っています。
 レーダー1と2はロボゼロの腰を回転させて周りの障害物までの距離を測定して一番近い方向に振り向かせます。
 障害物探知歩行はロボゼロを数歩歩かせて前方に障害物がある場合は横に移動して障害物を避けて進ませるというものです。
 これらを適当なプログラム番号に転送して動かしてみました。
 赤外線センサーを付けてから赤外線リモコンの受信エラーが多発するようになりました。
 どうも赤外線センサーが発する赤外線をリモコンのデータとして拾っているようです。
 リモコンのコードと一致しないので誤動作は起こらないのですが停止ボタンのように動作の途中で入れる命令はセンサーのデータに変えられて読みこぼす事があるようです。

 リモコンの問題は置いておいてサンプルプログラムは一応それなりに動きますが何か少し変です。
 短距離センサー、中距離センサー共にちゃんと働いているのか分からないのでテスト用プログラムを作成しました。
 一応参考のためにソースコードを掲載しておきます。

  sensor_test.TXT

 このプログラムは赤外線リモコンの数字ボタンでセンサーに対する値を入れてAまたはBボタンを押すとロボゼロは前進して入れた数字に応じてロボゼロを停止させます。
 Aが短距離用センサーでBが中距離用センサーで測定します。
 停止した後、数字ボタン入力から繰り返す事ができます。
 数字ボタンの代わりに●ボタンを押すとプログラムが終了してメインプログラムに戻ります。
 数字は距離に応じた電圧の値を0〜255に変換した値で大きいほど近くで止まります。
 有効な数字は短距離用センサーが20(80cm)〜158(8cm)で中距離用センサーが20(150cm)〜158(15cm)です。
 なお前述の赤外線が干渉する問題で数字を打ち込む時にエラーブザーが鳴るかも知れませんが同じボタンをもう一度押して下さい。

 このプログラムを動かして分かったのですが中距離用センサー(Bボタン)でやった時、必ず最初で止まってしまいました。
 やはりジャイロのコネクターハウジングに差し込んだケーブルからちゃんとデータが拾えていなかったようです。

 そんな事でこの修理作業をやっている時にに悲劇がやってきました。
 ロボゼロのコンピュータ基板の電源が入りません。
 ケーブルを全部外したのですがLEDが点灯しません。
 以前Nゲージのパワーパックは電源のレギュレーターを交換して復活させた事があります。
 基板の裏にレギュレーターらしきものが2個付いていますが共に電圧は3.8Vと5.2Vが出ており壊れていないようです。
 またサーボに対する電圧はちゃんと5Vが供給されているようです。

 原因がそれより先だとすると自力で直す自信がありません。  おしなしくデアゴスティーニにバックナンバー(41号)を注文しました。
 届くまで作業はストップです。

 バックナンバーは3日位で届きました。
 無事ロボゼロは復活して先日作ったテストプログラムも動作する事を確認しました。
 ロボゼロが動かない間、距離センサー用のプログラムを作っていました。(ロボゼロが動かないのでデバッグはできません)。
 今回作ったプログラムは以前作った電卓プログラムを応用してロボゼロに測定結果を喋らせるものです。
 距離センサーから取得できるのは電圧の値なので距離に変換する必要があります。
 電圧と距離の関係は赤外線距離センサーの取扱い説明書にそれぞれのデータシートが記載されています。
 このグラフを元に変換アルゴリズムを作ってみます。
 グラフは微分関数?のように見えますが関数を解けば距離は求められると思いますが、違った方法でやってみました。(ちょっと微分積分から遠ざかっているもので^^;)
 データシートのグラフに対する近似直線を求めてそれで計算します。
 電圧を0.5V区間で分けそれぞれの区間の傾きを求めてました。
 その直線を元のグラフに重ねると下記のようになります。



 センサー自体それほど精度は高いと思われませんのでこれくらいで妥協する事にしました。
 興味のある方はちゃんとした数式を求めて計算してみてください。

 今回は音声をサウンドマージツールでプログラムと合体させました。
 下記のファイルを解凍したものをロボゼロのSDカードに直接転送すれば動かす事ができます。

  13SCR.zip

 ファイル名がファイル番号13になっていますので赤外線リモコンの1ボタンで起動します。
 なおファイル番号を適当に変えて(ファイル名を変更)もメインプログラムから呼び出せば音声もちゃんと出力されるはずです。

 操作方法は赤外線リモコンのAボタンまたはBボタンを押すと距離測定を開始して結果を音声で知らせてくれます。
 Aが短距離用センサーでBが中距離用センサーです。
 付加機能として▲ボタンを押すとロボゼロが数歩前進して止まります。(本当はリモコンで停止させたかったのですが前述の赤外線の干渉でうまくいきませんでした)
 これらの操作は繰り返す事ができます。
 ●ボタンを押すとプログラムが終了してメインプログラムに戻ります。

 ソースプログラムや音声ファイルは下記のファイルから解凍できます。

  distance_sensor.zip

 音声ファイル(電卓と共用)は18SCR.TXT、csvファイルは音声ファイルの開始位置と長さが記載されています。



 実際にプログラムを動かした時の動画です。

     

 センサーのノイズとロボゼロのスピーカーが小さいため数字は聞き取りづらくなっています。
 短距離用センサーと中距離用センサーの値に多少のずれがありますが15cm〜100cm位で計測した場合はまずまずの値だと思います。
 私のように中距離用センサーのケーブルの接続がうまくできていない事もありますので一度試してみてはいかがでしょう。
 なお今回行ったロボゼロのSDカードの書き換えは、ロボゼロ本体への影響を伴うのであくまでも自己責任という事でお願いします。

目次に戻る