先日、サウンドハウスに「USB-UART変換ボードに抵抗を2本つければMIDI制御ができる」という内容の 記事 を投稿しました。しかし、USB-UART変換ボードを使うにはパソコンが必要で、ギターの演奏中に足を使ってMIDIを切り替えることは難しいという課題が残っていました。そこで今回は、マイコンとフットスイッチを用いて、足で操作できる「なんちゃってMIDIコントローラー」の作り方を紹介したいと思います。
マイコンとは
「マイコン」とは「マイクロコントローラー」の略で、CPUやメモリ、I/Oポート、各種電子回路を1チップに集約し、プログラムを書き換えて多様な電子制御に対応できるようにした集積回路のことです。サイズはコンパクトで、価格はピンキリですが安いものであれば数百円で買うことができます。特に、1枚の基板にマイコンと一緒に電源レギュレーターやテスト用LEDなど、マイコンを使うときに頻繁に用いられる周辺部品を一緒に実装した「マイコンボード」は大変便利で、ボードが1枚あればいろんなところに活用することができます。MIDIの制御に利用するUART通信はマイコンのデバッグに頻繁に使われるので、ほとんどのマイコンで利用することができます。
なんちゃってMIDIコントローラーの概要
今回は、フットスイッチを押すと決められたMIDIメッセージを送信するだけのシンプルな機能を持つMIDIコントローラーを制作します。送信するMIDIメッセージは何でもよいのですが、今回は前回の記事で使ったマルチエフェクターの GP-200LT のパッチの中のディストーションブロックをオンオフするメッセージを送ることにします。見栄えにはこだわらず、なるべく予算を抑えて作成することを目指し、さらなる機能の追加や見た目をよくする方法は、読者の皆さんの創意工夫にお任せしたいと思います。
なんちゃってMIDIコントローラーの材料
まず最初に、コントローラを作るための材料を集めます。今回使うものは以下の通りです。
1. Raspberry Pi Pico
マイコンにもいろんな種類がありますが、今回は「価格が安いこと」「入手が簡単なこと」「使い方が難しくないこと」の3点を重視して、Raspberry Pi Pico(通称「ラズパイピコ」)を使うことにしました。
ラズパイピコは千円以下で購入できるので財布に優しく( 参考 )、国内には代理店や販売業者が豊富で取り扱っている通販サイトも多いです。使う難易度については、開発元が提供するソフトウェア開発キットを使った方法はかなり難しいですが、Arduino IDEというツールを使えば初心者でも簡単に動かすことができます。私の場合、家にたまたまラズパイピコの互換ボードが1枚あったのでそれを使うことにしました。互換品なので正規品とは色が違いますが使い方は同じです。購入当時は600円弱でした。
2. 3PDTスイッチ
足で踏むためのフットスイッチで、ギター用の自作エフェクターの制作でも使われるものです。今回はマイコンの入力を切り替えるだけなので3PDTである必要はなく、SPDTやSPSTでもよかったのですが、いつか自作エフェクターを作ってみたくていくつか買っておいたエフェクター用の3PDTスイッチを流用することにしました。価格は1つあたり200円程度で、オルタネイトスイッチです。
3. グリーンピースの缶詰の空き缶
今回は「見栄えを気にしない」という方針なのでマイコンは基板むき出しのまま配線する予定ですが、フットスイッチはそのまま使うわけにはいきません。安定していて、足で踏み込んでも変形しない頑丈な筐体が必要です。サウンドハウスではその用途に適したアルミボックスが販売されていますが、缶詰の空き缶でも代用可能です。近くのスーパーでギターのフットスイッチにぴったりな小さくてかわいらしい青豆の缶詰を見つけたので、試しに購入してみました。価格は107円です。
4. ステレオケーブル
普通のMIDIコントローラーにはMIDI信号を出力するために3.5mmのTRSジャック がついています。しかし、エフェクターにも同様のジャックがついているため、コントローラーの出力端子をプラグにしてエフェクターのジャックに繋げても信号の伝達には問題がありません。そこで、昔購入したオーディオ機器に付属していたステレオケーブルを使うことにします。
5. 抵抗
MIDI出力回路のTXとVCCに接続する抵抗です。ラズパイピコの信号は3.3V系なので、10Ωと33Ωの抵抗が必要です( 参考 )。以前電子工作に挑戦するために購入した抵抗セット(400円で購入したもの)がありましたが、難しさに挫折し箪笥の肥やしになっていました。調べてみたところ、10Ωの抵抗は見つかりましたが33Ωの抵抗は含まれていませんでした。そのため、代わりに100Ωの抵抗を3本使用することにします。
6. 配線材
各部品をつなげるための配線材です。ラズパイピコにはピンヘッダーがついているので、デュポンワイヤーを使用します。一方、3PDTスイッチには通常のケーブルをはんだ付けして使用することにします。これらの配線材も、以前電子工作に挑戦した際に購入したものです。
なんちゃってMIDIコントローラーの回路図
次に、各部品をどのように接続するかを決めます。今回は、以下のように配線を行います。
回路図の左側の大きな長方形はラズパイピコを示しています。回路図ソフト(KiCad 8.0)ではチップ単体のシンボルを使用していますが、ボード全体を表すものとして読み替えてください。右下の小さな長方形はスイッチを示しています。今回使用するスイッチは3PDTのものですが、3本ある経路のうち1本しか使わないため、回路図上ではSPDTのシンボルを使用しています。右上には3.5mmのTRSプラグと抵抗のシンボルがあります。
TRSプラグはラズパイピコのUART端子に接続します。ラズパイピコのUART端子はある程度自由に選べますが、今回はデフォルトでUART0の送信端子として割り当てられているGP0のピン( 参考 p.4)を使用します。UARTの送信端子を10Ωの抵抗を介してTRSプラグのチップに接続し、3.3V電源は33Ω(100Ω/3)の抵抗を介してリングに接続します。スリーブはグランドに接続します。
フットスイッチはGP17に接続します。UARTの受信端子であるGP1以外のピンであれば問題ありませんが、私のボードではGP17が端っこにあり分かりやすいため、このピンを選びました。スイッチの片端はグランドに接続し、もう片方は解放のままにします。ラズパイピコはGPIOを内部でプルアップ(回路の端子を、ある程度高い抵抗を挟んで電源+につなげること)できるため、片端が解放されていても問題ありません。
なんちゃってMIDIコントローラーのプログラム
続いて、ラズパイピコに書き込むためのプログラムを作成します。ラズパイピコのプログラムを作成するためのC言語用ソフトウェア開発キット(SDK)が開発元から提供されていますが、これを使ったプログラム設計は難易度が高く、環境構築にも手間がかかるため、私には使いこなすことができませんでした。そこで、Arduino IDEというツールを用いてプログラムを作成することにしました。この記事ではツールの導入や設定方法の詳細には触れず、実際に書いたコードのみをお見せします。
#define SWPIN 17 // GP17ピンをスイッチ入力として使用
uint8_t pinstate; // ピンの状態を保存し、スイッチの切り替えを検出
uint8_t midistate = 0x00; // ディストーションのオンオフ状態(0x00: オフ, 0x7F: オン)
uint8_t midibuf[3] = {0b10110000, 49, midistate}; // MIDIメッセージのバッファ
void setup() {
pinMode(SWPIN, INPUT_PULLUP); // GP17を入力ピンとして設定し、内部プルアップ抵抗を有効化
pinstate = digitalRead(SWPIN); // 入力ピン(GP17)の初期状態を保存
Serial1.begin(31250); // UARTを31.25kbpsでセットアップ(MIDIの標準ボーレート)
}
void loop() {
// スイッチの状態が変わったかどうかをチェック
if(pinstate != digitalRead(SWPIN)){
delay(10); // チャタリング対策のため短い遅延を挿入
if(pinstate != digitalRead(SWPIN)){
midistate ^= 0x7f; // ディストーションのオンオフ状態をトグル(反転)
midibuf[2] = midistate; // MIDIメッセージの3バイト目(状態)を更新
Serial1.write(midibuf, sizeof(midibuf)); // 更新されたMIDIメッセージを送信
}
}
pinstate = digitalRead(SWPIN); // 現在のピン状態を保存
}
各行の実行内容については、コード中にコメントとして記載してあります。MIDIメッセージの詳細については前回の記事をご参照ください。コンパイルしてエラーがなければ、ラズパイピコにプログラムを書き込みます。
なんちゃってMIDIコントローラーの組み立て
プログラムを書き込んだラズパイピコと他の部品を接続します。
1. 缶の穴あけ
空き缶にスイッチと配線を通すための穴を空けます。スイッチを通す穴の直径はおよそ1.3cm程度です。配線用の穴には、ケーブルが切れる恐れがあるため、養生テープを貼ってクッションを施しています。
2. スイッチとケーブルのはんだ付け
スイッチにケーブルをはんだ付けします。スイッチの端子は3×3の配置になっているため、どの3端子がスイッチとして機能するかをテスターで確認してから配線します。ラズパイピコのGP17とグランドに接続するために必要な2端子だけを使用しますが、他の端子にも配線しているのは、将来的に別の用途で使う可能性があるためです。
3. スイッチと缶の組み立て
スイッチを缶の穴に通し、付属のねじで固定します。その後、配線を横穴から引っ張り出します。手持ちのケーブルが1色しかなく、どの端子がどの接続に対応するかわからなくなるため、GP17に接続する真ん中の端子には養生テープでマークを付けておきました。
4. ケーブルの加工
MIDI信号を送信するTRSケーブルは、元の状態では接続が難しいため、まずケーブルを切断し中の被覆を剥いておきます。中の銅線がほつれやすいので、先端には軽くはんだを付けておきます。その後、テスターで各ケーブルがTRSのどの端子に接続されているかを確認します。私のケーブルの場合、赤、白、黒のケーブルがそれぞれチップ、リング、スリーブに接続されていました。
5. 仮配線とテスト
加工した部品とラズパイピコを回路図に従ってケーブルで接続し、テストを行います。ミスがあった場合に修正しやすくするため、この段階でははんだ付けをせず、クリップなどで固定します。配線が完了したらラズパイピコに電源を入れ、TRSケーブルのプラグをエフェクターに挿してスイッチを押してみます。以下の動画では、四角で囲んでいるディストーションブロックがスイッチを押すたびに有効化したり無効化したりする様子が確認できます。
6. 調整と本組み立て
テストを行い、ケーブルの長さやプログラムの内容などを調整します。問題がなければはんだ付けを行い、不安定な部品を固定して全体を組み立てます。私の場合、まだいろいろと改造をしたいと思い本組み立ては行っていませんので、本組み立て後の写真はありません。
なんちゃってMIDIコントローラーの応用案
今回制作したのは、単機能の非常にシンプルなMIDIコントローラーですが、プログラムを少し変更したり部品を追加することで、実用性を高めることができます。いくつかの応用例を紹介します。
- スイッチを増やす:
- ラズパイピコには20個以上のGPIOピンがあるため、入力スイッチを増やすのは簡単です。それぞれのスイッチに異なるMIDIメッセージを割り当てることで、複数の制御が可能になります。
- 2回押し、3回押し、長押しなどの検出:
- スイッチを増やすのではなく、1つのスイッチで2回押しや3回押し、長押しを検出し、それぞれ異なるMIDIメッセージを送信することもできます。モーメンタリスイッチを使用すれば、長押しの検出も可能です。
- 順番に変わるメッセージ:
- 自作のプログラムでは、スイッチの1回押しでいくつものMIDIメッセージを送信することが可能です。これを利用して、例えばボタンを押すたびにライブのセットリストの1曲目に必要な制御をまとめて送信、次に2曲目の設定を送信と順番に切り替えていくことができます。さらに、出力に設定したGPIOピンで現在何曲目かを表示するようにすると、より便利に使うことができます。
- チャンネル指定機能の追加:
- GPIOピンのうち4本に DIPスイッチ を取り付け、その入力で1〜16のMIDIチャンネルを選択できるようにすることも可能です。これにより、機材のMIDIチャンネルを変更するたびにプログラムを書き換える必要がなくなります。
- ESP32で無線MIDI:
- Wi-FiやBluetoothを内蔵したESP32というマイコンがあります。価格は約千円で、Arduino IDEで設定できます。ESP32ボードを2枚用意し、スイッチを1枚目に、TRS端子を2枚目に接続して、無線で機材を制御するというのも面白いでしょう。
- 疑似EXPペダル:
- スイッチを押すと1回だけメッセージを送信するのではなく、スイッチが切り替わっている間は特定のメッセージを送り続けるプログラムも作成できます。特定のエフェクトのパラメータを一定周期で変化させるMIDIメッセージを送り続けることで、EXPペダルを踏んでいるかのような制御が可能になります。
終わりに
駆け足ながら、以上で自作MIDIコントローラーの制作過程について紹介しました。シンプルなコントローラーでも、工夫次第でさまざまな応用が可能です。このコラムが皆さんの音楽活動に役立ち、楽しみを広げる一助なりましたら幸いです。