アナログハンドブレーキをJoystickを使って制作する!また電子工作してみたよ(๑>◡<๑)
皆様こんにちはこんばんは、ebichanです。
さてラリーシムを楽しんでらっしゃる皆様。当然ハンドブレーキにもこだわりを持たれて選んでらっしゃることと思います。
※ 記事中でアフィリエイトリンクを利用しています。
アナログ式のハンドブレーキへの憧れ
そういうebichanはハンドブレーキがド下手で、走行中に使うことはほとんど無いためG29に切り替えた時点から、ハンコン上のスイッチに適当に割り当てて、カウントダウンの開始のトリガー程度にしか使っていませんでした。
そうは言ってもebichanは形から入るタイプですから、アナログ式のハンドブレーキを導入したいなと思っていて色々と物色しておりました。ただしコックピットが剛性の高いものではないことから、ガッツリと力を入れて引くタイプは合わないため、何か別の方法を模索しておりました。
ebichan が使っているコックピットはこちらの 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 でした。よーし練習だ!
ディスカッション
コメント一覧
まだ、コメントがありません