7m4mon / train_model_controller_with_dengo_mascon

電車でGO!マスコンで鉄道模型を運転しよう!

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

電車でGO!マスコンで鉄道模型を運転しよう!

7M4MON, 2021.Dec.1

はじめに

『電車でGO!コントローラでTSマスコンをエミュレートしてBVEで遊ぶ。』 でArduinoから電車でGO!のコントローラを扱うことができましたので、次は、電車でGO!のコントローラを使って、鉄道模型を運転します。

YouTube Video

ハードウェア

  • 電源は DC12V のACアダプタを使用します。Nゲージなら 2A程度の電流容量があれば十分です。
  • フィーダーはネジ式の端子台に接続します。モータードライバICにサーマルシャットダウン機能がありますが、念の為、ポリヒューズを付けています。
  • モータードライバは 東芝 TA8428K です。気休めに放熱板をつけていて、Nゲージならほんのり温くなる程度です。
  • マイコンは Arduino Nano (ATMega328P) です。プログラム開発は、Arduino IDEを使用しています。
  • 表示部はTM1637 の4桁7セグLED と WS2812B の 12LEDリングです。コントローラーの懐中時計用の窪みに設置できるように、直径50mm程度のリングをチョイスしました。表示器は時計にもなります。
  • 走行スピードはPWMで制御していますが、Duty比が小さいと走り出しません。そのため、最小Duty比を設定するための半固定抵抗と設定モード切替スイッチを設けています。設定可能範囲は0~25%です。電気機関車はDuty比を上げる傾向にあるなど、車両により若干異なるようです。
  • 各ボタン(Start,Select,A,B,C)を押すと、警笛音や発車メロディ等、5種類の音がなります。再生はJQ6500のGPIO制御ですが、マイコンポートでのHi-Zはうまく動作しなかったので、各ポートにデジトラ(RN1201)を追加しています。
  • 他、接続図などは下ブロック図のようになっています。

model_cont_block

ソフトウェア

  • 電車でGOコントローラの制御部は、『電車でGO!コントローラでTSマスコンをエミュレートしてBVEで遊ぶ。』 からの流用です。Gyokimae氏の自作ライブラリを使用し、KeKe115sさんの電GOコントローラーをArduinoで読み取るサンプルを参考にしています。
  • 20ms毎にタイマ割り込みが入り、コントローラの状態を読み出し、処理を行います。すべての処理をこのタイマ割り込みで行い、メインループに処理はありません。
  • マスコンハンドルの位置を読みだしたら、位置に応じて加減速計算処理を行い、速度を決定します。 この計算は2048段階で行っていますが、analogWrite は256段階ですのでPWMセット時には3ビット右シフトをしています。
  • 20msのタイマ割り込みは表示や計算で処理を分割し、5つに分散させています。そのため、実際にPWMのパルス幅を更新するのは100ms毎です。
  • 電源投入時はレバーサの状態は「切」になっています。スタートボタン長押しで 中立→前進→中立→後退 に状態遷移します。
  • セレクトボタン長押しでパワーパックモードへ切り替えます。パワーパックモードはマスコン位置1~5でダイレクトにスピードを決定します。
  • PWMのセット範囲は0~255ですが、表示範囲は0~100なので、255→100となるように、固定小数点演算をしています。具体的には、255*201÷2^9=51255÷512=100(小数点以下切り捨て)です。
  • リングLEDはスピードの段階を8色で表現しています。満了したら白にして、次のLEDを点灯して色を変えていきます。速度ゼロのときは赤となります。
  • リングLEDの最下はレバーサの状態を表し、停止(赤)/前進(緑)/後退(青)となっています。

制作例

About

電車でGO!マスコンで鉄道模型を運転しよう!

License:GNU General Public License v2.0


Languages

Language:C++ 100.0%