【DJ】Arduinoで自作MIDIコントローラーを作ってみる【VJ】
普段からイベントでVJ(DJの音に合わせて映像を出す係)をさせて頂くことが多いのですが、VJをやっているといつも感じる事があります。
VJモテない!!!!
いつもモテるのはDJばかりで、DJを盛り上げるために裏でひたすらに頑張っているVJは陽の目を浴びることはありません…。
DJより早く会場入りして機材のセッティングして、イベントによっては1人でOPENからCLOSEまでの8時間ノンストップで映像を出し続け、イベント終了後も機材撤収の為に最後まで残っているという、こんな理不尽な事ってあるのでしょうか!?
イベントを盛り上げるための裏方とはいえ、VJもプレイ中の見栄えをカッコ良くしてモテモテになりたいですよね!
という訳で、見栄えを良くする為だけにいつもはこのMIDIコントローラーを使っています。カラフルにLEDとか光るのでカワイイです。
でもこれでも市販のMIDIコンを使ってると他のDJ・VJの人と被ったりしてなんか普通だし、自分が目指してる「ギーク感」が出ないので、自分でMIDIコントローラーを作ることにしました!
■必要機材
自作MIDIコントローラーを作るにあたり、以下のものを用意しました。
材料は全て近くのマルツ電波パーツ館で購入しました。
- Arduino UNO 2520円 http://www.marutsu.co.jp/shohin_101804/
→ メインの機能はArduinoで作ります。 - トグルスイッチ 241円×4個 http://www.marutsu.co.jp/shohin_5403/
→ 見栄えを考えて割と大きめの物を選択。 - アーケード型プッシュスイッチ 189円×4個 http://www.marutsu.co.jp/shohin_9604/
→ 大きめのボタンを探してたのですが、安くて大きかったのでこれにしました。 - LED 10個入り 430円 http://www.marutsu.co.jp/shohin_68236/
→ 必要なのは8個でしたが、10個入りが安かったので青色LED10個入りを1袋買いました。 - カーボン抵抗100Ω 100個入り 283円 http://www.marutsu.co.jp/user/shohin.php?p=1124
→ スイッチの数ぶんなので8個で良かったのですが、100個単位での販売でした。 - ケーブル 1m 33円×4色 http://www.marutsu.co.jp/shohin_8078/
→ これはなんでも良いはず。 - 2.0mmピッチコネクター 8円×5個 http://www.marutsu.co.jp/shohin_14517/
→ ボタンを取り替えられるのであった方が良いです。 - ケース
→ 中身を見せたかったので400円くらいの透明なプラスチックケースを選びました。 - はんだごて&はんだ
→ 手持ちの物を使用。
■Arduinoで仕組みを作る
まずは先に中身の仕組みを作ります。
接続は以下の図の様に行いブレッドボード上でテストします。
ボタン→LED→制限抵抗のセットを8列並列に接続した感じです。
ボタンとLEDの間に読み取り用のジャンプワイヤを接続しています。
電子工作は素人なのでプルダウン抵抗の計算とかは適当ですが、一応LEDの電流制限用に100Ωくらいを使っておけばとりあえず動作は問題無さそうでした。
ボタンの押下状態取得とLED点灯を同時にやるにはコンデンサを使ってゴニョゴニョするのが正解な気がしますが、よくわからなかったのでこんな感じにしました。皆さんは詳しい方に聞いてやってみて下さいね(^o^;)
上の配線をユニバーサル基板上で作るとこんな感じです。
少し工夫したのは、読み取り様にジャンプワイヤのメスをさせるようにピンを上から出した所と、ボタンを取り替えたり脱着しやすいように2.0mmピッチコネクターを取り付けました。
こんな感じでボタンにも2.0mmピッチコネクターのオスを取り付けておけば、ボタンやスイッチの取り替えが容易にできます。
これで中身の仕組みは出来たので続いて…
ケースを用意します。
マルツパーツ館で売っていた400円くらいのケースに電動ドリルドライバで穴を開けました。
そこに先ほどのスイッチをはめ込みます。
後は先程作った基盤と組み合わせると
完成です!
ボタンを押すとLEDも光ります。
■スケッチ
あとはArduinoのスケッチを書き込むだけです。
スケッチは以下のようにしました。
[c]
/*
* ArduinoでMIDIコントローラーを作ってみる
* Author: Teruaki Tsubokura
* Web: http://teruaki-tsubokura.com/
*/
#define NOTE_ON 144
#define NOTE_OFF 128
#define CONTROL_CHANGE 176
#define ALL_NOTE_OFF 120
#define BUTTON_MAX 8
int pin_no[] = {2,3,4,5,6,7,8,9}; //ピン番号を保存
int sw_state[] = {0,0,0,0,0,0,0,0}; //スイッチ状態を保存
int note_no[] = {60,61,62,63,64,65,66,67}; //スイッチ毎のノートナンバー
void setup() {
//スイッチ初期設定
for(int i = 0; i < BUTTON_MAX; i++){
pinMode(pin_no[i], INPUT);
}
//MIDI開始
Serial.begin(31250);
sendMidi(CONTROL_CHANGE, ALL_NOTE_OFF, 0); //1バイト目:コントロールチェンジ、2バイト目:オールノートオフ
}
void loop() {
//PIN状態が更新されていればシリアル送信
for(int i = 0; i < BUTTON_MAX; i++){
int _state = digitalRead(pin_no[i]);
if(sw_state[i] != _state){
sw_state[i] = _state;
//MIDI
sendMidi(NOTE_ON, note_no[i], sw_state[i] * 127);
}
}
}
void sendMidi(int cmd, int pitch, int velocity) {
Serial.write(cmd);
Serial.write(pitch);
Serial.write(velocity);
}
[/c]
■Arduinoのファームウェアを書き換える
但し、このままではArduinoはUSB-MIDIデバイスとしては認識されないので、
市販のDJ・VJソフトでこのデバイスを使うにはArduinoのファームウェアを書き換える必要があります。
ファームウェアには以下のMidi Firmware for Arduino Uno (Moco)を使用させて頂きました。
http://morecatlab.akiba.coocan.jp/lab/index.php/aruino/midi-firmware-for-arduino-uno-moco/
Macで行うと少し手順がややこしかったのですが、なんとか書き換えたらMIDIデバイスとして認識されました。
私はQuartzComposerで動作チェックを行いました。
Comment ( 1 )