はじめに
本記事はDDR(Dance Dance Revolution)のフットコントローラをArduino Microを介してパソコンに認識させるための改造メモです。
Amazonでは下記のようなDDRのパチモンが、よくわからないメーカーから販売されています。
USBでPCと接続・認識しますが、Mac catalinaでいまいち認識しなかったので、仕組みを理解する・分解を楽しむために改造してみました。
有料ソフトでこういったコントローラを認識するソフトがあるので、改造が手間という場合はそちらを使った方が良さそうです。
必要なもの
- フットコントローラ
- Arduino Micro (もしくはArduino Leonardo、Arduino Due)
→ HID機能をつかって入力をキーボードのボタンに割り当てるためHID機能がついているボードを使います。
分解
基板部分を分解すると、下記のようになっていました。
フットコントローラ部分の接続は薄いフィルムとなっていて、基板部分と接触することでつながっています。
真ん中の少し太い線がGNDで、それ以外がフットコントローラのそれぞれの入力ピンとなっています。
そこから配線を適当に伸ばします。
そしてこれらをマイコンにつなぎます。
GNDはGND、入力ピンはデジタルピンに繋ぎます。
これで回路の準備は終わりです。
プログラム
Githubにも一応あげておきます。
まずはどの入力ピンがどのボタンに接続されているか確かめます。
下記のプログラムのピン番号は任意です。
ボタンとピンの割り当てがわかればメモしておきましょう。
# define SERIAL Serial
void setup() {
SERIAL.begin(115200);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
pinMode(15, INPUT_PULLUP);
pinMode(16, INPUT_PULLUP);
}
void loop() {
SERIAL.println("Pin 3 is : ");
SERIAL.println(digitalRead(3));
SERIAL.println("Pin 4 is : ");
SERIAL.println(digitalRead(4));
SERIAL.println("Pin 5 is : ");
SERIAL.println(digitalRead(5));
SERIAL.println("Pin 6 is : ");
SERIAL.println(digitalRead(6));
SERIAL.println("Pin 7 is : ");
SERIAL.println(digitalRead(7));
SERIAL.println("Pin 8 is : ");
SERIAL.println(digitalRead(8));
SERIAL.println("Pin 9 is : ");
SERIAL.println(digitalRead(9));
SERIAL.println("Pin 10 is : ");
SERIAL.println(digitalRead(10));
SERIAL.println("Pin 11 is : ");
SERIAL.println(digitalRead(11));
SERIAL.println("Pin 12 is : ");
SERIAL.println(digitalRead(12));
SERIAL.println("Pin 13 is : ");
SERIAL.println(digitalRead(13));
delay(1000);
}
Arduino Microに書き込むプログラムは下記の通りです。
フットコントローラの入力をキーボードの入力に置き換えています。
# include <Arduino.h>
# include "Keyboard.h"
# define SERIAL Serial
const int inputPin = 3;
bool currentState = HIGH;
bool beforeState = HIGH;
void setup() {
SERIAL.begin(115200);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
pinMode(15, INPUT_PULLUP);
pinMode(16, INPUT_PULLUP);
Keyboard.begin();
}
void loop() {
int pinNum[11] = {3, 4, 5, 6, 7, 8, 9, 10, 14, 15, 16};
#下記は文字コード(ASCIIコード)
unsigned char s[11] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70, 0x71};
for(int i; i<11; i++){
if ( digitalRead(pinNum[i]) == 0){
//digitalWrite(ledPin, HIGH);
SerialUSB.println("Push!");
#ボタンがおされたときに文字を入力
Keyboard.press( s[i] );
} else {
//digitalWrite(ledPin, LOW);
SerialUSB.println("Release!");
#ボタンがおされなくなったら文字入力を終了
Keyboard.release( s[i] );
}
}
delay(500);
}
本当に雑な所感
Arduino MicroやLeonardo、 DueのHID機能をつかいこなすと面白いことができそう。