プラレールを自動制御してみた

2 min read
Table of Contents

前々からプラレールを題材にしていろいろと改造をしてきました

プラレールにマイコンいれてみた

「遠隔操作の次は自動制御だ!」ということでプラレールを自動制御するものを作ってみました

構想

自動制御といってもポイントレールやストップレールを改造して終わりじゃ面白くないと思いました

「もっとプラレールらしく見た人があっと驚くようなことをしたい」と考えていました

その結果、立体交差にレールを敷き、列車も複数走らせることにしました

この状況で制御できたら面白くなるだろうということで進めていきました

その結果

一ヶ月という長い歳月をかけてやっと完成しました

動画をYOUTUBEにアップロードしているので見てください

https://www.youtube.com/watch?v=uAb04AHpw5w

3階まで立体交差させ、列車を3台(北陸新幹線・ドクターイエロー・阪急電鉄)走行させています

なるべくぶつからないようにマイコンで制御しています

また、動画でもある通りNT金沢 2018に展示していました

動画よりも詳しい解説

ポイントレールの改造

ポイントレールはサーボモータで制御をしています

紐でポイントレールを引っ張って分岐をさせている仕組みです

紐を緩めるとポイントがもとに戻る(直線)になります

仕掛けとしては裏にペットボトルの切れ端をいれてバネみたいにしています

この仕掛は下記の動画を参考にしました

https://www.youtube.com/watch?v=RKAv57D8GHg

また、ポイントレールにサーボモータを固定するためのモノをCADで作成しました

作成後は3Dプリンタで制作をしました

二階以上のポイントレールにつける用と1階のポイントレールにつける用の2つを作りました

GitHubにSTLをアップロードしたのでほしいという人は適宜ダウンロードしてください

高架用のサーボモーターを固定するもの

https://github.com/Momijinn/PlasticRail\_Parts/blob/master/fixing\_servo\_ver1/fixing\_servo\_ver1.stl

地上用のサーボモータを固定するもの

https://github.com/Momijinn/PlasticRail\_Parts/blob/master/fixing\_servo\_ver2/fixing\_servo\_ver2.stl

ストップレールの改造

ストップレールもサーボモータで制御しています

黄色の取っ手部分にサーボをつけることで回転させると停止や進行を制御しています

車種の識別

本システムには”かがやき”と”ドクターイエロー”と”阪急電鉄”が動いています

かがやきは3階を回っています

ドクターイエローは1→2→3→1→2→3・・と階層を順々に回っています

阪急電鉄は1階を回っています

どの車両をどこへ走らせるかを制御しなければなりません

そこでカラーセンサー(TCS34725)を使ってこれらの車両の識別を行っています

今回使用したカラーセンサは白色LED付きなのでより車両の色が取りやすくなっています(後述のプログラム作成でかなり重要なポイントになります)

ノイズが入らないようにトンネルをつくり、その中で車両の色を識別させています

車両の存在を検知

動画を見て「どうやって車両を自動でストップさせているのだろう」と思った人がいると思います

ストップレールの手前付近に光センサ(CdSセル)をレールの下に埋め込んでいるためです

これにより光センサ付きレールを通ったら光センサが反応して列車が通ったとしているためです

今回制作したシステムは駅にきたら車両は必ずストップさせています

したがって車種の区別は必要なく、車両がくるか来ないかの識別だけです

プログラムの動作とか通信関係

通信方法はWebSocketをつかっています

サーバーを立ててそこでクライアントを集中管理しています

クライアントにはESP8266を使用しました

スイッチサイエンス製の開発ボードを採用しています

ESP8266は小型で簡単に無線通信ができるためいつもお世話になってます

クライアント台数は6台です

センサ収集用クライアント(センサクライアント)が2台

サーボモータを動かすクライアント(アクチュエータークライアント)が4台

という体制です

サーバーはPythonで書きました

pythonでWebSocketサーバーを作る方法は下記を参考にしてください

https://autumn-color.com/blog/tech/2017/06/2017-06-29

制御の流れとしては、

  1. センサクライアントがセンサで車両を検知
  2. センサクライアントはサーバーへソケットを送信
  3. 受信したソケットからサーバーはアクチュエータークライアントへサーボを動かすようにクライアントを送信
  4. 一定間隔経過後、サーバーは3で動かしていたサーボを元に戻すようにアクチュエータークライアントへソケットを送信

となっています

流れだけをみると簡単そうに見えますが実際はかなり苦労してます

センサクライアントではどのような値になったらサーバーへソケットを送信するかを作り込みました

例えばカラーセンサでは二度センシングを行い、ルーメン(光の明るさ)が大きい方でRGBを計測しています

ルーメンが大きければ光の反射が大きい=カラーセンサの近くに車両がいることになります

そのため近くにいれば車両の色を識別の精度を高めることができます

RGB値がとれたところで次は色から具体的な車両の識別です

北陸新幹線は白でドクターイエローは黄色で阪急電鉄は小豆色(赤に黒を加えたような色)です

  • RGB3つがすべて高ければ北陸新幹線
  • RGBのうちRとGの2つが高ければドクターイエロー
  • RGB値すべてが低く、ルーメンが電車がいない場合よりやや高めの場合は阪急電鉄

としました

阪急電鉄だけで特殊なのは阪急電鉄のボディが黒色に近いためです

黒色だと光を反射しにくくなります(吸収する)

これを利用してルーメンが電車がいないときよりやや高めの場合は阪急電鉄としています

また、黒色に近いということでRGB値が他の二台より小さい場合も阪急電鉄としました

サーバーでは複数のセンサの組み合わせや車両がどこにストップしているかでアクチュエータクライアントにソケットを送信するかを決めています

車両が3台同時に動くだけでなく立体交差での制御なので無数の条件分岐を考えなくてはなりません

例えば駅で車両を止めるときです

一両の車両が来ればポイントレールを上げてストップレールを上げます

その後、センサクライアントから通り終わったというソケットをもらうとポイントレールをもとに戻します

サーバー側で一定時間経過したらストップレールを下げて車両を発車させています

上記は一両だけの処理手順ですが、停止中に車両が来た場合の処理、二両停止している状態で後発から車両を着た場合の処理、二台の車両が停止し発車時にぶつからないようにする処理etc…などいろんな場合に対する対策を考えなければなりません

※画質を下げています

お遊び要素

お遊び要素としてWebアプリも作ってみました

ブラウザ上でどこのストップレールやポイントレールが動いていることを確認することができます

またブラウザ上でもレールを制御することができます

本当はデバッグ用で作ったのですがなんだかんだできてしまいました

※画質を下げています

自作したパーツ

この立体交差プラレールをつくるには公式にでているものだけではできませんでした

レールの長さが長すぎたり、高架ブロックがおおきすぎて収まらない等の問題がありました

これらの問題を解決するために自分で部品をCADで作り、3Dプリンタで出力しました

CADはTinkercadという無料のもので作りました

https://www.tinkercad.com/

一部抜粋

作ったものをいろいろとGitHubにアップロードしているので使ってみてください

https://github.com/Momijinn/PlasticRail\_Parts

カラーセンサーを入れるトンネルや二階から一階へ行くトンネルはダンボールでそれとなくつくりました

トンネルはノリで作ったので設計図はありません

製作にかかったもの

  • 製作にかかった時間
    • 一ヶ月
  • 製作者
    • すべてわたし(レール設計からプログラム開発、パーツの作成等)
  • その他
    • 現実の電車のダイヤルを考えるすごく大変だということがわかった