電車でGOマスコンで鉄道模型を運転できる液晶付パワーパックを作った

半年くらいずっと開発していた電車でGOコントローラ対応のパワーパックがついに完成しました。
電車でGOコントローラのプラグを直接接続してマスコン鉄道模型を運転できます。


動画でも紹介しているのでぜひご覧ください。

youtu.be

基本仕様


基本的な仕様は以下の通りです。

  • PWM制御
  • 12V / 2A出力
  • 常点灯対応
  • USB端子、プレステ端子装備で計3種類のコントローラーの直接接続に対応
  • 2.2インチTFT液晶を装備、スピードメーター風の出力計とマスコン位置表示
  • デュアルコアCPUでPWMパルスをミリ秒単位で制御することで低速安定性向上
  • コントローラなしで通常のボリューム式PWMパワーパックとしても使用可能

スマホスタンドを使って本物の運転台のように運転することができます。

対応コントローラー

以下の3種類の電車でGOコントローラーに対応しています。

・瑞起 Nintendo Switch用ワンハンドルコントローラー
・プレステ用 ツーハンドルコントローラー SLPH-00051
・プレステ用 ワンハンドルコントローラー TCPP-20001

旅情編用や新幹線用など、他のプレステ2用の電車でGOコントローラーも対応できたらいいな、
とは思っているんですがいかんせん中古相場が高いので手を出せないでいます・・・

表面 操作部


スイッチは電源と正転/逆転切り替え、つまみは上が常点灯出力、下が加速倍率の設定つまみです。
加速倍率のつまみは通常のボリューム式パワーパックとして使う時は出力つまみになります。

画面表示


メイン画面ではマスコン位置とスピードメーター風の出力計が表示されています。
メーターは0km/hで常点灯出力値、120km/hで最大出力(設定で制限可)になります。



コントローラ側のボタンで設定画面を開くことができ、細かい設定項目を変更できるようになっています。

背面 端子類

右側にプレステ端子とUSB端子があり、ここに電車でGOコントローラを接続します。
両方同時に接続することができ、使いたいコントローラ上のボタン長押しで切り替えができます。

左側は電源のDCジャックとレール出力用のユーロブロックのレセプタクルです。

自作系のパワーパックではスピーカー用のプッシュターミナルが使用されることがほとんどですが、個人的にはユーロブロックが最強だと思っています。

プラグ接続で簡単に抜き差しができ、プラグの作成は配線をむき出しにしてドライバーでねじ止めするだけです。
ただしレセプタクルが基板に半田付けして使う前提なので設計が大変というのはあります。

ハードウェア

自分で設計したメイン基板の他に液晶とUSBの2つのモジュール基板を使っており、それぞれピンヘッダで接続する3層構造になっています。

マイコン
マイコン秋月電子で売っているESP32-WROOM-32Eを使用しました。
初めての表面実装半田付けだったんですが、端子間隔1.27mmと広めなので結構すぐ慣れて簡単にできるようになりました。

・モータードライバIC
モータードライバは秋月電子で売っているTB67H450モータドライバモジュールを使用しました。

・液晶パネル
液晶パネルはAmazonで売っているMSP2202の互換品と思われるものを使用しました。
Lovyan GFXが対応しているILI9341という液晶ドライバを使用しているそうです(この辺よくわかってない)

・USBホスト基板
USBホスト基板はM5Stack用のUSBホストモジュールから基板だけ取り出して使用しました。

・専用ケース
専用のアクリルケースを「はざいや」で作成していただきました。

WEB上で専用の設計フォームを使えるので電子工作の専用ケースを作りたい方にもおすすめです。
縦横高さ好きなサイズで制作でき、穴あけや面取りなどさまざま加工に対応しています。

元々フィギュアなどのディスプレイ用の透明アクリルケース向けだと思うので、
ケースと蓋を固定するには四隅に3.2mmの穴を開けてもらい両雌ネジの六角スペーサーを使いました。
底面側にねじ止め式のゴム足をつけると便利です。

今回のケースは加工費込みで5500円ほどでした。
安くはないですがこの価格で1個からの小ロットでオーダーメイドケースを作ってくれるのは破格だと思います。

基板設計


基板の設計にはKicadを使用しました。
かなり頑張って設計したのでスイッチやコネクタ、ボリュームも含めて基板上に全てのパーツを配置し面倒な配線作業をなくすことができました。

ソフトウェア

開発言語はArduinoでライブラリは

  • USB Host Library Rev. 2.0(USBホストモジュール)
  • Psx(プレステコントローラー読み取り)
  • Lovyan GFX(液晶パネル描画)

などを使用させていただきました。
こういう便利なライブラリがたくさんあるのはArduino環境の強みですね。

ただコントローラから送られた値の取得はライブラリがやってくれますが、
それが実際マスコンのどの位置に相当するのか、どのボタンを押したのか、というのは自力で解析する必要がありました。

速度計算

内部の動作的にはあらかじめ決められた加速度と経過時間で速度を計算し、それをPWMのデューティ比に変換して出力を制御しています。
速度域毎の加速特性はニコニコ大百科にあったE231系のものを参考にさせてもらいました。

こんな感じの加速曲線になっています(実際は直線だけど・・・)

これはマスコンノッチが最大の時のグラフなのでノッチを下げれば加速度も落ちるようになっています。

カスタムPWM制御

低速時のトルク強化のためソフトウェアでPWMを細かく制御しています。

PWM周波数は20000Hzなのですが、PWM制御では周波数が高くなるほど低速域でのトルクが落ちるようです。
周波数を50Hzなど極端に下げればトルクは上がりますが、可聴音域に入るのでノイズがでてしまいます。

それを解消するためにいろいろなブログを漁ったりして、解決法を探りました。

最終的に行き着いた解決法は以下の記事で紹介されていたKATOのハイパーDXのパルスを真似することでした。
note.com

こちらの記事によればハイパーDXではパルスの幅が細かく変化しているようです。

通常のPWMパワーパックはデューティ比がつまみの位置に応じた値で一定になっています。

これを保持デューティ比と最低デューティ比の二つを設定して

保持デューティ比→減少→最低デューティ比→上昇→保持デューティ比→減少・・・

という動作を高速で繰り返すようにしました。
最低デューティ比を上げると平均のデューティ比が上がるので車両の速度が上がります。
詳しい動作と考察については別記事で解説しようと思います。

この動作のためには高速かつ一定間隔で常時デューティ比をいじる必要があります。
タイマー割り込みで制御してもよかったんですが、USBやプレステコントローラとの通信中に割り込み発生しても大丈夫なものかよくわからなかったのと、
ESP32はデュアルコアになっていてWiFiBluetoothを使わなければ1コアしか使われないため、余っているコアで常にデューティ比を制御するようにしました。

結果としてうまくいっているようで超低速から走り出してくれます。

Switch用電車でGOコントローラー変換器の使い方

このページはArduinoを使ったSwitch用電車でGOコントローラー変換器の使い方を解説しているページです。

ここで紹介している変換器はPS用電車でGFOコントローラーをNintendo Switchの電車でGO はしろう山手線で使用できるようにする変換器です。

変換器の作り方はこちらの記事をご覧ください。

tech-hatao.hatenablog.com

使い方

接続

変換器を使用するにはSwitch側でコントローラーのUSB接続を有効にする必要があります。
ホーム画面から「設定」→「コントローラーとセンサー」から「Proコントローラーの有線通信」を有効にしてください。一度有効にすれば次回からは不要です。

f:id:tech_hatao:20210512133034j:plain


その後「コントローラーの持ち方/順番を変える」を開いてからマスコンを変換器に繋いだ状態でSwitchにUSBケーブルを接続してください。
認識に成功するとProコンの画像が出て使用できるようになります。

一度認識をさせると次回からは「コントローラーの持ち方/順番を変える」を開かなくても接続できるようです。


f:id:tech_hatao:20210512133010j:plain

電車でGOでのコントローラー設定

電車でGO内の「オプション」→「コントローラー設定」から以下の2箇所を設定してください。ここを設定しないとマスコンが正しく動作しません。

項目 内容
操作タイプ スタンダード
入力タイプ ダイレクト

f:id:tech_hatao:20210522190630j:plain

キーマップ

キーマップは以下のようになっています。

コントローラー・変換器のボタン Switchの入力
Cボタン Aボタン
Bボタン Bボタン
Aボタン Yボタン
SELECTボタン Xボタン
STARTボタン +ボタン
スティック上下左右 十字ボタン
スティック押し込み HOMEボタン
スティック長押し スクリーンショット
Aボタン(Yボタン)押しながらスティック左 Lボタン
Aボタン(Yボタン)押しながらスティック右 Rボタン
マスコンを非常ブレーキに入れてSTART+SELECT 103系モード有効
マスコンを非常ブレーキ以外に入れてSTART+SELECT 103系モード無効

運転について

ワンハンドルコントローラー、ツーハンドルコントローラーどちらも全車種を運転することができます。

ツーハンドルコントローラーではブレーキハンドルの入力が優先されます。
力行ハンドルがどの位置にあってもブレーキハンドルがB1以上に入っていればブレーキがかかります。

103系を運転する場合は103系モードを使用してください。

103系モードについて

103系のみマスコンが4段のため、モード切り替えで対応しています。

103系を運転するときは103系モードを有効(マスコン非常位置+START+SELECT)にし、それ以外では無効(マスコン非常位置以外+START+SELECT)にして使用してください。

103系モードではマスコン4以上は全て4として入力されます(非常ブレーキ除く)
表にすると以下の通りです。

マスコン位置 入力
非常 非常
B8 B4
B7 B4
B5 B4
B6 B4
B4 B4
B3 B3
B2 B2
B1 B1
P1 P1
P2 P2
P3 P3
P4 P4
P5 P4

その他注意点

運転中以外ではマスコンを「切」位置にしておく

マスコン入力はアナログスティック入力に変換されるので運転中以外では上下左右に余計な入力が入ります。

電車でGOのゲーム内では画面遷移後はニュートラル位置に戻らないと次の入力を受け付けない仕様のようなので、あまり気になりませんが、特にホーム画面では邪魔になるので「切」位置にしておきましょう。

運転画面以外から非常ブレーキに入れたまま運転画面に移行するとB8になる

特に実害のあるものではありませんが、非常ブレーキに入れたまま運転画面に入ると非常ブレーキではなくB8になります。

これは上記の注意点と同じで画面遷移後は一度ボタンを離さないと次の入力を受け付けない、つまり運転画面外から「ZL」を押したまま入っても「ZLを離す」という操作がないと次の「ZL」の入力を受け付けないという電車でGOの仕様によるものです。

一度非常以外に入れれば以後正常に動作します。

Switch版電車でGOにPS用マスコンを繋ぐ変換器の作り方

f:id:tech_hatao:20210521184546j:plain

ニンテンドーSwitch版の電車でGO はしろう山手線にPS用マスコンコントローラーをつなげる変換器の作り方の解説とプログラムの配布をしているページです。

半田付けなしで製作できます。ケースに入れないで使う場合は配線差し込みのみで組み立てできるのでかなり簡単です。

トップ画像の電車でGOコントローラーはハンドルをJR型ワンハンドルマスコン風のものに改造しています。
DMM .makeにて販売しているのでよかったらどうぞ。


make.dmm.com


どんなものを作れるの?

ニンテンドーSwitch版の電車でGO はしろう山手線にPS用マスコンコントローラーをつなげる変換器です。


ワンハンドル、ツーハンドル両対応です。
f:id:tech_hatao:20210512104518j:plain


作成の大まかな手順は

  1. パーツ購入
  2. 変換器本体の組み立て
  3. 書き込みソフト等のDL、インストール、設定
  4. プログラム書き込み

となります。

順番に解説していきます

必要なもの

ゲームソフト

当然ながらゲームソフトが必要です。
お持ちでない方はこちらからどうぞ。

www.amazon.co.jp

対応するコントローラー

対応しているのは以下の2種類のみです。
それ以外のPS用コントローラーは試していないので動くかはわかりません。

PS用ワンハンドルコントローラー
f:id:tech_hatao:20210521190131j:plain
※画像のものはハンドルを改造してあります

www.amazon.co.jp

PS用ツーハンドルコントローラー

f:id:tech_hatao:20210521190128j:plain
www.amazon.co.jp

パーツ

名前 個数 価格(執筆時) Amazon 楽天 Yahoo 備考
Arduino Leonardo(互換機) 1 1200 Amazon 楽天 Yahoo
Arduino用ケース 1 990 Amazon 楽天 Yahoo ケースはなくても作れます
アナログスティック基板 1 499 Amazon 3個入り
Amazonで1個単位で売っているものは納期が数週間かかることがあるので注意
PSコネクタ基板 1 1324 楽天
ジャンパワイヤ 1 633 Amazon
六角スペーサー 1 560 Amazon 20個入り
ケースに入れる場合必要
M3ネジ 8mm 2 20 ホームセンターで購入
ケースに入れる場合必要
M3ネジ 5mm 4 40 ホームセンターで購入
ケースに入れる場合必要
ワッシャーM3用 8 40 ホームセンターで購入
ケースに入れる場合必要
合計(ケース無) 3656円
合計(ケース有) 5266円

その他必要なもの

名前 備考
PC Macでも可
ドリル(ピンバイス) 3.2もしくは3.5mm ケースに入れる場合必要
ドリル(ピンバイス) 4mm ケースに入れる場合必要
リーマーが入る太さのもの
リーマー ケースに入れる場合必要
穴を広げるのに使います

組立

ケース加工をする場合は動画を参考にしてください。

※動画準備中です。少々お待ちください。

ケースに入れないで使う場合は下の表に従って配線だけすれば組み立ては完了です。

配線

Arudinoとアナログスティック、PSコネクタの配線は以下の通りです
スティックとコネクタはケースに取り付けてしまうと基板上の端子名が見えなくるので注意してください。

アナログスティック

f:id:tech_hatao:20210521191011j:plain

アナログスティックの端子 Arduinoの端子
GND GND
5V 5V
VRX A1
VRY A0
SW A2
PSコネクタ

f:id:tech_hatao:20210521191025j:plain

PSコネクタの端子 Arduinoの端子
DAT 8
CMD 9
ATT 11
CLK 10
5V 3.3V
GND GND

Arduinoへプログラムの書き込み

この先Macの画面で解説していきますが、Windowsでも基本的に同じです。

ソフト類のDLとインストール

まず書き込みに必要なソフトと変換器の動作に必要なライブラリをインストールします。
基本的にダウンロードしてインストールすればいいだけですが、一部設定が必要なものがあるのでそこも解説します。

必要なソフト・ライブラリ URL 備考
Arduino IDE リンク 書き込みソフト
NintendoSwitchControlLibrary リンク Switch操作のライブラリ
PSX Library リンク PSコントローラー読み取りライブラリ
DenGoConverter.ino リンク 変換器のプログラムファイル
Arduino IDEのインストール

まずArduino IDEをインストールします。
これはArduinoにプログラムを書き込むためのソフトです。
以下のリンクからご自身の環境に合ったものをダウンロードしてインストールしてください

Software | Arduino


f:id:tech_hatao:20210512132351p:plain


「Support the Arduino IDE」というページが出たら「Just Download」でダウンロードができます。
Arduinoを支援したい場合は「CONTRIBUTE & DOWNLOAD」から寄付できるみたいです。
 

f:id:tech_hatao:20210512132354p:plain


ダウンロードしたらインストーラーを起動してインストールしてください。

NintendoSwitchControlLibraryのインストール

これはSwitchを操作する機能をまとめたライブラリです。
以下のリンクを開いて、右上の緑色の「↓Code」ボタンから「Download ZIP」を選択してダウンロードします。

https://github.com/lefmarna/NintendoSwitchControlLibrary


f:id:tech_hatao:20210512132416p:plain


ダウンロードしたらArduino IDEの「スケッチ」→「ライブラリをインクルードから「.ZIP形式のライブラリをインストール」を選択します。


f:id:tech_hatao:20210512132711p:plain


ファイル選択画面が開くので先ほどダウンロードしたZIPファイルを選択してインストールしてください。

これで完了です。

PSX Library

こちらも同じ方法でインストールします。
以下のリンクを開いて「Psx1.zip」を選択してダウンロードし、
Arduino IDEからZIP形式のインストールをしてください。

https://playground.arduino.cc/Main/PSXLibrary


f:id:tech_hatao:20210512132401p:plain


ボードマネージャの設定

Arduinoにはいくつか種類があるのでArduino IDEからどのボードを使うのか設定をします。
Arduino IDEを起動しツール→ボード→Arduino AVR Boardsから「Arduino Leonardo」を選択してください


f:id:tech_hatao:20210512132404p:plain

VID・PIDの変更

Switchにコントローラーをして認識してもらうためにはVID・PIDというものを変更しなければなりません。
難しい説明は端折りますが、Switch側で指定されてるVID・PID以外はコントローラーとして受け付けてくれないということです。

「boards.txt」というテキストファイルを編集するのですが、MacWindowsでフォルダ構造が違うので置いてあるアドレスが違います

Macの場合FinderのArduino IDEのアイコンを右クリックして「パッケージの内容を表示」をクリックします。
そこから「Contents」→「Java」→「hardware」→「arduino」→「avr」の中にあります。


f:id:tech_hatao:20210512132409p:plain


Windowsの場合Arduinoフォルダの1つ上の「Documents」フォルダの中に「ArduinoData」というフォルダがあり、
そこから「ArduinoData」→「packages」→「arduino」→「hardware」→「avr」の中にあります。

「boards.txt」を開いて

285行目 leonardo.vid.1=〜
286行目 leonardo.pid.1=〜

の「〜」の部分を変更して以下のようにする

leonardo.vid.1=0x0f0d
leonardo.pid.1=0x0092


さらに

311行目 leonardo.build.vid=〜
312行目 leonardo.build.pid=〜

の「〜」の部分を変更して以下のようにする

leonardo.build.vid=0x0f0d
leonardo.build.pid=0x0092


以上の4箇所を変更して完了です。
command+Fで検索した方が見つけやすいです(windowsならctrl+F)

書き込み

プログラムファイルは以下のリンクに置いてあるのでダウンロードしてください。
先ほどのライブラリと同様にCodeボタンからZIPでダウンロードできます。
github.com


変換器をUSBケーブルでPCに繋ぎ、
ダウンロードしたフォルダ内の「DenGoConverter.ino」を開いて「マイコンボードへ書き込む」ボタンを押して書き込んでください。

これで完成です。


f:id:tech_hatao:20210512132412p:plain

使い方

使い方・接続方法はこちらの記事をご覧ください。

tech-hatao.hatenablog.com

プライバシーポリシー

当サイトに掲載されている広告について

当サイトでは、第三者配信の広告サービス(GoogleアドセンスA8.netAmazonアソシエイトバリューコマース、もしもアフィリエイト、afb、アクセストレード)

を利用しています。
このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 『Cookie』(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。
またGoogleアドセンスに関して、このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、こちらをクリックしてください。

当サイトが使用しているアクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。
このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。
このトラフィックデータは匿名で収集されており、個人を特定するものではありません。

この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。
この規約に関して、詳しくはこちら、またはこちらをクリックしてください。

当サイトへのコメントについて

当サイトでは、スパム・荒らしへの対応として、コメントの際に使用されたIPアドレスを記録しています。

これはブログの標準機能としてサポートされている機能で、スパム・荒らしへの対応以外にこのIPアドレスを使用することはありません。

また、メールアドレスとURLの入力に関しては、任意となっております。
全てのコメントは管理人であるredoが事前にその内容を確認し、承認した上での掲載となりますことをあらかじめご了承下さい。

加えて、次の各号に掲げる内容を含むコメントは管理人の裁量によって承認せず、削除する事があります。

特定の自然人または法人を誹謗し、中傷するもの。
極度にわいせつな内容を含むもの。
禁制品の取引に関するものや、他者を害する行為の依頼など、法律によって禁止されている物品、行為の依頼や斡旋などに関するもの。
その他、公序良俗に反し、または管理人によって承認すべきでないと認められるもの。

免責事項

当サイトで掲載している画像の著作権・肖像権等は各権利所有者に帰属致します。権利を侵害する目的ではございません。記事の内容や掲載画像等に問題がございましたら、各権利所有者様本人が直接メールでご連絡下さい。確認後、対応させて頂きます。

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。

運営者:hatao