ユーザ用ツール

サイト用ツール


気動車タイプコントローラ

ここは何?

  • 緊急事態宣言が延長を続ける中、いろいろ活動を自粛している憂さ晴らしで、とうとう BVE に手を出してしまった。
  • が、やはりキーボード操作では雰囲気が出ないうえに操作が直感的でない。
  • PS2 用の電車で GO! コントローラも引っ張り出してみたが、旅情編コントローラであってもやっぱり今一つ。特に、釧網本線のデータに JR 車両パックを組み合わせて変速ハンドルの取り扱いができるように改造したこともあって、変速ハンドルの操作性が壊滅的。
  • 既存の旅情編コントローラ用入力プラグインはボタン等の割り当てが限定的なので、BIDSSMemLib を使って操作内容を流し込むソフトを自作(気が向いたら、これもそのうち公開するかも)。それにより、ドア開閉レバーに変速ハンドルの操作を割り当てられるようにしてキーボードを併用しなくて済むようにはなったが、やっぱり「現在のハンドルの位置」が直感的に判らないのはすごくやりづらい。
  • というわけで、自動空気ブレーキ式気動車用のコントローラを製作中。

主な仕様的な何か

PC との I/F

  • コントローラには、Raspberry Pi pico を USB 接続で使用。
    • 最初は PIC(秋月で売ってる 14K50 のやつとか)を使おうと思ったんだけど、I/O の数が足りないのに加え、Raspberry Pi pico のほうが圧倒的に安い。
    • ちょっと基板がでかいけど、どうせマスコン自体はもっと大きいので、そこまで極限的に小さくする必然性がなく、ぶっちゃけ他のコントローラ基板を使う理由がない。
    • 唯一の問題は入手性で、品薄のところが多い(秋月も単品販売は「品切れ」状態でになっていて USB ケーブルやヘッダピンとの抱き合わせ販売のみで、しかも「お一人様 1 個限定」)。ところが、千石で 5 個まとめ買いすると、秋月の単品販売より安い(1 つ当たり 540 円!)。ちなみに、店頭で箱が空になっていたので店員さんに「品切れですか?」と訊いたら、「や、ありますあります」と在庫がどっさり入った箱を出してきてくれて、挙句には「いくつ要ります?」と訊かれる始末。多分 10 個くらい買い込んでも全く問題ないのでは……。
  • BVE への入力は、USB キーボードのエミュレーションと、BIDS_Server の serial モジュール経由の両方をサポート。
    • BIDS Server とのやり取りは USB serial を使うので、現在は USB serial が接続されると自動的に BIDS Server モードに切り替わるようにしているが、BIDS の入力プラグインに(気動車の運転に使用するには割と致命的な)問題があるので(後述)、将来的に表示関係をサポートした時には「データの取得は USB serial で、操作の入力はキーボードで」という使い方をしたくなる可能性がある。
    • そこで、USB serial 接続中にどちらの出力モードを使用するかをスイッチで設定できるようにする予定。
    • なお、キーボードモードでのキー割り当ては標準のもののみサポート。

サポートしている機能(操作)

現時点では以下の通り。

  • マスコンハンドル操作(力行 5 段)
    • 6 接点のロータリースイッチ使用。秋月で売ってる安くてでかいやつを使っている。
  • ブレーキ操作(「緩め込め」「重なり」「常用」「非常」の 4 段)
    • 「保ち」がないのは BVE の車両データの仕様。ブレーキハンドルの位置自体は VR の抵抗値(で分圧された電圧)で読み取るので、「位置」の増減は閾値の設定次第でどうにでもなるんだけど……。
  • 逆転ハンドル
    • 3 接点のロータリースイッチ使用。実物のレバー操作角は 45° だが、一般的な 3 接点のロータリースイッチは 1 ポジション当たりの接点の角度がちょっと小さい(30° 刻み)。実物と同じ 45° タイプのものもあるにはあるが、かなり少ない上に高い(スイッチ 1 つで 500 円とか 1000 円とか出してられない……)。なので、秋月で売ってる安くてでかいやつを使う。
    • もしリアルなマスコンを作るとしたら、3:2 の減速ギアを噛ませてやることになる予定。
      • さらに、仮に秋月の安いロータリースイッチが入手不能になったとしても、大きな製品に合わせてギア部のケーシングを設計してあれば、固定用部品を差し替えて他の外形の製品に対応することも可能なはず。
  • 変速ハンドル
    • 逆転ハンドルと同様。
  • 各種ボタン等
    • 今のところ、「ATS 確認」「ATS 警報持続」「EB 復帰」「機関ブレーキ」「警笛」をサポート。あ、「ATS 復帰」を忘れてた……。
      • 動作確認はまだしていないが、一応「ATS 復帰」も追加した。

現状

  • 上記の機能については、すでに動作している。が、つまみではやっぱり操作しずらいので、現在 3D プリンタでハンドルを製作中。
  • それっぽく運転できればいいので、造形は適当(運転するのには、逆転ハンドルが抜けなくても全く問題ないし、マスコンのロックボタンも同様……)。細けぇこたぁ(以下略)。
  • スイッチもマウント予定。ただ、現在使っているスイッチはバネが結構固めなので、より軽く操作できるものに交換するつもり。
  • ちなみに、筐体は 100 円ショップで買ってきた食品用のプラ容器を使用。操作さえできればいいのでね……。
  • ただ、ブレーキハンドルだけは、もう少しどうにかしたい(VR を使っているので各ポジションにクリック感がなく、どこまで動かしたかがわかりづらいので)。
    • というわけで、作ってみた。
    • なんか、勢い余ってこっちだけやたらと本格的になってしまって、マスコン側の見劣り具合と言ったら (__;

問題点

BIDS のモジュールに以下の問題があるので、BIDS Server 経由で使うときはそっちのソースの修正と再ビルドが必要。なお、BIDS の原作者さんには github で Issue を起こして連絡してあり、1.に対しては修正されたそうだが、2.については反応はない。また、いずれも修正版は未リリース('22/1/22 現在)。

  1. 入力プラグイン
    • ブレーキハンドルが「緩め込め」以外の位置にあると、マスコンの操作が無視されてしまう。
      • 原因は入力プラグイン内で「ワンハンドルマスコン」と判定されてしまうためであることがわかっているが、BVE 側の仕様(本体から SetAxisRanges() が呼ばれた際に渡される引数)が不明なため、どう直すのが適切なのかはよく判らない(BIDS 以外でソースが公開されているプラグインは、当該関数の中が空だし……)。
      • とりあえず、ソース内で InOneHandle が常時 false であるように改修すると、正常に動作する。
      • ただし、機関ブレーキを使わない場合は、ほとんど問題にならない。逆に、機関ブレーキを使う場合、投入と解除のいずれの操作でも一旦空気ブレーキを緩解する操作を強いられるので、割とめんどくさい。
      • ソースの修正はされたとのこと。
  2. BIDS Server
    • 情報の自動送信機能(指定した情報が変化したらそのデータを自動的に送信してくれる機能)で、Panel データを受信できない。
      • 単純に BIDS Server のバグ。ソースを見ると、Panel と Sound の変数がごっちゃになっている。
      • 現状では表示が何もないのにこれで何が困るかというと、変速ハンドルの操作。
        • 実は、変速ハンドルはなぜかほかの操作よりも(キーボード・serial 経由のコマンドともに)反応が遅く、立て続けに送信するとすぐに動作がおかしくなってしまう。
        • キーボードモードでの場合は送信間隔を少し空けることで対応したが、serial では動作の確実性と反応性を向上するために、「変速ハンドルを動かすと panel No.21 のデータに反映される」という仕組みを利用している。これがうまく動かなくなってしまう。
      • 修正したらちゃんと動くようになったので、作者さんへはパッチを Issue に貼って連絡しておいたが……。

いずれも、キーボードモードで操作する場合は全く支障がないんだけども。

公開

まだちょっといじりたい部分があるので(joystick mouse のサポートとか)、現時点では非公開。バイナリはそのうち公開するかも。ソースは……かなりやっつけで、目がつぶれそうなので…… x_x

今後やりたいこと

  • ……メーター欲しいよね……。でも、買うと高いよね……
  • というわけで、サーボモーターを利用したメーターも製作中。元々鉄道模型用に計画したもので、8 pin の PIC16F18313 に電圧を入力してそれに連動させることはもうできている。現在は 1:2 のギヤボックス的なものを 3D プリンタで作っている。
    • できた。とりあえず、PIC16F18313 のプログラムはアナログ入力の電圧に応じて 0〜±60° の範囲で軸が回転するように作ってあったのだが、1:2 ギアボックスによってそれが 0〜±120° に拡大されて動いている。想定通り。ちなみに、こういう設定にしたのには理由があって……
      • sg90 は 0〜±90° の範囲で軸を回転させることができるが、個体の問題なのか、購入した sg90 は左に目一杯軸を振るとぶるぶる振動する。
      • そもそも、鉄道の(古いタイプの典型的な)メーターは針が 180° 以上回転するため、sg90 の軸の回転をそのまま使うわけにはいかない。
      • どうせなら、わかりやすく回転角を 2 倍に拡大する(減速ならぬ倍速)ギヤボックスを噛ませて制御することにした。
    • 動画を上げようかと思ったのだが、dokuwiki のサイズ制限に引っかかってしまったので、公開方法を検討中。
  • 次は、アナログ入力の代わりに I2C 制御で角度を指定する予定。Real Analog Gauge プラグインを使うと panel データとして「真下を 0° とした時計回りの針の角度を 1000 倍したもの」が出力されるようなので、それを sg90 のパルス幅である 2400〜500 にあらかじめ変換して送信する予定。そうすれば、sg90 を制御する PIC はその値をカウンタに設定するだけの簡単なお仕事をすればいいようになる。
    • 一応動くようになった。が、課題もある。
      • 最も入手しやすいと思われる sg90 では、針がぶるぶる震えるような小刻みかつ激しい動きには反応できないっぽい(モーターの出力軸に対する歯車の固定が今一つなので、そのせいかも)。また、モーターの個体差も結構大きい(秋月で買ったので、純正品のはずなんだが……)。
        • 個体差は、Real Analog Gauge 側で吸収可能ではある。また、軸を端まで廻すとハンチングが発生する個体もあったが、中央を基準に動作させることによってその問題も回避。なので、歯車の固定だけが大きな課題……。
      • 某ページで同等価格帯の製品として強くおススメされていた ES08MAII も試してみたが、これもいまひとつ……
        • やはり個体差が少々あるが吸収可能だし、歯車もねじでしっかり固定できるのでその面の心配はない。が、やはり「針がぶるぶる震える」ような動きには追従できない。これはモーターのせいだな……。
        • それと、Amazon で 2 回購入したら、なんとホーン取り付け軸のサイズが直径・突出量とも違う。ロットによるものか供給元の違い(?)によるものかはわからないが、購入するたびに仕様が異なるようでは安心して使えない。
        • 針の動きに関しては、試しに買ってみた中華製の MG90S 互換品が一番ましっぽい。これで試してみたいが、別件が優先になっていて頓挫中。
  • ……2 本針の圧力計も、一応設計は始めた。滑らかに動くかどうかがちょっと厄介だけど……。
    • 一応動くものはできた。が、1 軸版と同じ問題がある。さらに、針を軸に嵌め込みで固定しているのだが、レジンが硬すぎて固定部が割とすぐ割れてしまう。そういう意味では、1 軸版よりさらに問題が大きい。そもそも針の部品自体が 2 軸版では 1 軸版より細くて割れやすいので、本当ならここだけは金属にしたいんだけどね……。
    • そうこう言っているうちに、SK 本舗から水洗いタイプの高靭性レジンが発売されたようなので、それを使ってみるかな。以前注文した際に発送日を偽装された経験があるので(連休初日の朝に注文したところその日に発送連絡があったのだが、実際には連休明けの発送だった。おかげで、連休中に出先からとんぼ返りさせられた挙句に待ちぼうけをくらわされる羽目に)、あまり使いたくない業者なんだけど。
気動車タイプコントローラ.txt ? 最終更新: 2022/01/21 18:55 by jnr165