FLYING

〈全日本・紀文豆乳飲料シリーズ「麦芽コーヒー」の500ミリリットルパックを扱う小売店が少ないことに遺憾の意を表明する会〉活動記録

USBサスティンペダルを作った

以前買ったmicrokey-61にはサスティンペダルを繋ぐ端子が用意されていなかったので,単体で使えるサスティンペダルを作った。これはMIDIコントローラとして動作して,ペダルを踏んだり踏まなかったりすることで,Control Changeの64番を送信する。

必要なものとしては,どこのご家庭にもあるArduinoとキーボード用のフットペダル,抵抗,LED(これはオプション)くらいのもの。Arduinoがだいたい最低でも2000円くらい,フットペダルがYAMAHAのFC-5で1000円くらいするので,3000円くらい出してもいいよって人向け。どうせ工作するならボリュームやらトグルスイッチやらを付けて,汎用MIDIコントローラとして使う方が嬉しみがあるかもしれない。

回路図。Hello Worldレベルなので私にも作れました。スイッチが絶縁状態だと電流が流れないので電圧降下も起こらず,端子電圧=VCCになるのがポイント。LEDの回路は特に必須ではないが,動作が正しいことを確認するために付けておいたもの。

完成品の写真*1

フットペダルのインターフェイスは6.3mmのモノラルプラグなので,このような箱型のジャック部品を用意しておく。私が使ったペダルとジャックの組み合わせだと,下の写真ではんだ付けされている2つの端子がスイッチによって導通したり絶縁されたりした。スイッチを踏むと絶縁状態,足を離すと導通状態だということが分かったので,踏んだ状態がHIGHで離した状態がLOWになるよう回路を組んだ。

Arduinoのスケッチ。

int pin_switch = 12;
int pin_led = 13;
int prev_value = 0;

void setup() {
  pinMode(pin_switch, INPUT);
  pinMode(pin_led, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  int value = digitalRead(pin_switch);
  if (value != prev_value) {
    digitalWrite(pin_led, value);
    sendMidiMessage(0xb0, 64, value == HIGH ? 127 : 0);
  }
  prev_value = value;
}

void sendMidiMessage(unsigned char message, unsigned char control, unsigned char value) {
  Serial.write(message);
  Serial.write(control);
  Serial.write(value);
}

実際には,MIDIと同等のデータをSerial over USBで送信しているだけなので,これをPC側でMIDI信号に変換してあげる必要がある。この変換をやってくれるのがThe Hairless MIDI to Serial BridgeというフリーソフトMac環境の場合,Audioのシステム設定でIAC Driverを有効にして仮想バスを出力用に1つ作成,Bridgeの出力をそこに繋ぐ。

DAWなどのソフトウェアで,MIDI入力にキーボードと前述の仮想バスを設定することで,サスティンペダルとして使えるようになる。回路にボリュームやスイッチを増やせば,他のControl ChangeやNote On/Offの信号も送れるようになるし,PC側で工夫してあげれば,フットスイッチのON/OFFをエロゲのスペースキー代わりにするようなこともできると思う。

ちなみに,スケッチの中にSerial.begin(115200);という行があるが,これはシリアル通信のボーレート(bps)を指定している部分で,Bridge側の設定とこの数字を合わせておかないと,うまく信号を送受信できないので注意。また,Arduino特有の注意点として,0番ピン及び1番ピン(RX/TXと印字されている)はシリアル通信に利用されるので,ここに他の入出力を繋ぐと回路が動かない原因に延々と悩むことになる(悩んだ)。

*1:実は写真の回路に付いている抵抗は上の回路図で示したものとは微妙に違うのだが,理想的には回路図に示したような値の抵抗を使うのがいいと思う。LEDを駆動するならおそらく10mAもあれば充分だし,スイッチを流れる電流はどうせ無駄なので抵抗はそれなりに大きいもののほうがよい