アナログハンドブレーキをJoystickを使って制作する!また電子工作してみたよ(๑>◡<๑)

皆様こんにちはこんばんは、ebichanです。

さてラリーシムを楽しんでらっしゃる皆様。当然ハンドブレーキにもこだわりを持たれて選んでらっしゃることと思います。

※ 記事中でアフィリエイトリンクを利用しています。

アナログ式のハンドブレーキへの憧れ

そういうebichanはハンドブレーキがド下手で、走行中に使うことはほとんど無いためG29に切り替えた時点から、ハンコン上のスイッチに適当に割り当てて、カウントダウンの開始のトリガー程度にしか使っていませんでした。

そうは言ってもebichanは形から入るタイプですから、アナログ式のハンドブレーキを導入したいなと思っていて色々と物色しておりました。ただしコックピットが剛性の高いものではないことから、ガッツリと力を入れて引くタイプは合わないため、何か別の方法を模索しておりました。

ebichan が使っているコックピットはこちらの Playseat Challengeです。

Playseat Challenge を購入!満足度高し!!

そうこうしながらAmazonを彷徨っているうちに、アナログ式のJoystickで似たようなことが出来るんじゃ無いかと思い当たりました。

今回はそれを使ったハンドブレーキ製作記です。お付き合いいただければ幸いです。

準備

アナログJoystick

ebichan が選んだのはこちら。アナログ式のJoystickです。なんとなく、形がハンドブレーキに似たものを選びました。サイズ・引き心地・質感などは全くの別物ですがw


ジョイスティック ポテンショメータ -D202X-/R4 10K 2D モニター キーボード ボール ジョイロード コントローラー
実際のサイズ感はこのような感じ。突き出し量は約40mm といったところ。

箱(ケース)

先日取り付けたシフター用のマウンタにシフターと並べてJoystickを取り付けるために、金属製のケースを選びました。上下分割式で、下半分をマウンタに取り付け、Joystickを取り付けた上半分を合体させることで、コックピットに取り付けます。

Arduino

Joystickからの入力をPCに伝えるために必要となります。入力ピンがまだ余っているため、前回のペダル回で使用したものを再利用して、それぞれの機能を併用する方式とします。書き込むソフトも前回使用したJoystickLibrary + SimRacingLibrary の組み合わせで、今回のデバイス向けに若干変更を加えます。

工具類

金属ケースに加工をするために、ドリル・ヤスリ等が必要です。家にある適当なものを使おうと思いましたが、ヤスリだけは別途ダイヤモンドヤスリを追加購入しました。良い工具を使うと工作がグッと楽になります。

さてこれで準備ができました。それでは工作に取り掛かっていきましょう。

いざっ、製作

ケースの加工

何と言ってもこれが一番大変でした。次は楽をするためにプラスチックケースを選ぶかもしれません。

まずは位置決めをして、ドリルで穴を開けていきます。

ケースの下半分には、シフターのマウンタにつけるための5.5mm穴を2箇所開けます。

ケースの上半分には、Joystickを取り付けるための丸穴を開けます。直径40mm程度の穴を開ける必要がありますので、ドリルで大まかに丸く何箇所か穴を開け、それらをニッパーで繋ぎ合わせ、その後バリ取りをして仕上げます。

次に内部にAruduinoを格納しG29ペダルと接続するために、USBケーブル用とDSUB 9ピンのコネクタをつけるための穴を開けます。これもドリルで下穴を開けておき、ニッパーで繋げた上バリを取りつつ形を整えます。

まあなんとか穴が開きました。ガタガタですが(笑)

配線をしてみる

Arduino に書き込むソフトには少し細工が必要です。今回は前後方向はハンドブレーキとして、左右方向はスイッチとして使えるようにします。

ハンドブレーキ

前後方向の入力をArduinoのA10ピンに入力します。このピンの入力を監視すると、中央(デフォルト値)では500前後、前後に倒すことにより0から1000程度まで値が変化します。10ビットの分解能(2^10=1024)で認識されているようですね。

左右スイッチ

こちらはシフターの3,4速を模擬して、左が3速、右が4速に入ったことにして出力するようにしました。実際の作動方向と90度変換して入力するイメージです。左右方向の入力をArduino のA3ピンに入力します。

配線の様子

とりあえずブレッドボードで配線してみるとこのような形になりました。

ソフトウェアの変更

ハンドブレーキ

ハンドブレーキの入力はそのままHandbrakeクラスとして扱います。setup() 関数と loop() 関数の中身を既存のLogitecPedalの処理と同居させます。

ただこのままでは、中立付近が500、目一杯手前に引いた時に約1000となるため map() 関数を使用して、500->1023 を 0->1023 に変換します。これで中立付近では0%入力、目一杯引いた時に100%入力となるはずです。中央値の512でなくADC_Toleranceを引いているのは、中立付近での位置のばらつきを考慮したものです。

左右スイッチ

こちらは一工夫必要です。AnalogShiter クラスを再利用するのですが、入力は1チャンネルのみで、3,4速のみが選択される事を模擬します。

AnalogShifterクラスを派生させた、JoystickShifterクラスを定義し、そのコンストラクタの中に、ニュートラル、1 – 6速 の合計7つのポジション(座標)を定義します。シフターでの左右の動き(ebichan 環境では上下)がX軸に相当しますが、そのピンは接続されていないピンのため入力は常におよそ500となります。それにより3、4速のみが選択される状況を作り出します。

次、Joystick_ 構造体の初期化時にボタンの数を二つに設定し、Handbrake を Rz 軸に割り当てます。

そして shifter.begin() 呼び出しを setup() 関数の中に、shifter.update() 呼び出しなどを loop() 関数から呼び出されるように、既存の処理に追加します。コンパイルが通ったら、Auduinoにダウンロードしておきましょう。

さて、いよいよ実走!

それではゲーミングPCに接続してみます。コントロールパネルから、ゲーミングデバイスのプロパティを選択し、Arduino のプロパティを確認します。

おおっ、Joystick を手前に引くとZ軸の入力が、左右に倒すと1、2番のスイッチとして認識されています!やりました、成功です!!

(と書くと、一発で動いたように見えますが、実はめちゃくちゃ試行錯誤しましたww)

それでも動けばこっちのもの。勝てば官軍です。

DirtRally 2.0 でハンドブレーキと、ヘッドライト、ワイパーに割り当てて走ってみます。

いや、バッチリです。相変わらずハンドブレーキは下手くそで泣きが入りますが、振る舞いとしては完璧です。これで練習していけば、徐々に上手になっていくでしょう。

というわけで、Arduino 電子工作第2弾、Joystickでのアナログハンドブレーキ製作でした。面倒ではありますが、そんなに高価なものでもないので、皆さんも是非電子工作にトライしてみて下さい。ラリーシムライフが一段と楽しくなりますよ!

ではでは、ebichan でした。よーし練習だ!

G29

Posted by ebichan