Wie man einen MIDI Controller mit einem Arduino macht

Als Musiker, der eine Sammlung von Musikinstrumenten und Noise-Boxen gesammelt hat, ist der bescheidene Arduino das perfekte Werkzeug, um einen eigenen MIDI-Controller zu erstellen.

Als Musiker, der eine Sammlung von Musikinstrumenten und Noise-Boxen gesammelt hat, ist der bescheidene Arduino das perfekte Werkzeug, um einen eigenen MIDI-Controller zu erstellen.
Werbung

Als Musiker, der eine Sammlung von Musikinstrumenten und Noise-Boxen gesammelt hat, ist der bescheidene Arduino das perfekte Werkzeug, um einen eigenen MIDI-Controller zu erstellen. Während der Raspberry Pi könnte die Krone für Internet der Dinge (IoT) Das Internet der Dinge: 10 nützliche Produkte, die Sie 2016 versuchen müssen Das Internet der Dinge: 10 nützliche Produkte, die Sie 2016 versuchen müssen Das Internet der Dinge wird in Gang gebracht 2016, aber was heißt das genau? Wie profitieren Sie persönlich vom Internet der Dinge? Hier sind ein paar nützliche Produkte zu illustrieren. Lesen Sie mehr Projekte, eine einfache Arduino Uno (was sind die verschiedenen Arten von Arduino? Arduino Ratgeber: Welches Board sollten Sie bekommen? Arduino Ratgeber: Welche Board sollten Sie? Es gibt so viele verschiedene Arten von Arduino Boards da draußen, Sie Vergeben Sie sich verwirrt zu sein. Was sollten Sie für Ihr Projekt kaufen? Lassen Sie uns helfen, mit diesem Arduino Kauf Guide! Lesen Sie mehr) hat mehr als genug Kraft für dieses Projekt.

Das erste Mal mit einem Arduino? Keine Sorge, wir haben einen vollständigen Arduino-Einsteigerhandbuch Erste Schritte mit Arduino: Ein Anfängerhandbuch Erste Schritte mit Arduino: Ein Anfängerhandbuch Arduino ist eine Open-Source-Prototyping-Plattform für Elektronik, die auf flexibler, benutzerfreundlicher Hardware und Software basiert. Es richtet sich an Künstler, Designer, Bastler und alle, die interaktive Objekte oder Umgebungen erstellen möchten. Lesen Sie mehr, um zu lesen, bevor Sie dieses Projekt angehen.

Arduino-Midi-Controller-Steckbrett

Was ist MIDI?

MIDI steht für Musical Instrument Digital Interface. Es beschreibt einen Standardweg für Musikgeräte, miteinander zu kommunizieren. Wenn Sie eine elektronische Tastatur besitzen, haben Sie wahrscheinlich eine MIDI-Schnittstelle. Obwohl es einige technische Details bei der Implementierung von MIDI gibt, ist es wichtig, daran zu denken, dass MIDI kein Audio ist! MIDI-Daten sind ein einfacher Befehlssatz (ein Befehl wird als "Nachricht" bezeichnet), den ein anderes Gerät implementieren kann, um verschiedene 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. Geräte werden über ein 5-poliges DIN-Kabel angeschlossen. DIN steht für "Deutsches Institut für Normung" und ist einfach ein Kabel mit fünf Stiften im Stecker. USB wird oft anstelle von 5-poligen DIN verwendet, oder eine USB-MIDI-Schnittstelle kann verwendet werden.

MIDI-Kabel-Stecker

Kontrollwechsel und Programmwechsel

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

Control Change (CC) -Nachrichten enthalten eine Controller-Nummer und einen Wert zwischen 0 und 127. CC-Nachrichten werden häufig zum Ändern von Einstellungen wie Lautstärke oder Tonhöhe verwendet. Geräte, die MIDI akzeptieren, sollten mit einem Handbuch kommen, 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) -Nachrichten sind einfacher als CC-Nachrichten. PC-Nachrichten bestehen aus einer einzigen Nummer und werden zum Ändern der Voreinstellung oder des Patches auf einem Gerät verwendet. PC-Nachrichten werden manchmal als "Patch-Änderung" bezeichnet. Ähnlich wie CC-Nachrichten sollten Hersteller ein Dokument bereitstellen, in dem erläutert 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 momentane Schalter
  • Anschlussdrähte
  • Steckbrett
  • MIDI-Kabel
  • MIDI-Gerät oder USB-Schnittstelle

Wasser & Holz 5 Stück DIN 5 Pin PCB Montage Buchsen für PC Tastatur Wasser & Holz 5 Stück DIN 5 Pin PCB Montage Buchsen für PC Tastatur Jetzt Kaufen bei Amazon 4, 97 €

Bauplan

Dieses Projekt wird ziemlich einfach sein. Sie können natürlich weitere Schaltflächen oder Hardware hinzufügen, die Ihren Anforderungen entsprechen. Fast jedes Arduino wird geeignet sein - nur drei Pins werden für dieses Beispiel benötigt. Dieses Projekt besteht aus zwei Tasten zum Steuern des Programms, einem MIDI-Port zum Senden der Daten und einem Gerät zum Empfangen der Nachrichten. Diese Schaltung wurde auf einem Steckbrett gebaut. Anfänger Elektronik: 10 Fähigkeiten, die Sie wissen müssen Anfänger Elektronik: 10 Fähigkeiten, die Sie wissen müssen Viele von uns haben noch nie einen Lötkolben berührt - aber Dinge zu machen kann unglaublich lohnend sein. Hier sind zehn der grundlegenden DIY-Elektronik-Fähigkeiten, um Ihnen den Einstieg zu erleichtern. Lesen Sie hier mehr, aber es ist möglich, es in eine Projektbox und gelötete Anschlüsse für eine robuste Lösung zu übertragen.

Schaltungsbaugruppe

Arduino-Midi-Controller-Schaltung

MIDI-Verbindung

MIDI-Belegung

Verbinden Sie Ihren MIDI-Anschluss 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 Knöpfe funktionieren, indem sie den Widerstand ändern, den der Arduino "sieht". Der Arduino-Pin geht über einen 10-kOhm-Widerstand (ein "Pull-Down" -Widerstand, der sicherstellt, dass der Wert niedrig bleibt) durch den Schalter direkt auf Masse ( LOW ). Wenn die Taste gedrückt wird, ändert sich der von der Schaltung gesehene Wert ohne einen Widerstand ( HIGH ) auf +5 V. Der Arduino kann diese Änderung mit dem Befehl digitalRead (pin) erkennen . Verbinden Sie die Tasten mit den Pins 6 und 7 am Arduino Digital Input / Output (I / O). Verbinde beide Knöpfe:

  • Linke Seite des Knopfes bis + 5V
  • Rechte Seite des Buttons zu Arduino Ground über einen 10k Ohm Widerstand
  • Rechte Seite des Buttons zum Arduino Pin (6 oder 7)

MIDI-Tests

Jetzt, da die gesamte Hardware fertig ist, ist es an der Zeit, sie zu testen. Sie benötigen eine USB-MIDI-Schnittstelle (viele Audio-Schnittstellen können dies tun) und ein MIDI-Kabel. Der MIDI-Port, der auf dem Steckbrett verdrahtet ist, sendet Daten, also ist es die Ausgabe. Ihr Computer empfängt die Daten, daher ist es die Eingabe. Dieses Projekt verwendet die ausgezeichnete Arduino MIDI Library v4.2 von Forty Seven Effects. Sobald Sie die Bibliothek installiert haben, können Sie sie in Ihren Code einfügen, indem Sie zu Skizze> Bibliothek einbeziehen> MIDI gehen .

Sie benötigen außerdem ein Programm, um die eingehenden MIDI-Daten zu überwachen:

  • MIDI Monitor für OS X
  • MIDI-OX für Windows
  • KMidimon für Linux

Anschließen des Arduino Erste Schritte mit Ihrem Arduino Starter Kit - Installieren der Treiber & Einrichten des Boards & Ports Erste Schritte mit Ihrem Arduino Starter Kit - Installieren der Treiber & Einrichten des Boards & Ports So haben Sie sich ein Arduino Starter Kit gekauft, und möglicherweise einige andere zufällige coole Komponenten - was nun? Wie fängst du eigentlich an, dieses Arduino-Ding zu programmieren? Wie richte ich es ein ... Lesen Sie mehr auf Ihrem Computer und laden Sie den folgenden Testcode hoch (vergessen Sie nicht, die richtige Karte und den richtigen Anschluss aus den Menüs Tools> Board und Tools> Port auszuwählen).

#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 korrekt funktioniert, sollte eine Meldung auf Ihrem MIDI-Monitor erscheinen.

Wenn nichts passiert, keine Panik! Versuchen Sie die Fehlerbehebung:

  • Stellen Sie sicher, dass alle Verbindungen korrekt sind
  • Vergewissern Sie sich, dass der MIDI-Port korrekt verdrahtet ist - an den Außenkanten sollten 2 Ersatzstifte vorhanden sein
  • Überprüfen Sie, ob die Schaltung korrekt ist
  • Vergewissern Sie sich, dass die Schaltung über ein MIDI-Kabel an eine USB-MIDI-Schnittstelle angeschlossen ist
  • Überprüfen Sie, ob Ihr MIDI-Kabel an den Eingang Ihrer USB-MIDI-Schnittstelle angeschlossen ist
  • Stellen Sie sicher, dass der Arduino über genügend Energie verfügt
  • Installieren Sie den richtigen Treiber für Ihre USB-MIDI-Schnittstelle

Wenn Sie immer noch Probleme haben, könnte es sich lohnen, Ihr Steckbrett zu überprüfen. Billige Boards können manchmal sehr inkonsequent und minderwertig sein - das ist mir bei 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 dieses Teil 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 seriellen Monitor ( oben rechts> Serieller Monitor ). Wenn Sie eine Taste drücken, sollten Sie "Knopf Eins funktioniert!" Oder "Knopf Zwei funktioniert!" Sehen, abhängig von der Taste, die Sie gedrückt haben.

Es gibt eine wichtige Anmerkung, die Sie aus diesem Beispiel herausnehmen sollten - die Software-De-Bounce. Dies ist eine einfache Verzögerung von 10 Millisekunden (ms) zwischen dem Überprüfen der Schaltfläche und dem anschließenden erneuten Überprüfen der Schaltfläche. Dies erhöht die Genauigkeit des Tastendrucks und verhindert das Auslösen von Geräuschen durch den Arduino. Sie müssen dies nicht tun, obwohl es empfohlen wird.

Erstellen des Controllers

Nun, da alles verkabelt ist und funktioniert, ist es Zeit, den kompletten Controller zu montieren.

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

 #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 Serial.println () nicht mit der MIDI-Ausgabe verwenden.
Wenn Sie eine PC-Nachricht anstelle einer CC senden möchten, ersetzen Sie einfach Folgendes:

 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) Die beste DJ-Software für jedes Budget Die beste DJ-Software für jedes Budget Eine gute Mixing-Software kann den entscheidenden Unterschied in Ihrer Leistung ausmachen, egal ob Sie einen Mac verwenden, Windows oder Linux, wird jedes Level an Fähigkeiten und Budget berücksichtigt, wenn Sie mit dem DJing beginnen möchten. Oben rechts werden die Audiomessgeräte angezeigt und oben in der Mitte werden die eingehenden Midi-Meldungen angezeigt (über MIDI Monitor unter OS X).

Hast du einen MIDI Controller gemacht?

Es gibt viele praktische Anwendungen für einen benutzerdefinierten MIDI-Controller. Sie könnten eine riesige Fuß-gesteuerte Einheit oder einen schlanken Studio-Controller bauen. Haben Sie einen benutzerdefinierten MIDI-Controller erstellt? Lass mich in den Kommentaren wissen, ich würde sie gerne sehen!

Bildquelle: Keith Gentry über Shutterstock.com

In this article