Wie erstelle ich einen MIDI-Controller mit einem Arduino?

Wie erstelle ich einen MIDI-Controller mit einem Arduino?

Als Musiker, der eine Sammlung von Musikinstrumenten und Geräuschboxen zusammengetragen hat, ist der bescheidene Arduino das perfekte Werkzeug, um einen benutzerdefinierten MIDI-Controller zu erstellen. Während der Raspberry Pi möglicherweise die Krone für Internet of Things (IoT)-Projekte erobert hat, hat ein einfacher Arduino Uno (was sind die verschiedenen Arten von Arduino?) mehr als genug Leistung für dieses Projekt.





Zum ersten Mal einen Arduino verwenden? Keine Sorge, wir haben ein komplettes Arduino-Anleitung für Anfänger lesen, bevor Sie dieses Projekt in Angriff nehmen.





Was ist MIDI?

MIDI steht für Musical Instrument Digital Interface. Es umreißt eine Standardmethode für Musikgeräte, um miteinander zu kommunizieren. Wenn Sie ein elektronisches Keyboard besitzen, haben Sie wahrscheinlich ein MIDI-Interface. Obwohl es bei der Implementierung von MIDI einige technische Details gibt, ist es wichtig zu bedenken, dass MIDI kein Audio ist! MIDI-Daten sind ein einfacher Satz von Anweisungen (eine Anweisung wird als „Nachricht“ bezeichnet), die ein anderes Gerät implementieren kann, um andere Klänge oder Steuerparameter zu erzeugen.





MIDI unterstützt 16 Kanäle. Dies bedeutet, dass jedes Kabel 16 verschiedene Geräte unterstützen kann, die unabhängig voneinander kommunizieren. Der Anschluss der Geräte erfolgt über ein 5-poliges DIN-Kabel. DIN steht für „Deutsches Institut für Normung“ und ist einfach ein Kabel mit fünf Pins im Stecker. Anstelle von 5-Pin DIN wird oft USB verwendet, oder es kann eine USB-MIDI-Schnittstelle verwendet werden.

MIDI-Kabel-Stecker



Kontrollwechsel und Programmwechsel

Es gibt zwei Haupttypen von MIDI-Nachrichten: Control Change und Program Change.

Control Change (CC)-Meldungen enthalten eine Controller-Nummer und einen Wert zwischen 0 und 127. CC-Meldungen werden häufig verwendet, um Einstellungen wie Lautstärke oder Tonhöhe zu ändern. Geräte, die MIDI akzeptieren, sollten mit einem Handbuch geliefert werden, in dem erklärt wird, welche Kanäle und Nachrichten standardmäßig eingerichtet sind und wie sie geändert werden (bekannt als MIDI-Mapping).





Program Change (PC)-Meldungen sind einfacher als CC-Meldungen. PC-Meldungen bestehen aus einer einzigen Zahl und werden verwendet, um das Preset oder Patch auf einem Gerät zu ändern. PC-Meldungen werden manchmal als „Patch Change“ bezeichnet. Ähnlich wie bei CC-Nachrichten sollten Hersteller ein Dokument bereitstellen, in dem beschrieben wird, welche Voreinstellungen durch eine bestimmte Nachricht geändert werden.

Was wirst du brauchen

  • Arduino
  • 5-polige DIN-Buchse
  • 2 x 220 Ohm Widerstände
  • 2 x 10k Ohm Widerstände
  • 2 x Taster
  • Anschlussdrähte
  • Steckbrett
  • MIDI-Kabel
  • MIDI-Gerät oder USB-Schnittstelle
Wasser & Holz 5 Stk. DIN 5 Pin Leiterplattenmontage Buchsen für PC-Tastatur JETZT BEI AMAZON KAUFEN

Bauplan

Dieses Projekt wird ganz einfach sein. Sie können selbstverständlich weitere Tasten oder Hardware hinzufügen, um Ihren Anforderungen gerecht zu werden. Fast jedes Arduino ist geeignet - für dieses Beispiel werden nur drei Pins benötigt. Dieses Projekt besteht aus zwei Schaltflächen zur Steuerung des Programms, einem MIDI-Port zum Senden der Daten und einem Gerät zum Empfangen der Nachrichten. Diese Schaltung wurde hier auf einem Steckbrett aufgebaut, es ist jedoch möglich, sie für eine robuste Lösung auf eine Projektbox und gelötete Steckverbinder zu übertragen.





Schaltungsbaugruppe

Arduino-Midi-Controller-Schaltung

MIDI-Verbindung

MIDI-Pinbelegung

Verdrahten Sie Ihre MIDI-Buchse wie folgt:

  • MIDI-Pin 5 zu Arduino Transmit (TX) 1 über einen 220-Ohm-Widerstand
  • MIDI-Pin 4 zu Arduino +5V über einen 220-Ohm-Widerstand
  • MIDI-Pin 2 an Arduino-Masse

Tastenverbindung

Die Tasten funktionieren, indem sie den Widerstand ändern, den das Arduino 'sieht'. Der Arduino-Pin geht durch den Schalter direkt auf Masse ( NIEDRIG ) über einen 10k-Ohm-Widerstand (ein 'Pull-Down'-Widerstand, der sicherstellt, dass der Wert niedrig bleibt). Wenn die Taste gedrückt wird, ändert sich der von der Schaltung erkannte Wert auf +5 V ohne Widerstand ( HOCH ). Der Arduino kann diese Änderung mit dem erkennen digitalRead (Stift) Befehl. Verbinden Sie die Tasten mit den Pins 6 und 7 des Arduino-Digitaleingangs / -ausgangs (I / O). Verbinden Sie beide Tasten:

  • Linke Seite der Taste auf +5V
  • Rechte Seite der Taste zu Arduino Ground über einen 10k Ohm Widerstand
  • Rechte Seite der Taste zum Arduino-Pin (6 oder 7)

MIDI-Tests

Jetzt, da die gesamte Hardware fertig ist, ist es Zeit, sie zu testen. Sie benötigen ein USB-MIDI-Interface (das können viele Audio-Interfaces) und ein MIDI-Kabel. Der auf dem Steckbrett verdrahtete MIDI-Port sendet Daten, ist also der Ausgang. Ihr Computer empfängt die Daten, daher ist es die Eingabe. Dieses Projekt verwendet das ausgezeichnete Arduino MIDI-Bibliothek v4.2 von Forty Seven Effects. Sobald Sie die Bibliothek installiert haben, können Sie sie in Ihren Code einbinden, indem Sie zu . gehen Sketch > Bibliothek einschließen > MIDI .

Außerdem benötigen Sie ein Programm zum Abhören der eingehenden MIDI-Daten:

Verbinden Sie das Arduino mit Ihrem Computer und laden Sie den folgenden Testcode hoch (vergessen Sie nicht, das richtige Board und den richtigen Port aus dem Werkzeuge > Tafel und Extras > Port Menüs).

#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
}

Dieser Code sendet eine CC-Nachricht, wartet 1 Sekunde, sendet eine PC-Nachricht und wartet dann 1 Sekunde auf unbestimmte Zeit. Wenn alles richtig funktioniert, sollten Sie eine Meldung in Ihrem MIDI-Monitor sehen.

Wenn nichts passiert, keine Panik! Versuchen Sie es mit der Fehlerbehebung:

  • Stellen Sie sicher, dass alle Verbindungen korrekt sind
  • Überprüfen Sie, ob der MIDI-Port richtig verdrahtet ist - an den Außenkanten sollten 2 Ersatzstifte vorhanden sein
  • Überprüfen Sie, ob die Schaltung korrekt ist
  • Stellen Sie sicher, dass die Schaltung mit einem MIDI-Kabel an ein USB-MIDI-Interface angeschlossen ist
  • Überprüfen Sie, ob Ihr MIDI-Kabel mit dem Eingang auf Ihrem USB-MIDI-Interface
  • Stellen Sie sicher, dass das Arduino Strom hat
  • Installieren Sie den richtigen Treiber für Ihr USB-MIDI-Interface

Wenn du bist still Wenn Sie Probleme haben, kann es sich lohnen, Ihr Steckbrett zu überprüfen. Billige Boards können manchmal sehr inkonsistent und von geringer Qualität sein - das ist mir während der Arbeit an diesem Projekt passiert.

Tastentest

Jetzt ist es Zeit zu testen, ob die Tasten richtig funktionieren. Laden Sie den folgenden Testcode hoch. MIDI muss nicht angeschlossen sein, um diesen Part zu testen.

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);
}
}

}

Führen Sie diesen Code aus (aber lassen Sie das USB-Kabel angeschlossen) und öffnen Sie den Serial Monitor ( Oben rechts > Serieller Monitor ). Wenn Sie eine Taste drücken, sollten Sie „Button One Works!“ sehen. oder 'Knopf zwei funktioniert!' je nach gedrückter Taste.

Es gibt einen wichtigen Hinweis aus diesem Beispiel - das Software-De-Bounce. Dies ist eine einfache Verzögerung von 10 Millisekunden (ms) zwischen dem Überprüfen der Schaltfläche und dem erneuten Überprüfen der Schaltfläche. Dies erhöht die Genauigkeit des Tastendrucks und verhindert, dass das Arduino durch Rauschen ausgelöst wird. Sie müssen dies nicht tun, obwohl es empfohlen wird.

Controller erstellen

Nun, da alles verkabelt ist und funktioniert, ist es an der Zeit, den vollständigen Controller zusammenzubauen.

In diesem Beispiel wird für jede gedrückte Schaltfläche eine andere CC-Nachricht gesendet. Ich verwende dies, um Ableton Live 9.6 unter OS X zu steuern. Der Code ähnelt den beiden obigen Testbeispielen.

#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);
}
}
}

Hinweis - Sie können nicht verwenden Serial.println() mit MIDI-Ausgang.

Wenn Sie anstelle eines CC eine PC-Nachricht senden möchten, ersetzen Sie einfach:

midiOut.sendControlChange(42,127,1);

Mit:

midiOut.sendProgramChange(value, channel);

In Aktion

Unten ist eine Demonstration als Controller für Ableton Live ( Beste DJ-Software für jedes Budget ). Oben rechts werden die Audiometer angezeigt, oben in der Mitte die eingehenden Midi-Nachrichten (via MIDI-Monitor unter OSX).

warum wird meine nachricht nicht geliefert?

Haben Sie einen MIDI-Controller erstellt?

Es gibt viele praktische Anwendungen für einen benutzerdefinierten MIDI-Controller. Sie könnten eine riesige fußgesteuerte Einheit oder einen eleganten Studio-Controller bauen. Und wenn Sie daran interessiert sind, einen zu kaufen, finden Sie hier die besten USB-MIDI-Controller, die Sie kaufen können.

Bildnachweis: Keith Gentry über Shutterstock.com

Wir hoffen, dass Ihnen die von uns empfohlenen und besprochenen Artikel gefallen! MUO hat Partner- und gesponserte Partnerschaften, sodass wir einen Anteil an den Einnahmen aus einigen Ihrer Einkäufe erhalten. Dies hat keinen Einfluss auf den von Ihnen bezahlten Preis und hilft uns, die besten Produktempfehlungen anzubieten.

Teilen Teilen Tweet Email Lohnt sich ein Upgrade auf Windows 11?

Windows wurde neu gestaltet. Aber reicht das aus, um Sie davon zu überzeugen, von Windows 10 auf Windows 11 umzusteigen?

Weiter lesen
Verwandte Themen
  • Heimwerken
  • DJ-Software
  • Arduino
  • Elektronik
  • MITTAG
Über den Autor Joe Coburn(136 veröffentlichte Artikel)

Joe hat einen Abschluss in Informatik an der University of Lincoln, Großbritannien. Er ist ein professioneller Softwareentwickler und wenn er nicht gerade Drohnen fliegt oder Musik schreibt, ist er oft beim Fotografieren oder Videoproduzieren anzutreffen.

Mehr von Joe Coburn

Abonniere unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um zu abonnieren