G25のペダルをArduinoにつなぐ

G25のペダルだけ入手したので独立させてPCにつなぎます.
G25のペダルにはD-sub9pinのオスがコネクタとしてついているのでD-sub9pinのメスコネクタを購入して線をArduinoまで引っ張って良しなにします.

https://github.com/functionreturnfunction/G27_Pedals_and_Shifter/

こちらにG27での利用例が一式上がっているのでこちらを参考にしました.
ペダルが5500円 ProMicroが400円しないくらい,
ジャンパワイヤとコネクタも安いので6500円くらいになりました.

使ったもの

  • ブレッドボード x1
  • Arduino Pro Micro互換機 x1
  • Dsub 9pin メスコネクタ x1
  • ジャンパワイヤ オス-オス x10
  • 熱収縮チューブ

ハード側

7セグは外すのが面倒でつけっぱなしなだけで特に意味はありません.

事前準備

ジャンパワイヤを半分に切ってケーブルの被膜を向いておきます.
Dsub側に予備ハンダをつけてからケーブルをつけます.
使うピンは6本しかないので最低限のピンだけでも大丈夫です.下記参照
熱収縮チューブを収縮させて終わり.

配線

以下の表に従って配線します.

Dsub側 pin番号Arduino側 pin番号用途
1+5V(VCC)+5V
2A0アクセル
3A1ブレーキ
4A2クラッチ
6GNDGND
9GNDGND

ソフト側

事前準備

機器によって多少差があるので予めそれぞれのペダルの値の範囲を確認します.

1void setup(){
2    Serial.begin(9600);
3}
4
5void loop(){
6    Serial.println(analogRead(A0)); //アクセル
7}

アクセルから順に値の範囲を確認します.
自分の場合は
アクセル 51-900
ブレーキ 40-890
クラッチ 40-910
くらいでした.

コーディング

前回の記事を参考にArduinoJoystickLibraryを使います.
事前に調べた値をRangeとして設定して常時値を流し続けるだけです.

 1#include <Joystick.h>
 2
 3Joystick_ Joystick = Joystick_(
 4  0x03,                    // reportid
 5  JOYSTICK_TYPE_GAMEPAD,   // type
 6  0,                       // button count
 7  0,                       // hat switch count
 8  false,                    // x axis enable
 9  false,                    // y axis enable
10  false,                   // z axis enable
11  false,                   // right x axis enable
12  false,                   // right y axis enable
13  false,                   // right z axis enable
14  false,                   // rudder enable
15  true,                    // throttle enable
16  true,                    // accelerator enable
17  true,                    // brake enable
18  false                    // steering enable
19);
20
21void setup(){
22  Joystick.begin();
23  Joystick.setAcceleratorRange(50, 900);
24  Joystick.setBrakeRange(40, 890);
25  Joystick.setThrottleRange(40, 910);
26}
27
28void loop(){
29  Joystick.setAccelerator(analogRead(A0))
30  Joystick.setBrake(analogRead(A1))
31  Joystick.setThrottle(analogRead(A2))
32}

こんな感じで値が取れるので確認しておかしなところがないか確認します.
ゲーム側で設定値の反転があることが多いので回避できること多いですが,
いくつかゲームで設定してみて使った感じアクセルとブレーキはRange逆の方が良さそうですね.

おまけ

雰囲気で書いたFritzingです