micro:bit鉄道プロジェクト




◆STEAMとしての鉄道模型


「あつまれどうぶつの森」、流行ってますね(やってないけど)。
往年の「SimCity」や、「Minecraft」もそうですが、破綻なく街を設計する活動は、STEMの要素満載です。さらに「暮らしやすさ」という文化的な条件も含めると、これこそ教科横断、STEAMな教材に最適ですね(独断)。
ソフトウェアのバーチャルな街ならPC1台で完結して面倒がないのですが、段ボールやレゴで物理的なものを作ると、制作過程で算数・図工・社会・理科など様々な知識・技能を取り込むことができて、さらに効果的ですね。何より身体全体を使うのは楽しいですしね。
作った街に交通機関を取り入れると、これまたSTEAM色満載になります。ライントレースのロボットカーや信号機も楽しいですが、鉄道であれば、路線の設計やダイヤ通りに走らせるために、算数の知識・技能を駆使できることでしょう。

◆micro:bit紀元前のお話


この目的を叶えるため、我が国のmicro:bit紀元前である2016年、プラレールをArduinoでリモコン化するプロジェクトを行いました。
鉄道の模型にはNゲージはじめ色々なものがありますが、価格と入手性、敷設の容易さ、耐久性からしてプラレールは優れものです。幼児のおもちゃと侮ってはなりません。最近は造形も進歩していて、大きいお友達にもプラレーラーは沢山いますね。
この時点では、Arduino pro microとモータードライバ、Bluetoothモジュールを無理やり車体に押し込み、簡単にAndroidアプリが作れるMITのAppInventorでプログラマブルなBluetoothリモコンで解決しようとしました。簡単とは言っても、ハードソフトともそれなりに工数がかかるお話で、一応動くところまで作って力尽きてしまったのでした...

◆micro:bit鉄道の夜明け


その後、本邦にもmicro:bitの文明が開化し、スイッチサイエンスはもとより、秋葉原の千石や秋月で簡単に買えるようになりました。Amazonでも買えますね。micro:bitの良い点は沢山ありますが、無線の威力は大きいです。Bluetoothと同じ2.4GHzで独自のプロトコルを使い、論理的に複数のグループを作れたり、必要ならばチャンネルを変更できたり、出力を調節できたり、かなり高度な機能を子どもでも使えるようにしてくれました。
これを鉄道模型に応用すれば、簡単にリモコンでダイヤ通りに走行できそうです。しかもグループが分けられるので複数編成が可能です。これはすごい。
ということで、まず手動で速度が変えられる、リモコンプラレールを試作してみました。
micro:bitは車載側とリモコン側の2個必要です。車載側はプラレールのDCモーターを制御するため、モータードライバーなどが必要になりますが、手軽にFETスイッチを使うことにします。

◆車載側のハードウェア




micro:bit用のユニバーサル基板に必要な回路を作って、micro;bitとビスナットで接続しています。
モーターの制御は、なるべく改造をしないため、電池の接点に銅箔テープで絶縁物(クリアファイルの切れ端)をサンドイッチしたものを挟んでいます。電池の電圧を制御するという考え方ですね。
こんな回路になります。


Q1の2SK4017はスイッチング用のMOSパワーFETで、1個30円程度で入手できます。R1はリンギング防止用、R2は入力オープン時に動作を安定させるために入れます。値はそれほど厳密ではありません。
参考:FETの使い方ガイド(マルツオンライン)

ダイオードD1は、モーターが減速するときに発電機として働く逆起電力から、FETを保護するために入れておきます。
BT1はプラレールのモーター用の電池です。言わずもがなですが、micro:bitの電源は別に用意する必要があります。今回は単4電池2本を使用しています。

◆リモコン側のハードウェア


リモコンは、アナログ制御にしてみました。NゲージやHOゲージの鉄道模型のコントローラーのイメージですね。
可変抵抗器(いわゆるボリューム)をリモコン側のmicro:bitのアナログ入力にして、可変抵抗器の回転角度でプラレールのスピードを制御する方法です。ケースは100均の適当なものを使用しています。
micro:bitと可変抵抗器の接続は、たまたま手元にカードエッジコネクタがあったので使用していますが、P0〜P2の穴にビス・ナットで配線を固定してもOKです。

micro:bitとの接続は以下のようにします。可変抵抗の両端を3.3VとGNDに接続し、真ん中(摺動子)をP0~P2のどれかに接続します。可変抵抗器はBカーブ(変化が直線的)のもので10KΩ前後なら大丈夫でしょう。(適当)
GPIOにかかる電圧は、可変抵抗器の回転角に比例して0~3.3Vに変化します。これをmicro:bitのアナログ入力にすると、0〜1023の数値に変換してくれます。


◆ソフトウェアを作る

<リモコン側>


最初だけ、無線のグループと送信強度を設定します。





あとはGPIOの電圧を読み取って送信し続けるだけです。


<車載側>


最初だけ、無線のグループを設定します。





リモコンから送信されてくる数値を受信したら、そのまま
GPIOから出力します。

車載側のmicro:bitからはアナログで出力されます。micro:bitのアナログ出力は、電圧値が変わるわけではなく、3.3VがPWM(パルス幅変調)されています。0〜1023の数値に比例した幅で、断続的に電圧がON/OFFされるため、一定時間の平均をとると電圧値が変わったのと同じ効果があるというものです。


数値が340くらいのイメージ。
平均1/3程度の時間のあいだONになっている。





数値が680くらいのイメージ。
平均2/3程度の時間のあいだONになっている。

車載側のハードウェアのFETスイッチは、micro:bitのアナログ出力がONになっている時にモーターに電流を流します。断続的にモーターがON/OFFされるため、平均するとアナログ出力の数値に従って速度が変わることになります。
↓画像のクリックで動画が見られます



◆ポイントを制御する



変化のあるレイアウトを作るにはポイントが欠かせませんが、これもmicro:bitで遠隔操作できるようにしてしまいます。
簡単な方法は、上記の写真のように切り替えのレバーに穴をあけて、平行に取り付けたサーボで駆動します。
レバーのない自動ポイントは換骨奪胎して、針金でポイントを動かすように改造します。

◆Scratch3.0でプログラム制御する

計画的に列車を走らせるためには、車両の現在位置、出発・停車の制御、ポイントの制御が必要になります。
現在位置を知るには線路にセンサーを設置するのが一般的ですが、Scrartchのビデオモーションセンサーを利用すると、カメラ画像だけでコース全体の車両の位置を知ることができます。
チェックポイントに小さなスプライトを置いておき、そこを車両が通過したときのイベント「ビデオモーション>〇のとき」に、行いたい動作を定義します。

Scratchから車両やポイントなどのデバイスを制御するため、横川耕二さんの「micro:bit_more」を利用しています。
https://lab.yengawa.com/project/scratch-microbit-more/

これは標準のScratchのmicro:bit拡張機能をさらに強化したもので、Scratchlinkで接続したmicro:bitのGPIOを制御できます。つまりmicro:bitに接続しているモーターやサーボをScratchから遠隔操作できることになります。
ただし1つのmicro:bitしか制御できませんので、車両とポイントを同時に使用できません。

そこで2つのmicro:bitを使い、任務分担をすることにします。1つはコントロールセンターのmicro:bitです。同じ無線グループに設定した車両やポイントのmicro:bitに、車両の速度やポイントのサーボの角度など、具体的なデータを送信をします。

もう1つはmicro:bit_moreのファームウェアを書き込んだmicro:bitで、Scratchとのやり取りに専念します。
2つのmicro:bitはGPIOで接続していて、Scratchからは発車、ポイントの切り替えなどの制御に対応するGPIOにデジタル出力するだけです。コントロールセンターはGPIOの状態に従い車両などを制御します。
左がmicro:bit_more用のmicro:bitでScrartchから制御されます。
右がコントロールセンターで、双方がGPIOを介して接続されています。
コントロールセンターはmicro:bitの無線で車両やポイントを制御します。
↓クリックすると動画を再生します



◆複数の列車を制御する

コントロールセンター方式にすると、複数の車両を同時に制御できます。速度の信号に車両を区別するコードをつけて送信することで、車両は自分に宛てられた信号かどうかを判別できます。



車両2編成とポイント2つを使用する例
車両制御はP0,P1を、ポイント制御にはP2,P8を割り当てています。
↓クリックすると動画を再生します。


◆Scratchで手動運転のコントロールパネルを作る

自動制御は面白いですが、手動で鉄道模型の運転っぽい感覚を味わうために、Scratch3.0でコントロールパネルを作ってみます。
画面上のボタンのタッチで出発、停止、ポイントの切り替えができるようにします。

コードは単純で、スプライトのクリックで、上記の複数車両制御用のコントロールセンターに車両用、ポイント用の0,1の信号を送るだけです。
効果音として、出発には「Train Whitsle」停車には「Ship Bell」、ポイント切り替え時には「Door Closing」を使うと雰囲気が出るかもしれません。

◆Scratch Day信州 2020で展示しました

2020年9月20日、長野県上田市の上田市マルチメディア情報センターで開催された「Scratch Day信州 2020」で、micro:bit鉄道の手動コントロール版を展示しました。たくさんの子どもたちに触れて楽しんでいただけました。
↓画像のクリックで動画が見られます。


上田ケーブルビジョンで当日の様子が放映されました。

UVCレポート

http://www.ucv.co.jp/program/f202009/mm0922-3.html






To be continued.