路線バス運転シミュレータ開発記

OMSIを使って路線バスの運転シミュレータを製作しています。備忘録的にゆるーく書いていきたいと思いますので、お付き合いいただければ幸いです。

システム概略図

ハードウェア面については不足している部分や稚拙なところがあり、手を加えたいところが多々ありますが、これ以上時間をかけているとマップの作成ができないため一旦運転台の製作は終了します。これでも十分に楽しめるものにはなったと思っています。

f:id:poplar1930:20210830085844j:plain

最後に、運転台全体がどのようなつくりになっているか、概略図を示します。

f:id:poplar1930:20210830100637p:plain

※現状、整理券発行機は未接続です。

■Arduino Mega2560の出力ピンアサイン

(0)N/A (1)N/A
(2)N/A (3)空気圧計
(4)N/A (5)エンジン温度計(未接続)
(6)水温計 (7)N/A
(8)N/A (9)速度計
(10)油圧計 (11)燃料計
(12)エンジン回転計 (13)N/A
(14)N/A (15)N/A
(16)N/A (17)N/A
(18)N/A (19)N/A
(20)N/A (21)N/A
(22)N/A (23)排気ブレーキ
(24)N/A (25)ウインカー右
(26)N/A (27)ウインカー左
(28)N/A (29)ハイビーム
(30)N/A (31)駐車ブレーキ
(32)N/A (33)N/A
(34)N/A (35)空気圧
(36)N/A (37)ABS
(38)N/A (39)停車ランプ
(40)N/A (41)後扉ランプ
(42)N/A (43)N/A
(44)N/A (45)N/A
(46)N/A (47)N/A
(48)N/A (49)N/A
(50)N/A (51)N/A
(52)N/A (53)N/A

■Arduino Leonardoの入力ピンアサイン

(0)ホーン (1)ウインカー左
(2)ウインカー右 (3)計器灯
(4)ヘッドライト(下向き) (5)ヘッドライト(上向き)
(6)フォグランプ (7)パーキングランプ
(8)排気ブレーキ (9)ウォッシャー液
(10)ワイパー(INT) (11)ワイパー(LOW)
(12)ワイパー(HI) (13)キースイッチ(START)
(A0)キースイッチ(ON) (A1)前扉
(A2)後扉 (A3)N/A
(A4)N/A (A5)N/A

ハンドルコントローラーの改造について

今回、ステアリングやペダルの入力部分にはLogicool G27 Racing wheelを流用したのですが、その中で実車についていたシャフトとG27をどのように結合させるかが問題でした。

f:id:poplar1930:20210829150753j:plain

下の写真は別途入手した実車のハンドル一式なのですが、ハンドルとコンビネーションスイッチ、それと隠れて見えないですがシャフトがついています。ネットを見ているとG27のハンドル部分だけ外して実車(乗用車用のものです)のものをつけている例はちらほら見かけましたが、さすがに根本のシャフトから結合している例は見当たりませんでした。

f:id:poplar1930:20210829150859j:plain

 そこで、考えていても始まらないと思い、とりあえず分解してみることにしました。

まずハンドル部分を固定しているねじをはずします。

f:id:poplar1930:20210829155952j:plain

ハンドルが外れて基板が出てきます。

f:id:poplar1930:20210829160057j:plain

基板にはコネクタが付いているのでこれを抜いて基板を取り外します。
f:id:poplar1930:20210829160451j:plain

この時点でシャフトと結合できるかと思ったのですが、うまくかみ合いませんでした。

f:id:poplar1930:20210829161415j:plain

これ以上分解するとハンドルの後ろについていたスイッチ類も外れ、最悪壊してしまいそうなので躊躇しましたが、思い切って外してみると真ん中が空洞になっていました。

f:id:poplar1930:20210829161905j:plain

「これは!」と思い、おそるおそる空洞にシャフトを差し込むと若干の隙間はありますが、うまく入りました。これでとりあえずハンドル操作ができました。

f:id:poplar1930:20210829162046j:plain

www.youtube.com

ただ、使っていて問題だったのが、この角度でシャフトとG27を結合させたとき、G27をセンター位置に合わせたときに実車のハンドルがセンター位置ではなく微妙に角度がついてしまい非常に操作がしにくいことでした。加えて、シャフトとG27の穴との間に隙間ができているので遊びができてしまい微妙な操作が操作ができず左右にふらふらしてしまうというのも厄介でした。
(画像はG27をセンターに合わせているのですが、ハンドルは左方向に若干曲がっています。この微妙な角度のせいで非常に使いづらかったです。)

f:id:poplar1930:20210829163058j:plain

そこで、G27とシャフトの位置関係や取り付け角度などを変更していろいろ試したところ、シャフトを斜めに入れるのではなく垂直に入れると改善することが分かりました。また遊びが出る問題は、原始的ですが布の切れ端で隙間を埋めると良い感じになりました。

f:id:poplar1930:20210829164107j:plain

以上で、ハンドルコントローラーの改造は完了です。

なお、実車のフィンガーコントロール用のシフトレバーが入手出来たら、そちらにも手を入れる予定です。また、実車と違いペダル間の間隔が狭く、使いづらいので時間があるときにこちらも分解して適切な位置にペダルを配置するつもりです。

 

※お約束で言うまでもありませんが、このようにコントローラーを分解するとメーカーの保証は受けられなくなります。新品ではなく中古品で試すことを強くお勧めします。

※ハンドルコントローラーの分解については以下のサイトを参考にさせていただきました。

rifle.blog.ss-blog.jp

 

スイッチによる入力について

ウインカーなど物理的なスイッチによってOMSIを制御したい場合、以下のようにいくつかの方法が考えられます。

1)スイッチをarduinoに接続して入力値を監視し続け、取得した値で毎回OMSIの内部値を上書きする方法
2)スイッチをarduinoに接続して入力値を監視し続け、状態が変化したらキーイベントを発生させる方法
3)スイッチがONになったと同時にキーイベントを発生させる方法

この中で一番理想的なのは1)で、この方法だと何もしなくても物理的なスイッチの状態とOMSIの状態が常に一致するので問題ありません。
一方、2)と3)の方式は初期値を物理スイッチとOMSIで合わせていないとあべこべな動作になってしまうのが難点です。

しかし、今回はOMSIの内部値を変更する方法がわからなかったので2)と3)を採用することにしました。
出力ピンからOMSIの状態を取得して、物理スイッチの入力とともに論理回路(ANDとか)を通して一致していれば入力とみなすというように工夫することも考えましたが、面倒だったのでやめました。
あるいはHW的にやらなくてもSW的にも同様なことができますが、入出力ピンが減るのが嫌でやめました。

2)の方法はトグルスイッチのようにON/OFFを切り替えるような場合に使い、3)は押しボタンのように一瞬だけONになるような場合に使えます。

一般的にマイコンで入力回路をつくるときは、単に入力ピンにスイッチをつなぐだけではなく、プルアップ抵抗あるいはプルダウン抵抗が必要になります。
これは回路がどこにも接続されず入力値が不定にならないようにすべての入力ピンに必要なのですが、幸いarduinoの場合はプルアップ抵抗が内蔵されているので省略できます。setup()の中でpinModeを設定する際に第2引数でINPUT_PULLUPを指定し、入力ピンにスイッチを取り付け、もう一方をGNDに接続するだけで完了です。この場合、スイッチがONになった場合LOWになり、スイッチがOFFになった場合HIになります。

f:id:poplar1930:20210829142238p:plain

それと、KOMSIは基本的にArduino Mega2560を使うことを前提としていますが、このタイプはキーボード入力のエミュレーションができないので、入力については別途Leonardoなどのキーボードエミュレーションができるボードを用意する必要があります。当初はMega2560をそのまま使い、COMポート経由でPCに文字を送信して、PC側で常駐しているアプリがキーイベントを起こすような仕組みを考えたのですが、結局テキストエディタではうまくいっても、OMSIでは動作しませんでした。フリーで配布されていたこの常駐アプリはおそらく内部的にアクティブになっているウインドウに対してウインドウメッセージを送信するようなつくりになっているのではないかと思うのですが、OMSIはキーボードの押下状態を直接見に行っているらしく、この方法ではうまくいきませんでした。

あとはif文で入力ポートを見に行ってその状態によってキーイベントを起こすようなロジックを書いていきます。Keyboard.press()によってキーが押された状態をつくりだし、Keyboard.release()でキーを離すような感じで難しいことはありません。ただ、注意しないといけないのがKeyboard.press()とKeyboard.release()の間に50msくらいのディレイを入れないとキーを押して離したというようにPCに認識されないようです。

それと似た関数でKeyboard.write()とかKeyboard.println()というものがありますが、これらは内部的な動作が異なるようでテキストエディタに文字を打つことはできるのですが、OMSIではこれらの関数を使ってもキーボードイベントとして認識しませんでした。

また、Keyboard.press()で押したい文字を指定するとき、通常は小文字を指定します。ここで大文字を指定するとOMSI上では[Shift]を押しながらそのキーが押されたと認識するので注意が必要です。

 実際動かしてみるとわかるのですが、このままではOMSIを使っていない時にスイッチを操作するとアクティブになっているウインドウにキーが入力されてしまいます。それを回避するためにキースイッチがONになっているときだけキーイベントを起こすようにしています。 

 

※キーボードのエミュレーションについては以下のサイトを参考にさせていただきました。

qiita.com

qiita.com

 

計器の制御

KOMSIとarduinoを使ってOMSIと計器を連動させる場合、インジケータの場合のようにピンアサインを自由に決められるわけではなく、あらかじめ決められたピンにサーボモーターを接続して計器の指針を動かすという形になります。
そのピンアサインはKOMSIに付属してきたinoファイルをIDEで開いてソースを見れば分かりますが、以下のようになっていたのでここにメモしておきます。

(3)空気圧計
(5)エンジン温度計(水温計とは別)
(6)水温計
(9)速度計
(10)油圧計
(11)燃料計
(12)エンジン回転計

これらは、arduinoにサーボ―モーターを接続して指針を直接動かす方法を前提としています。
そのためKOMSIに付属するinoファイルのソースに手を加えずにそのまま使いたい場合は、計器にサーボモーターを取り付けるなどの改造が必要になります。
一方、元の計器をなるべく生かしたい場合はソースを変更する必要があり、それぞれの方法について解説します。
今回の製作では空気圧計のみサーボモーターを使い、それ以外の計器についてはなるべくオリジナルの状態を保つようにしました。


■サーボモーターを使う方法

サーボモーターはリンク先のものを使用しましたが、arduinoに接続するだけでOMSIと連携して使えるようになるので便利です。
メーターパネル内にうまく埋め込むことさえできれば、こちらの方法が簡単です。

(サーボモーター)安いのでおすすめです
https://www.amazon.co.jp/waves-SG90-%E3%82%B5%E3%83%BC%E3%83%9C-%E3%83%A2%E3%83%BC%E3%82%BF%E3%83%BC-180%C2%B0/dp/B08HCQ8HNW

このサーボモーターを使う場合は、赤を+5V、黄をアサインされている出力ピン、茶をGNDに接続すると動作します。
本当はモーターをマイコン基板に直接つなぐのは良くないのですが、今回は消費電流も小さく、かつ1台だけだったのでモータードライブ用の回路は省略しています。

f:id:poplar1930:20210829090153p:plain

 ■元の計器を活用する方法

元の計器をなるべく温存して動かしたい場合は、ソースの変更と回路の作成が必要になります。回路はインジケータランプの制御と同様、フォトカプラを使った方法を考えました。計器により特性が異なりますので場当たり的ではありますが、可変抵抗を接続して適宜調整してください。(OMSI側で最大値にしたときに、計器の方も最大値を示すように可変抵抗を調整すればOK)

回路に計器をつなぐときですが、計器がメーターパネルの基板と接続されていると他の部分に影響して具合が悪いので今回は計器とつながっている回路のパターンを削って計器だけメーターパネルの回路から独立させ、そこに直接つなぐような方法をとりました。

 f:id:poplar1930:20210829094238p:plain

ただし、エンジン回転計だけは別な回路にしています。

f:id:poplar1930:20210829095409p:plain

 回路は以上ですが、次にソースの変更も必要なのでIDEで"lights_and_servos.ino"を開きます。

 f:id:poplar1930:20210829101045p:plain

水温計を例にとると、Servo3関数に wasser.write(aktueller_wert); という記述があるのですが、これをコメントアウトして上記のようにanalogWrite(6,aktueller_wert); と一文追加します。これは何をやっているかというと、aktueller_wertというのがOMSIから渡された計器の値でwasser.write()を使ってサーボモーターを制御するためのパルス信号を割り当てられたピンから出力する処理を無効にして、aktueller_wertの値に応じて指定したピン(ここでは6番)から0-5Vのアナログ信号を出力する処理に変更しています。これにより、フォトカプラに流れる電流がパルスではなくアナログ的に変化するので、それにつないでいる計器も追随して動くというわけです。

それともう一点、ソースの先頭にwasser.attach()という記述があるのですが、これはサーボモーターの制御のために特定のピンを割り当てる処理なので、analogWrite()を使うときはコメントアウトします。

あとは、arduinoに書き込んで再起動すればOKです。 

 

計器関係は以上ですが、燃料計については動作が異なるので調査中です。速度計については現状、tone()を使って任意の周波数のパルスを出力して電気式の速度計を動かすようなつくりにしていますが、tone()で使える周波数には下限があり、低速(20km/h以下)での走行に対応できないため、この辺も検討中です。

ワンマン機器の接続

車両の運転に必要なもの以外にも路線バス特有の機器が色々ありシステムとして稼働しています。ここでは、そういった機器の配線方法などを備忘録的にメモしておきます。

 【案内放送装置】

クラリオン製のものはAuto Guide System (略してAGS)と呼んでいますが、以前は8トラックのテープを使っているものが主流でしたが、現在ではメモリカードに音声データを記録してそれを再生しているものがほとんどです。

民生用のテープデッキなどと異なるところは、始動ボタンを押すだけで放送が開始し、運転手がテープを止めなくてもバス停の案内が終わると自動的にテープが停止することです。これはテープに音声以外の信号が記録されており、それを元にテープをどの位置で停止させるかというのを判別しています。ほかにも運賃表示器や整理券発行機を動かすための信号を記録することができるようになっており、これらの機器を運転手が個別に操作しなくてもAGSが自動的に連動させるようになっています。

■CA-040A

f:id:poplar1930:20210827191456j:plain

f:id:poplar1930:20210827191516j:plain

専用のハーネスを購入して接続するのが確実ですが、ピンアサインをもとに自前で配線することも可能です。多機能なのでピン数が多いですが事業者によって使っている機能はまちまちなので全部配線しなくても使うことができます。

最小限の接続だと(20)と(10)に電源、(4)と(14)にスピーカーをつなぎ、そして(21)と(25)を短絡させるとテープの再生が始まります。つまり、専用の操作器さえなくても再生することは可能です。市販の押しボタンスイッチで代用することさえできるわけです。(マイクを使いたいときはやっぱり操作器とマイク受口が必要ですね...)

車外放送も聞きたいときは(3)と(13)にもスピーカーをつなぎ、(15)に+24Vをかけると車外放送が再生されます。(ただし、車外放送はテープの定位置にしか録音されていないのでその部分を再生して本体に記憶させてからでないと再生できません)
スピーカーを二つ用意するのが面倒な時は両方とも同じスピーカーにつないでもOKです。単にスピーカーが使い分けられなくなるだけです。

 

(1)左ウインカー (2)ステップ灯
(3)車外スピーカーGND (4)車内スピーカーGND
(5)乗車扉 (6)整理券発行機
(7)運賃表示器 (8)ASU GND
(9)尾灯 (10)GND
(11)右ウインカー (12)降車メモリー
(13)車外スピーカー (14)車内スピーカー
(15)降車扉 (16)整理券発行機
(17)運賃表示器 (18)ASU入力
(19)バックアップ電源 (20)+24V電源

 

(21)始動 (22)停止
(23)音声制御 (24)ストローブ
(25)GND (26)データー
(27)クロック (28)SOUT
(29)通過 (30)スピーカー切替
(31)プログラム切替 (32)動作ランプ
(33)操作器電源 (34)頭出し停止
(35)頭出し (36)SIN

 ※CA-040Aのピンアサインについては20年近く昔の話になりますが、AGS氏より頂いた資料を参考にさせていただきました。

 

■CI-403

AGSと接続して使用する機器で、乗車扉が開いているときは乗車扉付近にあるマイクで乗客と会話ができ、乗車扉が閉じているときは通過ボタンを押下して車内放送を止めたときの内容を運転席でモニタリングできるようにしたものです。裏面に配線図が書かれているのでそのまま掲載します。

f:id:poplar1930:20210827203441j:plain

f:id:poplar1930:20210827202157j:plain

 

以上のほか、比較的新しい機種であればクラリオンのサイトにあるカタログの巻末をみると配線図等が掲載されています。
(バックナンバーもあるので廃車発生品にも使えるかも)

https://www.clarion.com/jp/ja/shoppingtool/catalog/2021/

 

【運賃表示器】

f:id:poplar1930:20210828090041j:plain

f:id:poplar1930:20210828090115j:plain

レシップ(旧三陽電機)製の場合、本体にROMカセットを装着して集中式操作盤で系統番号を設定する方式が多いです。集中式操作盤と表示器本体は36pinケーブルで接続され、このケーブルは昔のプリンタで良く用いられたセントロニクスケーブルとコネクタの形状が同じなのでそのまま流用できます。

色々つなぎ変えて調べた結果、配線は次のようになっているようです。

(赤黄)+24V (表示器本体)GND (橙)送り信号 (黄)停名消 (白)停名消 (茶)不明
(36pin)系統設定情報

 

※札幌市営バスのようにAGSの動作開始とともに停留所名表示が変わるときは、AGSのテープ動作ランプを送り信号として使っています。当初始動ボタンに接続していたこともあったのですが、テープ動作中に始動ボタンに触れてしまうと停留所が先に進んでしまい何か不自然な感じがしたためやめました。自己流なので動作ランプを送り信号として使うのが正規のやり方なのかわかりませんが、いまのところこれでうまくいっています。なお、札幌市営バスの場合、多区間で料金が変わる地点でしかテープに運賃表示器の動作信号が入っていないのでAGSの運賃表示器のピンで連動させるやり方ではうまくいきません。むろん、幕式の運賃表示器を使う場合はこの方法を使います。

※一方、AGSが始動してから少し遅れて停留所名の表示が変わる事業者もあります。この場合はテープに運賃表示器の送り信号が停留所ごとに入っていて、その信号によって停留所名を次に進めています。配線はAGSの運賃表示器のピンに接続します。

※ちなみに停名消は特殊な仕様なので一部の事業者にしかついていません。
ドアを開いて再び閉じたときに停留所名表示を消すというもので、バス停を発車した後も停留所名を表示し続けて混乱を招くということがないのが長所です。ただ、集中式操作盤も運賃表示器も両方ともこれに対応している必要があります。(知っている限りでは札幌市営バスしかない仕様のようですけど)
(黄)は乗降扉が開いたときに+24Vをかけ、すべての扉が閉じたらOFFにすることでトリガーとなり、今まで表示していた停留所名の表示を消すというものです。
(白)は+24Vをかけた時点で停留所名が消えます。

 

【メモリブザ】 

いわゆる押しボタン、降車チャイムのことで、乗客が次の停留所で降りたい意思を運転手に伝えるものです。動作させるためには親機、チャイム、押しボタン、停車ランプ、リセットボタンが必要になります。なお、機種によっては親機の中にチャイムも含まれています。

■ES-105RFT

左が親機、右がチャイム。電子音ではなく昔ながらの鉄琴みたいな音がするタイプのものです。

注意したいのが親機にはON/OFFのスイッチが付いているのですが、うっかりONにすると期待した通りに動作しません。普通ならONにすると動作しそうですが、これはテストモードのスイッチのようで、ONにするとチャイムが無効になり押しボタンを押している間だけランプが点灯するような動作になります。車内を回りながら切れた電球を交換して歩くときに便利だと思います。

 f:id:poplar1930:20210828140405j:plain

白線が動作ランプ、薄緑が押しボタン、黒線がGNDになります。

f:id:poplar1930:20210828141346j:plain

旧式の押しボタンでは黒線のないものがありますが、この場合裏の金属部分が黒線と同じ役割になります。あと、このタイプの押しボタンはヒューズ型の電球を使っていて面白いですね。昔は電子部品店で簡単に入手できましたが、今は全く見なくなりました。というか昨今では普通の電球ですら怪しい感じですね。自動車用のものはメーターパネル用も含め変わった形状のものが多いですから。

f:id:poplar1930:20210828140648j:plain

f:id:poplar1930:20210828140700j:plain

f:id:poplar1930:20210828142027j:plain

配線は以下の通りになります。降車扉のスイッチは、開いたときにONになるように配線し、スイッチがONになるとメモリブザはリセットされます。あるいは、リセットボタンにより一瞬親機の電源を断つことでもリセットすることができます。

f:id:poplar1930:20210828141724j:plain


■ES-401 WV2・T

親機に電子音チャイムが内蔵されているタイプで、別途チャイムの接続が不要です。配線は色によりわかるようになっているので記載を省略します。

f:id:poplar1930:20210828145128j:plain

 

【バスロケーションシステム設定器】

廃止になる以前の札幌市営バスでは石山通を走行するバスにバスロケ装置が搭載されていて、乗客が停留所で待っていると次に到着するバスの路線と行き先がバス停のフラップ式表示器に表示されるというシステムが稼働していました。現在は施設老朽化のため、バスロケシステム自体が廃止になりましたが、往時を再現するために車載器の配線を調べてみました。

バスロケの簡単な仕組みを解説すると、始発前に予め車載器に系統番号を設定しておき、この車載器がバスの屋根に取り付けられたアンテナから電波を飛ばします。飛ばした電波は道路上に設置された受信機を通して中央の制御装置に送られ、各バス停にバスが接近していることを知らせるつくりになっています。

この車載器ですが、系統番号の設定を毎回手入力しなくてもいいように案内放送のテープに自動設定用の信号(昔のアナログモデムの動作音のようなもの)が入っていて、通常はこれを再生するだけで系統番号が入力されるようになっています。

https://twitter.com/poplar1930/status/1429434523897319430

f:id:poplar1930:20210828073001j:plain

この機器もそうですが、即売会などのイベントで単に販売されていて何の情報もなくコネクタだけが露出している場合、一旦機器を分解してみると手がかりが掴めることがあります。この機器の外蓋を外すと、コネクタに線が取り付けられていて、そのうち赤色と黒色の線があるのでこれはおそらく電源だろうと推測がつきます。それで6つのピンのうち2つが埋まるので、ほか4つのどれかがAGSと連動して自動設定するためのピンであるというように消去法的にやっていくとうまくいくことが多いです。あとは泥臭い方法ですが各ピンに信号音を入れてみて動作するか確認するといった流れになります。

f:id:poplar1930:20210828080526p:plain

これが正規の接続方法なのかわかりませんが、とりあえずこれで動作しました。入力する信号音はある程度のレベルがないとダメだったので車内放送の音量を絞っていると動作しないあるいは誤作動することがあります。また、この方法だと通過ボタンを押してしまうと車内放送が流れなくなるので動作しません。

 

速度計のピンアサイン

一般的に速度計は機械式ではメーターケーブルをつなぐだけで動作しますが、電気式の場合は簡単な配線が必要になります。また機械式であってもタコグラフの場合は時計の動作などに配線が必要なのでここにまとめておきます。

 

■機械式タコグラフ

別の機種だとインターネットで調べると配線図が載っているのですが、これは情報が見つからなかったので試行錯誤で調べてかなり苦戦しました。

f:id:poplar1930:20210827162317j:plain

f:id:poplar1930:20210827162330j:plain

(1)-(5)不明 (6)メーター照明 (7)不明 (8)GND (9)GND (10)+24V (11),(12)不明

※時計は+24VとGNDを電源につなぐだけで動作します。時計合わせはキーを入れて開けてから左側のダイヤルで行えます。

 

■電気式速度計

機械式の速度計のほうが動かす方法としては単純なのですが、モーターなどで物理的に回してあげる必要があり、それが少々厄介です。幸いなことに最近の車ではパルス信号で速度を示したり、走行距離を示したりできる速度計が搭載されており、一例を紹介します。

実は、簡単そうでこれも苦戦しました。てっきり+24Vをかけると1パルスだと思い込んでいたので中々動作せず、最後にダメもとでGNDに接続したら勢いよく指針が動いたというオチでした。

f:id:poplar1930:20210827163659j:plain

f:id:poplar1930:20210827163720j:plain

(1)GND (2)パルス入力(GNDに接続) (3)メーター照明 (4)IGN (5)メーター照明

※(4)に+24Vをかけると動作すると思いきや動かなかったので、IGNと書かれているねじに直接つないだら動作しました。メーターの上部にセメント抵抗がついていますが、これを介するとダメなのでしょうか。よくわかりません。

計器類のピンアサイン(三菱ふそう)

前回、日野のメーターパネルのピンアサインを調べましたが、メーカーや年式が異なれば当然ピンアサインも違ってきます。今回は三菱ふそうのものを調べてみることにします。

メーターパネルのピンアサインを調べるには、まずGNDなど共通で使われているところを探し、それ以外のピンとの接続関係がどのようになっているか調べます。
全てを一つ一つ調べていくのは大変なのでわかりやすいところから確定させていき、残りのものについて回路パターンから探っていくというような手順でやるとやりやすいかと思います。
ちなみに、回路パターンの解読が難しい場合、GNDを接続したうえで調べたいピンに+24V(場合によっては降圧して)を加えて指針の挙動を目視で確認するという方法もあります。最初にテスターでGNDと対象のピンの抵抗値を調べ、ショートしていないことを確認したら電源に接続します。
この方法は場当たり的な要素が大きく計器を壊す可能性があるので一か八かの最終手段と考えてください。

まずは計器類ですが、四角で囲った部分になります。
日野の場合、インジケータランプ類も丸形コネクタにアサインされていましたが、ふそうの場合は計器類のみになっています。

f:id:poplar1930:20210827135521j:plain

(1)GND (2)+24V (3)油圧計 (4)水温計 (5)メーター照明 (6)燃料計

※電圧計については(1)と(2)に直付けされており、メーターパネルに電源をつなぐだけで動作します。

※空気圧計については圧縮空気を供給すれば動作しますが、コンプレッサーなどの設備が必要で動作音や電力消費も気になることから運転シミュレータには向かず、サーボモーターで直接指針を動かすよう改造して使用します。

 

タコメーターについては正規の配線方法がわからなかったため、色々やっているうちに以下の方法で動作することが分かったので併せて載せておきます。ただし、この方法だと高回転になっても赤色LEDは点灯しません。

f:id:poplar1930:20210827144247j:plain

(1)+24V (2)と(3)の間に可変抵抗をつなぎ、抵抗値を変更すると指針が動きます

 

f:id:poplar1930:20210827144741j:plain

ギアポジションの表示については回路が複雑でピンアサインが分かりませんでした。正規の方法で動作させるのは難しそうなので、VFD単体だけ流用し直接駆動させる回路を自作して表示したいと考えています。(それでも無理なら駆動が簡単な16セグメントLEDに交換する予定)
 

f:id:poplar1930:20210827135852j:plain

インジケータランプについては、前述の丸形コネクタのうちGNDと+24Vを接続した状態で特定のコネクタに+24Vを加えることで点灯します。(一部、GNDに接続しないと点灯しないものや※印をつけているピンのように他の点灯回路から分離していてそれぞれ+24VとGNDを接続するものもあります。)

インジケータ―ランプは車種により関係ないものもあり、最初からランプがついていないことがあるのですが、運転シミュレータでは色々な車種を取り扱うことになるので将来の拡張用として全てにランプを取り付けておいたほうが良いかと思います。

■コネクタA

(1)パワータード (2)バッテリー
(3)電子タイマ (4)フィンガーコントロール
(5)排気ブレーキ (6)ウインカー左
(7)空気圧 (8)ブレーキ
(9)エアフィルタ (10)車高
(11)GND (12)定速走行※
(13)定速走行※ (14)不明
(15)ABS (16)不明
(17)制動灯・尾灯  

■コネクタB

(1)予熱 (2)排気ブレーキ
(3)不経済走行 (4)冷却水
(5)予熱 (6)駐車ブレーキ
(7)ブレーキ、空気圧、冷却水、オーバーヒート(一括点灯) (8)油圧※
(9)油圧※  

■コネクタC

(1)不明 (2)オーバーヒート
(3)不明 (4)GND
(5)不明 (6)不明
(7)ハイビーム (8)ウインカー右
(9)不明 (10)充電
(11)不明 (12)トランクリッド
(13)不明  

ハンドル回りの配線(三菱ふそう)

テスターで地道に調べていった結果、ハンドル回りの配線がわかりましたのでメモしておきます。

f:id:poplar1930:20210713205710j:plain

黒 GND
青黄 ワイパー(HI)
青黒 ワイパー(LOW)
青緑 ワイパー(INT)
青橙 ウォッシャー液
赤 フォグランプ
緑白 パーキングランプ※1
緑黄 パーキングランプ※1
黄 ホーン※2
水色 排気ブレーキ※1
水橙 排気ブレーキ※1
緑黄 ウインカー(左)※3
緑 ウインカー(右)※3
緑赤 計器灯
赤白 ヘッドライト(下向き)
赤黒 ヘッドライト(上向き)

※1 スイッチがONになるとGNDと接続されるのではなく二つの線同士が接続されます

※2 スイッチがONになるとGNDと接続されるのではなくシャーシと接続されます

※3 ハザードスイッチがONになると両方ともGNDと接続されます

なお、悪用される可能性があるのでキースイッチの配線を書くのはやめておきます。

 

(2021/08/27 追記)

ヘッドライト関係については以下の表に状態の一覧をまとめました。

計器灯(緑赤) 下向き(赤白) 上向き(赤黒)
OFF OFF OFF
OFF OFF ON
ON OFF OFF
ON ON OFF
ON OFF ON

道路標識の実装

道路標識のように同一の形状でかつ非常に種類の多いオブジェクトを作成する場合、種類ごとにオブジェクトを作成してしまうと、o3dファイルとscoファイルの数が膨大になってしまいますし、エディタで必要なものを探すのも大変になってきます。

f:id:poplar1930:20210709103822j:plain

そこで、まだ荒削りではありますが、本来はバス停などのラベル付けに使われるフォント機能を使ってこういうやり方を考えてみました。

(1)標識の形(丸、四角、三角など)に着目してオブジェクトを作成する。

(2)Fontsフォルダに以下のような画像ファイルを作成し、oftファイルでそれぞれの標識ごとに[char]の値をA,B,C...と定義していく。

f:id:poplar1930:20210709103838j:plain

 

(3)scoファイルには[texttexture]を追加し、Labelの入力値によってテクスチャが動的に貼り付けられるような仕組みにしておく。

(4)標識を設置するときは、丸形、四角型、三角型などのscoファイルから選択し、実際の内容はscoの種類によらず、Label値を入力することで行う。例えばAなら通行止め、Bなら車両通行止めというような感じ。

このようにしてやれば、爆発的にオブジェクトの種類が増えることは避けられ、エディタで設置するときもLabel値を変えるだけで標識の種類を変更できるので楽かなと思っています。

ただし、案内標識と補助標識は種類が多いのでアルファベットで分類していくようなやり方だとちょっと問題がありそうなので考え中です。

分断されたスプラインをつなぎたい

SDKのマニュアルを見ると、complete to 機能を使って交差点とスプラインをつなぐ事例が紹介されていますが、この機能はスプライン同士でも使えるようですので補足しておきます。