Arduino UNOでMIDIエクスプレッションペダル自作
はじめて電子工作しました。DTM用というかPCソフトウェアのギターエフェクトとかを操作するためにUSB接続できるMIDIエクスプレッションペダルが欲しかったのですが、まったく市販されていないので、自作してみました。思いの外、ネットの情報は古かったりボードが違ったり、より使いやすいソフトがあったりして紆余曲折したので、ここに私の通った手順を纏めておきます。
購入したもの
ステレオジャック 6.35mm インプット/アウトプット用 オープンジャック メス フォンプラグ用 エフェクター自作用 ギター・ベース用 単品 SFA3-JK-Sx1p
ELEGOO Arduino用UNO R3コントロールボード ATmega328P ATMEGA16U2 +USBケーブル
Amazonでそろえると全部で3千円くらいでしょうか。ATMEGA16U2というのが後述のMocoLufaで動作確認されていた部品っぽいのでUNO互換機を買うときは動作実績を調べると良いと思います。ペダルは極性とかあると思いますが、受け取り側を作るのでなんでもいいです。
ステレオジャックのはんだ付け
エクスプレッションペダルの出力はTRSつまりステレオであり、どっちかのチャネルで電圧をうけとり、ペダルの位置に応じた電圧で片方のチャネルで返すっぽいという雑な理解をしています。
ステレオジャックにある三つの端子をジャンパーとはんだ付けした。ボードの5V/GND/A0にそれぞれつなぐ。どれがどれかは勘で試せばいいが、真ん中の根元につながる端子がGNDです。
参考: ステレオジャックの仕組み https://effector-guitar.com/tsunagubasyo/2/
Arduino IDEとドライバの準備
下記のソフトをページに従ってインストールする
Arduino IDEのインストール方法 https://www.arduino.cc/en/Guide/Windows
MIDIを扱うライブラリ https://github.com/FortySevenEffects/arduino_midi_library#getting-started
MIDI Libraryやネット上の例をみて見様見真似でやった下記のソースコードをArduino IDEにコピペして左上の →
ボタンを押してボードに書き込む。
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
int lastVal = 0;
int tempAnalog = 0;
void setup() {
Serial.begin(300); // 300bps で通信
MIDI.begin(MIDI_CHANNEL_OMNI); // 全メッセージ取得
}
void loop() {
// アナログ入力信号の読み出し
tempAnalog = analogRead(A0);
// 10 bit to 7 bit
tempAnalog = map(tempAnalog, 0, 1023, 0, 127);
tempAnalog = constrain(tempAnalog, 0, 127);
// 変更があれば出力
if(tempAnalog != lastVal)
{
// Ch 1 CC11 (expression) に取得した値を送る
MIDI.sendControlChange(11, tempAnalog, 1);
}
lastVal = tempAnalog;
delay(5);
}
参考: ボードもライブラリも違うので注意 https://www.kuassa.com/diy-tutorial-how-to-build-arduino-based-expression-pedal-for-efektor-wf3607/
MIDI デバイスファームウェア
ここが一番ややこしいのですが、Arduinoデバイスとして認識してIDEからコードを書き込むときと、MIDIデバイスとして認識してほしいときの二つの状態がある。 ファームウェアを書き込むDFUモードはPC接続の直前にUSB端子近くのピン(下記画像のRESET, GND)を短絡させているかどうかで切り替えられる。短絡させるのは適当にクリップとか手で押さえていても良い。起動したら手を放さないと認識してくれない。
うまくDFUモードで起動したら、まずMIDIデバイス用のファームウェアを書き換えるソフト dfu-programmer (Win/Mac/Linuxなんでも動きそう) をインストールする。その後、ファームウェアをかきこむ。
Windowsビルドされたdfu-programmer https://sourceforge.net/projects/dfu-programmer/files/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip/download
MIDIデバイスのファームウェア https://github.com/kuwatay/mocolufa/blob/master/HEX/dualMoco.hex
適当にmsysとかpowershellとかいったターミナルでDL後にdfu-programmerを展開したディレクトリで下記のコマンドを打つ
./dfu-programmer.exe ATmega16U2 erase
./dfu-programmer.exe ATmega16U2 flash dualMoco.hex
./dfu-programmer.exe ATmega16U2 reset
MocoLufa
といった MIDI デバイスが DTM ソフトやデバイスマネジャーから見えれば成功。
コードを修正したいなどファームウェアをデフォルトに戻すときは dualMoco.hex
ではなく Arduino-usbserial-atmega16u2-Uno-Rev3.hex
を flash します。
動作検証
動いてる様子を動画に撮りました。GuitarRigのWahPedalを操作しています。ワウワウしています。