Inhaltsverzeichnis:

Aufbau eines Arduino MIDI-Controllers - Gunook
Aufbau eines Arduino MIDI-Controllers - Gunook

Video: Aufbau eines Arduino MIDI-Controllers - Gunook

Video: Aufbau eines Arduino MIDI-Controllers - Gunook
Video: The 5 BEST ARDUINOS for Building a MIDI CONTROLLER 2024, November
Anonim

Dieses instructable wurde ursprünglich auf meinem Blog am 28. Juni 2020 veröffentlicht

Ich genieße es, Dinge zu bauen, die Elektronik enthalten, und ich wollte schon immer etwas mit Arduino bauen.

Einer der häufigsten Builds für Anfänger, die ich gefunden habe, war ein MIDI-Controller. Ein MIDI-Controller ist jede Hardware, die MIDI-Daten (Musical Instrument Digital Interface) an ein Gerät sendet, um Klänge auszulösen und Musik zu machen.

Ich habe festgestellt, dass viele Implementierungen kompliziert sind, auch solche, die für Anfänger gedacht sind. Es war sehr frustrierend festzustellen, dass ich Hunderte von Zeilen unlesbaren Codes verwenden musste. Oder dass ich unter anderem in einigen Fällen einen Widerstand löten muss.

Das Projekt

Durch den Bau meines eigenen Arduino-MIDI-Controllers war es meine Absicht, ein angenehmes Projekt zu machen, bei dem das Rauschen am niedrigsten bleibt. Etwas, dem jeder Anfänger folgen könnte. Um dies zu erreichen, habe ich den MIDI Fighter 3D als Basisinspiration verwendet und alle nicht wesentlichen Funktionen entfernt.

Die Gesamtkosten meines Projekts lagen unter 30 US-Dollar und die Materialliste war wirklich kurz (Affiliate-Links):

  • Arduino Leonardo (oder Klon): zwischen 10 und 20 US-Dollar.
  • 16 x Sanwa Knöpfe 24 mm (oder Klon): zwischen 1 und 2,50 US-Dollar pro Knopf.
  • Lötkolben
  • 22 AWG elektrisches Kabel

Das Arduino-Board

Als ich dieses Projekt begann, stellte ich fest, dass es eine Reihe neuer Arduino-Modelle gibt (ohne die Hunderte von kompatiblen Boards). Und alle bieten leicht unterschiedliche Fähigkeiten.

Ich musste MIDI-Signale an einen Computer senden und das geht am einfachsten über USB. Jedes Arduino-Board, das auf dem Mikrocontroller ATmega32u4 basiert, verfügt über eine integrierte USB-Kommunikation.

Die offiziellen Arduino-Boards mit nativer USB-Unterstützung sind Arduino Due, Arduino Zero, Arduino Leonardo, Arduino Micro. Diese Boards verfügen über eine integrierte USB-Unterstützung, was bedeutet, dass sie als USB-MIDI-Gerät fungieren können.

Ich entschied mich für einen Klon des Arduino Leonardo. Es hat genügend Eingänge für dieses Projekt und enthält auch Header, die das Ein- und Ausstecken von Drähten erleichtern.

Erste Schritte

Obwohl ich Schritt für Schritt erklären werde, wie ich den Code für dieses Projekt implementiert habe, können Sie die endgültige Version herunterladen.

Um Code auf das Board hochzuladen, müssen Sie die Arduino IDE verwenden. Sie haben auch einen Web-Editor, der sehr nützlich ist, aber sie haben eine begrenzte Anzahl von Zeiten pro Tag, in denen Sie Code kompilieren können.

Schritt 1: Blinken der eingebauten LED

Es ist schon lustig, wie die "Hello World" in der Welt der Hardware eine LED blinkt.

Es war eine schöne Überraschung für mich zu entdecken, dass Arduino Leonardo eine eingebaute LED hat, die Sie blinken können, um Ihren Code zu testen. Auf diese Weise müssen Sie keine externe Schaltung auf einem Steckbrett mit einer LED und einem Widerstand aufbauen.

Code:

Schritt 2: Blinken der LED bei manueller Eingabe

Der nächste logische Schritt war, immer die gleiche LED zu blinken, wenn ich ein Signal sende. Ich entfernte die Plastikabdeckung von einem Ende von 2 Dupont-Drähten und verband das andere Ende mit der Platine:

  • Pinnummer 2: Einer der digitalen Eingänge (positiv). Es könnte ein beliebiger digitaler Pin sein.
  • Pin GND: Jeder Massepin (negativ).

Jetzt schließe ich jedes Mal, wenn ich die freiliegenden Enden der Drähte verbinde, den Stromkreis und kann so Code ausführen

Jeder der 20 digitalen Pins des Leonardo verfügt über einen internen Widerstand (standardmäßig getrennt), der mit INPUT_PULLUP aktiviert werden kann. Denken Sie daran, dass ein Pull-up-Eingang bedeutet, dass der Schaltflächenzustand invertiert ist:

  • HIGH, wenn der Stromkreis offen ist (Taste wird NICHT gedrückt).
  • LOW, wenn der Stromkreis geschlossen ist (Taste wird gedrückt).

Code:

Schritt 3: Installieren der MIDIUSB-Bibliothek

Diese Bibliothek ermöglicht es einem Arduino-Board mit USB-Fähigkeiten, als MIDI-Instrument über USB zu fungieren. Weitere Informationen finden Sie in der offiziellen Dokumentation.

Mit der Arduino-IDE können Sie mit dem Bibliotheksmanager zusätzliche Arduino-Bibliotheken installieren:

  1. Öffnen Sie die IDE und klicken Sie auf das Menü "Skizze", dann auf "Bibliothek einschließen" und dann auf "Bibliotheken verwalten".
  2. Suchen Sie nach MIDIUSB und klicken Sie auf Installieren.
  3. Sobald es fertig ist, sollte ein Installiert-Tag neben der MIDIUSB-Bibliothek erscheinen.
  4. Schließen Sie den Bibliotheksmanager.

Jetzt kann der Leonardo MIDI-Befehle über USB senden! Aber zuerst sind einige Einblicke in die Funktionsweise von MIDI erforderlich.

Wie MIDI funktioniert

"MIDI (Musical Instrument Digital Interface) ist ein Standard-Kommunikationsprotokoll, das elektronische Musikinstrumente, Computer und verwandte Audiogeräte zum Abspielen von Musik verbindet." - Wikipedia

Es verarbeitet Event-Meldungen mit Daten zur Tonhöhe und Velocity der gespielten Note, neben anderen Anweisungen

In diesem speziellen Projekt sendet die Eingabe von den 16 Tasten verschiedene Nachrichten über USB. Diese Nachrichten können auf einem Computer mit einer geeigneten Software wie GarageBand oder Ableton Live in Ton umgewandelt werden.

Aufbau einer MIDI-Nachricht

Um eine MIDI-Nachricht zu senden, habe ich die Methode sendMIDI() aus der MIDIUSB-Bibliothek verwendet, die ich in Schritt 3 installiert habe.

Diese Methode kann 4 Parameter empfangen:

  • Event-Typ: Es kann 0x09 für Note On (Note spielen) oder 0x08 für Note Off (Notenwiedergabe stoppen) sein.
  • Note On/Off: Der Event-Typ kombiniert mit dem MIDI-Kanal (1-16). Ich verwende nur Kanal 1, also ist es entweder 0x90 für Note On oder 0x80 für Note Off.
  • Notennummer: Jeder Note ist eine numerische Tonhöhe (Frequenzskala) zugeordnet.
  • Geschwindigkeit: Von 0 (keine Geschwindigkeit) bis 127 (am schnellsten).

Schritt 4: Senden einer MIDI-Nachricht

Ich habe die MIDIUSB-Bibliothek eingefügt und anstatt die eingebaute LED zu blinken, habe ich eine Note gesendet.

Code:

⚠ Wichtig: Ab diesem Schritt verwandelt sich das Arduino in einen MIDI-USB-Controller und empfängt keinen Code mehr über USB.

Wenn Sie in einer Position stecken bleiben, in der das Arduino nicht mehr programmiert werden kann, gehen Sie folgendermaßen vor:

  1. Halten Sie die abgerundete Reset-Taste auf dem Arduino-Board gedrückt.
  2. Klicken Sie in der Arduino-IDE auf Hochladen.
  3. Lassen Sie die Reset-Taste los.
  4. Der aktualisierte Code wird auf das Board hochgeladen.

Schritt 5: Senden einer MIDI-Nachricht von jeder Taste

Senden einer MIDI-Nachricht von jeder Taste
Senden einer MIDI-Nachricht von jeder Taste

Der letzte Schritt bestand darin, jede Tonhöhe einer Schaltfläche zuzuordnen. Für die 16 Tasten habe ich eine Skala von C2 bis E3b definiert, das sind die Tonhöhen von 36 bis 51 in einer Reihenfolge von unten nach oben und von links nach rechts. Schauen Sie sich diese Datei von Arduino Tutorials an, um zu sehen, welche Tonhöhe jeder Note entspricht.

Ich habe digitale Pins von 2 bis 12 und analoge Pins (mit ihnen als Digital) von A0 bis A4 verwendet.

Und so sieht der endgültige Code aus

Schritt 6: Einrichten von Kanälen oder Bänken (optional)

Einrichten von Kanälen oder Bänken (optional)
Einrichten von Kanälen oder Bänken (optional)

Falls Sie weitere Tasten mit der Möglichkeit zum Umschalten von Kanälen oder Bänken hinzufügen möchten, wie im MIDI Fighter 3D (siehe Bild), verfügt der Arduino Leonardo über vier weitere Pins, die Sie verwenden können. Der Arduino Leonardo verfügt über 20 digitale Ein-/Ausgangspins, von denen nur 16 zum Spielen von Noten verwendet werden.

Sie können diese zusätzlichen Schaltflächen verwenden, um eine Variable im Code zu aktualisieren und ihren Wert als Parameter an die MidiUSB.sendMIDI-Methode zu senden:

gist.github.com/lean8086/ec8da7486ec3621f9f0b90542a06fcea

Schritt 7: Der Fall

Der Fall
Der Fall
Der Fall
Der Fall

Um dieses Projekt einfach zu halten, war ich bei der Auswahl der enthaltenen Funktionen äußerst wählerisch.

  • Nur Tasten: 16 Sanwa-ähnliche Arcade-Tasten in einem 4x4-Raster. Keine Drehregler, keine Schieberegler, keine Fader oder andere analoge Eingänge.
  • Unibody-Gehäuse: Verwenden Sie keine Schrauben, Muttern, Bolzen oder Klebstoff für das Gehäuse oder zum Halten des Arduino-Boards.
  • Alltägliches Werkzeug: Ich habe zum Beispiel die Drähte gelötet, anstatt einen speziellen Drahtschneider für die Arcade-Tasten zu kaufen.

Unibody-Design

Eine der Herausforderungen, mit denen ich konfrontiert war, bestand darin, ein Gehäuse zu entwerfen, das so einfach ist, dass es nicht zusammengebaut werden muss und in einem einzigen Durchgang in 3D gedruckt werden kann.

Um die Verwendung von Schrauben oder Klebstoff zu vermeiden, musste ich ein Gehäuse entwerfen, das den kleinsten Zugang zur Elektronik bietet. Meine größte Inspiration für das Gehäuse war der Mac Mini, der unten ein kreisförmiges Loch hat. Ich wollte dafür auch einen schraubbaren Deckel entwerfen, entschied mich aber, ihn offen zu lassen, um die Elektronik freizulegen.

Laden Sie die 3D-druckbare Hülle (322 KB) herunter. Empfohlene Einstellungen: PLA, 0,15 mm Schichten, 20% Infill, Unterstützung von Enforcern zumindest für das abgerundete Bodenloch, die Arduino-Halter und den Micro-USB.

Einen Arduino ohne Schrauben halten

Der Leonardo hat 4 Löcher, um die Platine in jedes geeignete Gehäuse zu schrauben, aber meine Idee war es, das Hinzufügen und Entfernen der Platine aus dem Gehäuse einfach zu machen.

Es war einfach, einen Clip-Halter für Arduino auf Thingiverse zu finden, und ich brauchte 5 Iterationen, um diesen Halter in das Unibody-Design zu integrieren. Der schwierigste Teil war es, die Beine zu machen, um die Löcher für die Tasten zu vermeiden und den Micro-USB mittig auf das Gehäuse auszurichten.

Schritt 8: Die Montage

Die Versammlung
Die Versammlung
Die Versammlung
Die Versammlung
Die Versammlung
Die Versammlung

Nachdem ich alle Knöpfe eingesetzt hatte, lötete ich kurze schwarze Drähte, die alle negativen Beine der Knöpfe zwischen ihnen verbanden.

Dann lötete ich lange rote Drähte von jedem positiven Bein, um direkt mit der Platine zu verbinden.

Um die Drähte mit dem Arduino zu verbinden, schneide und löte ich einige Dupont-Enden und bedeckte sie mit Schrumpfschlauch.

Ich habe die Drähte in der gleichen Reihenfolge wie beim MIDI Fighter an die Platine angeschlossen. Von unten nach oben und von links nach rechts

Schritt 9: Verwenden des MIDI-Controllers

Verwenden des MIDI-Controllers
Verwenden des MIDI-Controllers

Jede Musiksoftware (oder geeignete Hardware) kann verwendet werden, um MIDI zu empfangen und Musik zu machen. Die am meisten empfohlenen sind Garage Band, Ableton Live, und ich weiß, dass es eine Reihe von Apps gibt, die auf einem Telefon installiert werden können.

All diese Tools sind nützlich, um vordefinierte Sounds für das Finger-Drumming zu laden, aber sie wurden für größere Zwecke entwickelt. Diese Tools können für Anfänger schwierig zu installieren sein.

MIDI im Webbrowser

Um etwas besser auf dieses Projekt und seine Einfachheit abzustimmen, habe ich ein Web-Tool entwickelt, das sich vollständig auf MIDI-Controller konzentriert.

Punchy: WebMIDI- und WebAudio-Implementierung für MIDI-Controller.

Es kann MIDI-Meldungen in jedem Browser lesen, der die WebMIDI JavaScript API unterstützt. Dann spielt es Sounds in einem Synthesizer (unter Verwendung der WebAudio-API) oder in einem Sampler ab und lädt benutzerdefinierte Sounds aus einem beliebigen Soundpaket.

Ableton Live einrichten

Damit der MIDI-Controller mit Ableton Live funktioniert, befolgen Sie diese einfachen Schritte aus der offiziellen Dokumentation.

Gehen Sie zu Preferences → Link MIDI und stellen Sie sicher, dass der "Input" "Track" und "Remote" ON hat und der Output "Remote" ON hat, sowie wie in der Anleitung erwähnt:

Empfohlen: