見出し画像

電車でGo!コントローラ+ラズパイpicoでNゲージを動かす話(プレステ版1ハンドル・2ハンドル対応)

ちょうど1ヶ月ほど前になるのですが、電車でGo!コントローラを使って鉄道模型を動かす話を書きました。

今回は、そのアップデート版です。
内容としては、前回がセガサターン版の中身を分解(というか、配線を直接引き出し)してRaspberry Pi picoに繋いだものでしたが、今回はプレステ版のコントローラを接続したものになります。

ただ、そのまま繋げるのでは面白くないので、以下のことを目標にしました。
1.プレイステーションのコントローラとしての機能を残すこと
2.1ハンドル/2ハンドルのどちらのコントローラも使えること
3.コントローラのボタンを使うこと

プレステのコントローラについてですが、実はこれは、よくロボコンでロボットの操作に使われることなどもあって、コントローラの端子と信号については、すごく丁寧に解説をしてくれている方がいまして その辺りの理解から進めていきました。

まずは、プレステのアナログコントローラ(PS2のdualshock2)をUSBに接続する治具をAmazonで購入、入手後すぐに分解し、PSコントローラをつなぐ部分を取り出し、本体代わりに使うマイコン(今回はRaspberry Pi pico)との接続に使います。こうしておけば、コントローラ側に手を加えることがないので、「1.プレイステーションのコントローラとしての機能を残すこと」という条件はクリアです。(もっとも今更PS2で「電車でGo!」のソフトを遊ぶかと言われれば微妙なのですが)

あと、マイコンを使って実装する方にヒントになるかと思いますが、SPI通信がわかれば大丈夫だと思います。(主に参考にしたサイト
正直、このSPI通信の成功までに、日数の半分を費やした、という感じですね。(実をいうと、マイコン側もpicoのように40も端子を使わないので、中国製の14pinほどのものを使おうとしたのですが、色々ドツボにハマったので、無難にpicoに戻しました)
SPIの通信ができて、実際のコントローラの挙動と、それに伴って変化する信号を解析するまでで、2~3日。
そこまでできれば、あとは例によってマスコン・ブレーキの状態による模型の動作なので、そこまで行けばそんなに難しくありません。

次の「2.1ハンドル/2ハンドルのどちらのコントローラも使えること」ですが、これは意外なことに、コントローラを差し替えるだけで実現できてしまいました。
SPI通信の中にコントローラの種類を識別する信号があったので、1ハンドルと2ハンドルを別物として識別するものと思っていたのですが、特に両者で識別するものはなく、例えば1ハンドルでマスコンの信号として来ているものは、2ハンドルのマスコンの信号としても来るので(ブレーキも同じく)結論から言えば「コネクタにさすコントローラを差し替えるだけで同じ動きをする」というものでした。
これは、次の「3.コントローラのボタンを使うこと」というところにも関係してくるのですが「電車でGo!」コントローラには、通常のコントローラ同様に「SELECT」「START」ボタンもあるのですが、そういうボタン類も(本体側から見たときに)1ハンドル/2ハンドルどちらも全く同じように振る舞います。(もっと言えば普通のコントローラの「SELECT」「START」も同じです)

そして「3.コントローラのボタンを使うこと」についてですが、せっかくボタンがあるなら使おう、ということで、模型が停止中に(正確にはハンドルが「非常停止」状態にあるときに)「SELECT」ボタンを押下すると、進行方向が反転する、という機能を追加しました。
前回のセガサターン版では、配線をむき出しにしてマイコン接続したため、模型の動きを反転させるためには、電気的に反転させるため、マイコンの出力から線路までに間にDIPスイッチを噛まして、そのスイッチで反転させるというアナログな手法を使っていたのですが、今回はその辺りをマイコンで反転させることにしました。
他にも「START」ボタンや「A」「B」「C」というボタンもあるので、なにか機能を追加してもいいかも知れません(他にやっている方の例では、模型の加速度やブレーキ時の減速の曲線を、それぞれのボタンを押すことで切り替える(例えば動きの特性をSLっぽい動きとか電車っぽい動きに切り替える)ということをしている方がいました)

というわけで、雑作業ですが、動画です。
今回のモデルは、大阪メトロの千日前線です。鉄橋を渡る千日前線というシュールな映像が見えるのは、なかなかレアだと思っています。(そもそもこの製品持っている人、他に遭遇したことないのですが)
加速・減速ともに急発進・急減速なので調整が必要ですね。。。(picoの中の実装はMicroPythonです)


今回は鉄道模型+「電車でGo!」コントローラというのが目的でしたのこれでいいのですが、PS2コントローラの信号でマイコンとSPI通信、というところが勉強になったのと、やろうと思えば、ノーマルなコントローラやアナログスティック、ネジコンなどで鉄道模型を動かしたり、「電車でGo!」コントローラからマイコン操作もできることになります。(ネジコンで模型操作はちょっと面白いかも。車と違ってハンドル操作いらないし)

一応コントローラ作成シリーズは一旦終わりで、ちょっと今は別のことをやっております(鉄道模型絡みなのは同じですが)ので、またお楽しみを。

あと、お約束ですが、改造は自己責任でお願いします。


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?