ETS2 ハンコンに実車ウインカーレバーを付ける その3 Arduino編 

どうも、け~えすです。

今回は実車レバー取付の3回目、Arduinoへの配線接続と、プログラムの解説になります。


ここで注意事項とお願いなんですが・・・

あくまで「こんな感じで接続してます」って事や、「自分が書いたプログラムはこんな感じです」って事を主に書いていきます。

Arduinoの扱い方や配線方法、各種ユーティリティーのインストールや操作方法、使用する工具やパーツの使い方についての説明は、必要最低限に留めてます。

パーツやユーティリティの基本的な扱い方とかは各自で検索するなどして調べてください。 そこまでの解説をし始めると文章量がとんでもない事になりますし、私自身がしっかりと使いこなせてないので、きっちりした解説が出来そうにないって所もあります。

そういった事情もご理解いただいたうえで読み進めていただけると助かります。
よろしくお願いいたします。


Arduinoのセットアップ

ArduinoIDEのダウンロード先

ArduinoのProMicroにはMicroUSBの端子があり、それでPCと接続する必要があります。
プログラムの作成や、Arduinoへのプログラムの書き込みは専用のツールを使う必要があります。
「ArduinoIDE」がその専用ツールです。 ダウンロードはこちらからできます。
リンク先に移動したら「Windows Installer」をクリックし、「JUST DOWNLOAD」をクリックしたらダウンロードできます。

Arduino Joystick Libraryのインストール

このライブラリを使うと、簡単にArduinoをUSBジョイスティックとして使用する事が出来ます。 このライブラリの公開先はこちら
右側の緑色のボタン「Clone or Download」を押して、「Download ZIP」を押すとダウンロードできます。 落とせたら解凍してください。
解凍したら「Joystick」のフォルダがあると思うので、ArduinoIDEのインストール先の「libraries」フォルダの中に先程の「Joystick」フォルダをそのままコピーしてください。
これでジョイスティックライブラリが使用できます。

スイッチライブラリのインストール

このライブラリはチャタリング防止の為に使用します。 「チャタリング」については聞きなれない言葉で意味が解らない人も多いと思います。 「Arduino チャタリング」で検索を掛けていただくと、その解説がたくさん出てきますので一度お読みください。

簡単に解説すると、スイッチやボタンは押した瞬間にON/OFFを繰り返す習性があり、Arduino自体がその行いに敏感に反応してしまうため、1回スイッチを押しても複数回スイッチを押したとの判定をする傾向があります。
その辺を吸収するためにこのライブラリを使います。

ライブラリの公開さきはこちら
ページの中ほどに「ダウンロードとインストール」の項目があり、そこにリンクがありますのでダウンロードしてインストールしてください。


以上でセットアップは完了です。

Arduinoでやりたい事

次にプログラムを書いていくのですが、最初に目的を明確にしないとプログラムを書くことは出来ません。

前回の記事で、現状の問題点を書きました。 それらに対応するにはどういう動作をArduinoで行わなければいけないのかを考えます。

・ウインカー
問題点:ウインカーを点滅(ON)させ、その後レバーを戻して(OFF)もETS2上ではウインカーは点滅し続けたままになる。(1回しかON/OFFしていない)
ETS2の場合は、ウインカーONでボタンを1回ON/OFFし、ウインカー消灯時にもう1回ボタンをON/OFFさせる必要がある。

対処:ウインカーの接点状態をArduinoで常時監視し、ウインカーがONに(監視している接点が接続状態に)なったらArduinoからジョイスティックのボタンのONにし、0.05秒後にそのボタンがOFFにするプログラムを組む。 その後レバーがOFF(監視している接点が接続されていない状態)になったら、同じようにジョイスティックのボタンをONにし、0.05秒後にOFFにする。

・ハイビーム
問題点1:ウインカーレバーの内部構造により、ライト点灯時以外ではハイビームの位置にスイッチを動かしても接点は繋がらないが、パッシングと同じ接点を使っているため、ライト点灯時のハイビームとパッシングの区別がつけれない。

問題点2:ウインカーの時と同じで、レバーをON/OFFしてもハイビームのままになってしまう。 戻すにはもう1回レバーをON/OFFする必要がある。

対処:ウインカーレバー内部の回路の状態から考えてみたが、ハイビームのレバー位置(レバーの動作状態)を完全に察知する事はこのレバーでは出来ないと判断。 ハイビームとパッシングの端子は共通のため、ETS2にはこの信号をパッシングをして登録する。 ETS2のハイビームの機能は使わない事にした。

・ヘッドライト
問題点:ETS2ではライトの遷移は1つのボタンで行っており、レバーのライトスイッチの様に各ポジションで特定の動作をするようになっていない。

対処:OFF・ポジション・点灯の位置での各端子の接点接続は違っている。  接続状態をプログラム内に変数として定義し、その変数の移行状態によってライトに割り当てたスイッチを押す回数を変える事で対応する。


ハイビームの扱いがちょっと残念なんですが、今の自分の実力だとこれが精いっぱいです。
実際に操作するならば、実車レバーと同等の動きになりますので、そこまで気にはならないと思います。

Arduinoに配線をする

Arduinoに配線した結果がこちら。

前回の記事で割り振ったレバー側の接点と、Arduinoに繋げたPIN番号は以下の通り。

レバー側  どの信号なのか   Arduino側
①     右ウインカー    PIN0
②               GND
③     左ウインカー    PIN1
④               GND
⑤     パッシング     PIN2
⑥     ポジション     PIN3
⑦               GND
⑧     ライト点灯     PIN4
⑨               GND
(GNDはマイナス端子です。 GND接続4本を1本に纏めた上でArduinoに繋げました。)

ウインカー以外はプラス・マイナスは適当に繋げたらいいかなと思ってたんですが、レバー内部の配線が結構複雑でして、上記組み合わせでないとうまく反応しないボタンが出てきました。

ちなみにこの接続をProMicroに繋げただけでは正常に動くかどうか判断が付かないので、実際にArduino用のプログラムを入れてみてテストしてみます。

Leonardoに配線テスト用のプログラムを入れてみる

テスト用プログラムとか行ってますが、実際のところは「ジョイスティックライブラリを使って、使えるPINをすべてジョイスティックのボタンとして使えるようにしただけ」の物ですw ダウンロードはこちら

解凍したら「Leonardo_Button_test」のフォルダの中に同名のファイルが1つあると思います。
ArduinoIDEのスケッチはデフォルトであればマイドキュメントの中のArduinoフォルダに保存されますので、先程のフォルダごとそこに保存してください。

LeonardoをPCと接続してからArduinoIDEを起動し、ボード名とシリアルポートが正常に認識されているか確認してください。

問題なければArduinoIDEのファイル→ スケッチブックにButton_testが出てくると思うので、それを選択してください。

テスト用プログラムが出てきたら、ファイルの下にあるチェックマーク(検証)を押してコンパイルしてください。 問題なくコンパイルできると思います。
コンパイルが出来たら、その横にある「右矢印」を押して、Leonardoにスケッチを書き込みます。
書き込みには数秒掛かります。 「ボードへの書き込みが終了しました。」と出るまではUSBケーブルを抜いたりしないようにしてください。

ここでエラーが出る人は、接続方法を間違っているか、ボード名やシリアルポートの選択を間違っていると思われます。

正常に書き込またら、Windowsのコントロールパネルを開き、「ハードウェアとサウンド」の中にある「デバイスとプリンター」を開きます。

「Arduino Leonardo」の名前のコントローラーが認識されていると思いますので、右クリックで「ゲームコントローラーの設定」を押し、出てきたウインドウでLeonardoが選択されている状態でプロパティを押します。

これでジョイスティックのボタンの状態を確認できるので、ウインカーレバーを動かして、各スイッチがONになったら割り当てられたボタンが光るかどうか確認してください。

また、すべてのスイッチをOFF(または中立)に戻し、すべてのボタンが光っていない事を確認しましょう。

接続に問題が無ければ、以下のように光ります。
・ウインカー右=ボタン1
・ウインカー左=ボタン2
・パッシング= ボタン3
・ライト ポジション=ボタン4
・ライト点灯=ボタン4とボタン5が同時点灯
・ハイビーム=ライト点灯時のみボタン3が点灯 それ以外はボタン3が点灯しない

上記と違う動きをしている場合は配線にミスがあります。

これで配線テストは完了です。

ウインカー用スケッチを導入する

今回の配線で使えるように書いたスケッチを作りましたのでダウンロードしてください。
ダウンロード先はこちら

「Leonardo_ETS2_Brinker_Only」のフォルダをArduinoIDEnoスケッチ保存場所にコピーしてください。(デフォルトはマイドキュメント内のArduinoフォルダ)

上記ボタンテストの時と同様に、このスケッチを起動させます。

起動後に「検証」を行い、問題が無ければ「マイコンボードに書き込む」を行ってください。

書き込みが終わったら、「ツール」 の「シリアルモニタ」を起動させてください。
横長のウインドウが出てくると思いますので、出てきたらウインカーレバーを動かしてください。
左右ウインカーとライトスイッチを動かすと、シリアルモニターに文字が出てくると思います。

・左右ウインカーレバーを入れると「右(左)ON」が表示され、戻すと「右(左)OFF」が表示される。

・ヘッドライトスイッチを廻すと、「(元のスイッチ位置)から(移動先のスイッチ位置)が表示される
例:OFFの状態からポジションに移動すると、 「OFFからポジ」と出て、さらに点灯に動かすと「ポジから点灯」とでます。

・パッシングとハイビームは、直接ボタンとして出力しているため、ボタンテストの時のように 「ゲームコントローラーの設定」の方でボタンが点灯しているかを確認してください。

問題が無ければウインカーの設定は完了です。


次回はG27にレバーを取り付ける様子を説明いたします。


スポンサーリンク