ArduinoでMIDIコントローラーを作成する方法

ArduinoでMIDIコントローラーを作成する方法

楽器やノイズボックスのコレクションを集めてきたミュージシャンとして、謙虚なArduinoはカスタムMIDIコントローラーを作成するのに最適なツールです。 Raspberry Piがモノのインターネット(IoT)プロジェクトの頂点に立った可能性がありますが、単純なArduino Uno(Arduinoのさまざまなタイプは何ですか?)には、このプロジェクトに十分なパワーがあります。





Arduinoを初めて使用しますか?心配ありません、私たちは完全なものを持っています Arduinoビギナーズガイド このプロジェクトに取り組む前に読み通してください。





MIDIとは何ですか?

MIDIはMusicalInstrument DigitalInterfaceの略です。これは、音楽デバイスが相互に通信するための標準的な方法の概要を示しています。電子キーボードをお持ちの場合は、おそらくMIDIインターフェースをお持ちです。 MIDIの実装にはいくつかの技術的な詳細が含まれていますが、MIDIはオーディオではないことを覚えておくことが重要です。 MIDIデータは、別のデバイスがさまざまなサウンドを作成したりパラメーターを制御したりするために実装できる単純な命令セットです(1つの命令は「メッセージ」と呼ばれます)。





MIDIは16チャンネルをサポートします。これは、各ケーブルが互いに独立して通信する16の異なるデバイスをサポートできることを意味します。デバイスは、5ピンDINケーブルを使用して接続されます。 DINは「GermanInstitutefor Standardization」の略で、コネクタ内に5本のピンがある単純なケーブルです。多くの場合、5ピンDINの代わりにUSBが使用されます。または、USB-MIDIインターフェイスを使用することもできます。

MIDIケーブル-男性



コントロールの変更とプログラムの変更

MIDIメッセージには、コントロールチェンジとプログラムチェンジの2つの主要なタイプがあります。

Control Change(CC)メッセージには、コントローラー番号と0〜127の値が含まれます。CCメッセージは、音量やピッチなどの設定を変更するためによく使用されます。 MIDIを受け入れるデバイスには、デフォルトで設定されているチャネルとメッセージ、およびそれらを変更する方法(MIDIマッピングと呼ばれる)を説明するマニュアルが付属している必要があります。





プログラム変更(PC)メッセージは、CCメッセージよりも単純です。 PCメッセージは単一の番号で構成され、デバイスのプリセットまたはパッチを変更するために使用されます。 PCメッセージは、「パッチ変更」と呼ばれることもあります。 CCメッセージと同様に、メーカーは特定のメッセージによってどのプリセットが変更されるかを概説したドキュメントを提供する必要があります。

必要なもの

  • Arduino
  • 5ピンDINメスソケット
  • 2 x220オーム抵抗器
  • 2 x10kオーム抵抗器
  • 2xモーメンタリスイッチ
  • フックアップワイヤー
  • ブレッドボード
  • MIDIケーブル
  • MIDIデバイスまたはUSBインターフェース
水と木材5個DIN5ピンPCB取り付けPCキーボード用メスソケット アマゾンで今すぐ購入

ビルドプラン

このプロジェクトは非常に簡単です。もちろん、ニーズに合わせてボタンやハードウェアを追加することもできます。ほとんどすべてのArduinoが適しています-この例では3つのピンだけが必要です。このプロジェクトは、プログラムを制御するための2つのボタン、データを送信するためのMIDIポート、およびメッセージを受信するためのデバイスで構成されています。この回路はここのブレッドボード上に構築されていますが、堅牢なソリューションのためにプロジェクトボックスとはんだ付けされたコネクタに転送することが可能です。





回路アセンブリ

Arduino-Midi-コントローラー-回路

MIDI接続

MIDIピンアウト

MIDIソケットを次のように配線します。

  • 220オームの抵抗を介してArduino送信(TX)1へのMIDIピン5
  • 220オームの抵抗を介してArduino + 5VへのMIDIピン4
  • ArduinoグラウンドへのMIDIピン2

ボタン接続

ボタンは、Arduinoが「見る」抵抗を変更することで機能します。 Arduinoピンはスイッチを直接通過してグランドに接続します( 低い )10kオームの抵抗を介して(「プルダウン」抵抗、値が低いままであることを保証します)。ボタンを押すと、回路から見える値が抵抗なしで+ 5vに変化します( 高い )。 Arduinoは、を使用してこの変更を検出できます digitalRead(pin) 指図。ボタンをArduinoデジタル入力/出力(I / O)のピン6と7に接続します。両方のボタンを接続します。

  • ボタンの左側を+ 5Vに
  • ボタンの右側から10kオームの抵抗を介してArduinoグラウンドに接続
  • Arduinoピン(6または7)へのボタンの右側

MIDIテスト

すべてのハードウェアが完成したので、それをテストする時が来ました。 USB-MIDIインターフェース(多くのオーディオインターフェースがこれを行うことができます)とMIDIケーブルが必要になります。ブレッドボードに配線されたMIDIポートがデータを送信しているので、それが出力です。あなたのコンピュータはデータを受信して​​いるので、それは入力です。このプロジェクトは優れたArduinoを使用しています MIDIライブラリv4.2 47の効果によって。ライブラリをインストールしたら、次のURLにアクセスして、ライブラリをコードに含めることができます。 スケッチ>ライブラリを含める> MIDI

着信MIDIデータを監視するプログラムも必要です。

Arduinoをコンピューターに接続し、次のテストコードをアップロードします(から正しいボードとポートを選択することを忘れないでください ツール>ボードツール>ポート メニュー)。

#include
#include
#include
#include
#include
MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut
void setup() {
Serial.begin(31250); // setup serial for MIDI
}
void loop() {
midiOut.sendControlChange(56,127,1); // send a MIDI CC -- 56 = note, 127 = velocity, 1 = channel
delay(1000); // wait 1 second
midiOut.sendProgramChange(12,1); // send a MIDI PC -- 12 = value, 1 = channel
delay(1000); // wait 1 second
}

このコードは、CCメッセージを送信し、1秒間待機し、PCメッセージを送信してから、1秒間無期限に待機します。すべてが正常に機能している場合は、MIDIモニターにメッセージが表示されます。

何も起こらなくても、慌てる必要はありません。トラブルシューティングを試してください:

  • すべての接続が正しいことを確認してください
  • MIDIポートが正しく配線されていることを確認してください-外側の端に2つのスペアピンがあるはずです
  • 回路が正しいことを再確認してください
  • 回路がMIDIケーブルでUSB-MIDIインターフェースに接続されていることを確認します
  • MIDIケーブルがに接続されていることを確認してください 入力 USB-MIDIインターフェース上
  • Arduinoに電力があることを確認してください
  • USB-MIDIインターフェース用の正しいドライバーをインストールします

あなたがいる場合 まだ 問題がある場合は、ブレッドボードを確認する価値があるかもしれません。安価なボードは、非常に一貫性がなく、品質が低い場合があります。このプロジェクトに取り組んでいるときに、私はそれを経験しました。

ボタンテスト

次に、ボタンが正しく機能していることをテストします。次のテストコードをアップロードします。この部分をテストするためにMIDIを接続する必要はありません。

const int buttonOne = 6; // assign button pin to variable
const int buttonTwo = 7; // assign button pin to variable
void setup() {
Serial.begin(9600); // setup serial for text
pinMode(buttonOne,INPUT); // setup button as input
pinMode(buttonTwo,INPUT); // setup button as input
}
void loop() {

if(digitalRead(buttonOne) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonOne) == HIGH) { // check button state again
Serial.println('Button One Works!'); // log result
delay(250);
}
}

if(digitalRead(buttonTwo) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonTwo) == HIGH) { // check button state again
Serial.println('Button Two Works!'); // log result
delay(250);
}
}

}

このコードを実行し(ただし、USBケーブルは接続したままにします)、シリアルモニターを開きます(ただし、USBケーブルは接続したままにします)。 右上>シリアルモニター )。ボタンを押すと、「Button OneWorks!」と表示されます。または「ボタン2つの作品!」押したボタンによって異なります。

この例から取り上げるべき重要な注意事項が1つあります。それは、ソフトウェアのデバウンスです。これは、ボタンをチェックしてからボタンを再度チェックするまでの単純な10ミリ秒(ms)の遅延です。これにより、ボタンを押す精度が向上し、Arduinoをトリガーするノイズを防ぐことができます。推奨されていますが、これを行う必要はありません。

コントローラの作成

すべてが配線されて機能しているので、次は完全なコントローラーを組み立てます。

この例では、押されたボタンごとに異なるCCメッセージを送信します。これを使用して、OSXでAbletonLive 9.6を制御しています。コードは、上記の両方のテストサンプルと同様です。

#include
#include
#include
#include
#include
const int buttonOne = 6; // assign button pin to variable
const int buttonTwo = 7; // assign button pin to variable
MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut
void setup() {
pinMode(buttonOne,INPUT); // setup button as input
pinMode(buttonTwo,INPUT); // setup button as input
Serial.begin(31250); // setup MIDI output
}
void loop() {
if(digitalRead(buttonOne) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonOne) == HIGH) { // check button state again
midiOut.sendControlChange(56,127,1); // send a MIDI CC -- 56 = note, 127 = velocity, 1 = channel
delay(250);
}
}

if(digitalRead(buttonTwo) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonTwo) == HIGH) { // check button state again
midiOut.sendControlChange(42,127,1); // send a MIDI CC -- 42 = note, 127 = velocity, 1 = channel
delay(250);
}
}
}

注-使用できなくなります Serial.println() MIDI出力付き。

CCの代わりにPCメッセージを送信したい場合は、以下を置き換えるだけです。

midiOut.sendControlChange(42,127,1);

と:

midiOut.sendProgramChange(value, channel);

実行中

以下は、のコントローラーとしてのデモンストレーションです。 Ableton Live (( あらゆる予算に最適なDJソフトウェア )。右上にはオーディオメーターが表示され、右上には受信MIDIメッセージが表示されます(経由 MIDIモニター OS Xの場合)。

16GBのRAMのページングファイルサイズ

MIDIコントローラーを作りましたか?

カスタムMIDIコントローラーには多くの実用的な用途があります。あなたは広大な足で制御されるユニット、または洗練されたスタジオコントローラーを構築することができます。そして、あなたがそれを購入することに興味があるなら、ここにあなたが買うことができる最高のUSBMIDIコントローラーがあります。

画像クレジット: Shutterstock.com経由のKeithGentry

私たちがお勧めし、議論するアイテムを気に入っていただければ幸いです。 MUOはアフィリエイトとスポンサーのパートナーシップを持っているので、私たちはあなたの購入のいくつかから収入の一部を受け取ります。これはあなたが支払う価格に影響を与えることはなく、私たちが最高の製品の推奨を提供するのに役立ちます。

共有 共有 つぶやき Eメール Windows 11にアップグレードする価値はありますか?

Windowsが再設計されました。しかし、それはWindows10からWindows11に移行するように説得するのに十分ですか?

次を読む
関連トピック
  • DIY
  • DJソフトウェア
  • Arduino
  • エレクトロニクス
  • 正午
著者について ジョーコバーン(136件の記事が公開されました)

Joeは、英国のリンカーン大学でコンピュータサイエンスを卒業しています。彼はプロのソフトウェア開発者であり、ドローンを飛ばしたり音楽を書いたりしていないときは、写真を撮ったりビデオを制作したりしていることがよくあります。

ジョーコバーンのその他の作品

ニュースレターを購読する

ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。

購読するにはここをクリックしてください
カテゴリ Diy