ロボゼロコントローラでNケージ(センサー編)
2013年1月21日


 前回ロボゼロのマイコンボードを使って転車台ポイントを動かしてみました。
 しかしNATOCが使えないので車両の位置が検知できなく自動運転のプログラムはタイマーを使ってタイミングで制御していました。
 ロボゼロのマイコンボードにはセンサー入力があってジャイロが赤外線距離センサーでロボゼロを制御する事ができます。

 TOMIXのTCSワンタッチセンサー(型番5558)というのを今回使いました。
 これはTOMIXの自動踏切や自動運転システムのセンサーと使用されるものでレールのDCフィーダの差し込み口に取付けられます。



 車両の車輪が上の金属部分に乗っかるとレールと通電して車両の通過を検知できる仕組みになっているようです。
 最初レールへの取り付け方が分からずうまく車両通過が拾えませんでした。



 試行錯誤の結果上のプラスチックの台座ごとレールの内側の接地部分に乗せれば完璧に拾えるようになりました。

 出力はフォトカプラーのオープンコレクターというネットの情報を頼りに実験をやってみます。
 フォトカプラーは2個あり列車の方向が分かるという事です。
 という事は3本の出力線のうち2本がこの出力で1本はGNDという事になります。
 このセンサーの接続方法を書いていたサイトがあったので真ん中の線がGRDで両端はそれぞれのフォトカプラーの出力という事が分かりました。

 適当なプルアップ抵抗をつないで5Vの電源を供給してテスターで出力の電圧を計ってみました。
 この時線路にはDCを供給しておく必要があります。
 何もしない場合は5Vとなります。
 ドライバーでセンサーの金属部分と線路を接触させると2V位に下がります。

 車両を通過させてみました。
 テスターの針は全然振れてくれません。
 車両が通過するのは一瞬なのでテスターでは検知できないのかも知れません。

 まずarduinoを使ってやってみます。



 センサーの出力端子の真ん中をのGNDに接続します。
 センサーの出力端子の両端をarduinoのA0(アナログ入力)に接続します。
 この入力端子に10kΩのプルアップ抵抗を接続します。
 プルアップ抵抗の先はarduinoの5V端子に接続します。

 2本のセンサーの出力端子は車両の進行方向別ですが今回は進行方向の検知は要らないのでどちらの進行方向でも検出できるように両方の出力をつないでおきます。
 なお最初は抵抗の値が分からずこの時点では1kΩのものを使っていたのですが後で分かったのですが線路に供給するDC電源が低いと検出できないようです。

 arduinoのスケッチはこちらになります。
 車両がセンサーを通過すると2秒間arduinoのLEDが点灯します。
 arduinoのアナログデータの値は0〜1023ですがセンサーがオープンの状態でも1023とはならないようで幅をもたせて1000以上としました。

 なおarduinoのデジタル入力には内臓しているプルアップ抵抗を使える機能があるのでセンサーの出力を直接arduinoのデジタル入力につないでやってみたのですがセンサーを通過してもLOWレベルと認識されず失敗しました。


 arduinoで検出できる事が分かったので今度はいよいよロボゼロのマイコンボードへの接続です。



 配線は基本的にarduinoと同じです。
 センサーの電源はサーボの電源から取ります。(右写真下の茶色と赤のリード線)
 センサーはロボゼロのジャイロセンサーを接続する5PINのコネクターに接続します。
 今回使ったアナログ端子はロボゼロのオプションで赤外線距離センサーの中距離センサーの入力値を接続する端子です。
 ボード写真左のコネクタの上から2番目(4番端子)がそうです
 他のアナログ端子も使えますが5PINのコネクターハウジングが余っていたのと赤外線距離センサーのプログラムを作っているのでこの端子にしました。

 なお5PINのコネクターは下記の材料で作成できます。
 リセプタクルハウジング,SHR-05V-S-B
 ワイヤアセンブリ,SH3-SS5-28150

 まずは簡単なプログラムで車両の通過をチェックします。
 車両が通過するとBEEP音を鳴らします。
 接続したアナログデータのポートは3なのでINPUTADC(3)でデータが取得できます。
 なおロボゼロのマイコンボードのアナログ取得値は0〜255ですがオープンの場合、最高値の255が取得されるようです。

 最初はプルアップ抵抗を1kΩにしていたため車両を低速にした場合、センサーが反応しませんでした。
 下記の動画でも分かるように10kΩにしたらて低速でもちゃんと反応するようになりました。
 低速の場合前後の車輪にセンサーが反応するため反応後は1秒待たせています。
 なお客車の車輪でも反応する場合があるので長い編成の場合はセンサーが反応する間隔を空ける必要があります。

 次にレイアウトの制御と組わせて自動運転をやってみます。
 サーボで車両ポイントの制御を行う方法はそれぞれリンクの記事を参考にしてください。

 最初にポイントを切り替えて次にレイアウトの制御と組わせて自動運転をやってみます。



 まずポイントを切り替えて車両を左の線路の外側と内側を交互に走らせます。
 ポイントを同時に切り替えた場合、外側と内側のどちらか一方にしか電源は供給されないので車両は右の本線にいる時に以外に切り替えると停止してしまいます。
 そこでセンサーを本線の中央に設置としてここを通過した時にポイントを両方切り替えます。

 ロボゼロのプログラムはこちらです。
 センサーとポイントとの間隔が短いためポイントの切り替えが間に合わないかと心配していましたがかなりスピードを出していてもちゃんと切替わります。
 またセンサーを本線の半分の位置に置いているため両方の進行方向に対応できます。



 次にセンサーを引込線に設置して車両を引き込み線で停止させてみます。
 ロボゼロのプログラムはこちらです。
 開始5秒後に引込線のポイントを切り替えてセンサーで停止させて5秒後出発します。
 脱線しないよう車両が通過する前に引込線のポイントを元に戻します。


 実際に動作させた動画です。

     

 実験を行う前はロボゼロのコントロールボードで車両の通過をチェックできるか心配でした。
 というのはマイコンのチェックサイクルが間に合わず高速で運行した場合、車両の追加を見落とすのではないかと思っていました。
 しかしarduino、ロボゼロのコントロールボード共かなり高速で走行させてもほとんど見落とす事はありませんでした。
 今回はセンサーをひとつだけで実験をしましたがまだアナログポートは空いているので複数のセンサーを付ければ面白い動きが制御できると思います。
 なおロボゼロのコントロールボードをロボゼロ以外に使用していますのであくまでも自己責任という事でお願いします。

目次に戻る