Arduinoでアナログ入力を使ってゲームコントローラーを作る

マイコン/Arduino

Arduinoでゲームコントローラー(ジョイスティック)を作る2回目です。
前回はボタンのON/OFFだけができる簡単なものゲームパッドを作りました。今回はアナログ入力を利用してハンドルやアナログスティック、ラダーペダルを作る方法を紹介します。

簡単のために、可変ボリューム1つを使って1軸(今回はラダーペダル)のみのゲームコントローラーを作ります。今回のスケッチではラダーペダルに割り当てていますが、X/Y軸に割り当ててジョイスティックのようなものも作ることができます。

配線図

Arduino ProMicroのアナログ入力1番にボリュームを接続します。下図のような配線ですね。

ProMicroと可変抵抗器の配線図

スケッチ

#include <Joystick.h>
#include <Wire.h>

Joystick_ Joystick = Joystick_(
0x03, // reportid
JOYSTICK_TYPE_GAMEPAD, // type
1, // button count
0, // hat switch count
false, // x axis enable
false, // y axis enable
false, // z axis enable
false, // right x axis enable
false, // right y axis enable
false, // right z axis enable
true, // rudder enable
false, // throttle enable
false, // accelerator enable
false, // brake enable
false // steering enable
);

void setup() {
Joystick.setRudderRange(-512, 511);
Joystick.begin();
}

void loop() {
int Value_Rudder =analogRead(1) - 512;
Joystick.setRudder(Value_Rudder);
}

Joystickの宣言部でラダーペダルをtrueにして、setup()内でラダーペダルの入力範囲を指定します。

Joystick.setRudderRange(-512, 511);

promicroではADコンバーターの分解能は10bit(1024段階)なので先に定義したラダーペダルの入力範囲に合わせてセットします。

int Value_Rudder =analogRead(1) - 512;
Joystick.setRudder(Value_Rudder);

動作確認

前回同様にUSBコントローラーのセットアップから動作を確認します。
ボリュームの回転に合わせてラダーペダルが反応するはずです。

ゲームコントローラーの動作確認画面

デジタル入力と違ってノイズに弱いのでボリュームを触っていなくても小刻みに反応するかもしれません。この辺は各自工夫が必要です。(ローパス回路をつけるとかソフト側で移動平均をとるとか)

ProMicroやESP32などの内蔵ADCはノイズが大きく、分解能もさほど高くありません。I2C接続のADS1115などのADC専用モジュールを使うと大きく改善されます。

今回はボリュームを使いましたが、フライトコントロールなどで使えるジョイスティックであればアマゾンなどでも手に入ります。

スティックの傾きに応じて抵抗値が変化するものを選んでください。
中には4方向それぞれに対応したスイッチがONになるだけ、というジョイスティックもあるので注意してください。

コメント

  1. 例の通知機能で、ブログの更新が届きました(笑)

    私のarduinoは引越しの時に一体どこに紛れ込んだのか・・・、読みながら半年ぶりにその存在を思い出しました(苦笑)

  2. こんなしょうもないブログ監視してどうするんですかw

    ボタン1回おしたら1分間に16連打するゲームパッドとかも作れますよ。