Frisch gepresst: Folge eins unserer neuen Arduino-Serie! Und hier kommen auch schon die Bauteillisten und Schaltpläne…
Benötigte Bauteile für Arduino MIDI Input
- 1 x Optokoppler-IC 6N138
- 1 x 220 Ohm Widerstand
- 1 x 270 Ohm Widerstand
- 1 x 10 kOhm Widerstand
- 1 x Diode 1N914
- 1 x 5-polige DIN Buchse
Hier kannst du den Korg Monotron kaufen oder die aktuelle Version vom Teensy bestellen.
Und natürlich eine Steckplatine und ein paar Drähte zum Verbinden.
MIDI Input Schaltplan
Plan für Steckplatine
MIDI-Input Arduino Test-Sketch 1
void setup() { pinMode(4, INPUT); pinMode(13, OUTPUT); // Eingebaute LED } void loop() { int variable = digitalRead(4); if (variable == HIGH) { digitalWrite(13, LOW); } else { digitalWrite(13, HIGH); delay(100); } }
Arduino MIDI-In Noten empfangen Test-Sketch 2
byte statusByte; byte dataByte1; byte dataByte2; void setup(){ pinMode(13, OUTPUT); // Eingebaute LED digitalWrite(13, LOW); Serial.begin(31250); } void loop(){ empfangeMIDI(); delay(10); // Ohne Delay leuchtet die LED nicht, dadurch verpasst man aber einige Signale digitalWrite(13, LOW); } void empfangeMIDI(){ do { if (Serial.available()){ statusByte = Serial.read(); dataByte1 = Serial.read(); dataByte2 = Serial.read(); if (statusByte >= 144 && statusByte <= 159) { // Entspricht NoteOn MIDI Kanal 1-16 digitalWrite(13,HIGH); } } } while (Serial.available() > 2); //Ausführen, wenn mindestens 3 Bytes da sind } //Benutzt du einen Arduino mit mehreren seriellen Eingängen (z.B. Leonardo oder Mega)? //Dann ersetze überall im Sketch "Serial" mit "Serial1"!
Hier gibt es nochmals den Arduino MIDI-Input Sketch und die Schaltpläne als Download.
Und hier gibt’s übrigens den Schaltplan zum Korg Monotron.
Kleiner Hinweis
Bei einigen Links handelt es sich um sog. Affiliate Links. Wenn Du über diese Links Produkte bestellst, erhalte ich eine kleine Provision vom Verkäufer. Damit unterstützt du mich und meinen Kanal. An deinem Kaufpreis ändert sich dadurch nichts. Vielen Dank!
Hallo Götz, schön, dass Du wieder ein Projekt mit Arduino und MIDI erklärst. Frage: Ich habe einen Monotron Delay. Würde der auch gehen
Hi Götz,
kann ich diesen Hack dann später auch mit USB benutzen also statt eine Midi-Buchse ein USB-Kabel anlöten?
Hi Torben,
ja, kein Problem, der Teensy hat MIDI-In über USB schon eingebaut.
Hallo Michael,
gute Frage – ehrlich gesagt, ich weiß es nicht. Der Schaltung nach müsste es eigentlich funktionieren. Schraub dir Kiste doch einfach auf, schau ob Lötpunkte da sind und probier’s einfach aus. 🙂
Der Optokoppler muss verwendet werden, um eine Masseschleife zu verhindern. Beim Empfänger dürfen deshalb MIDI-Pin 2 oder -Gehäuse nicht mit Masse verbunden werden (oder höchstens mit einem Kondensator, wenn man RF-Störungen ableiten will; siehe das Electrical Specification Update auf midi.org).
Die Diode soll nicht gegen eine Verpolung schützen; die LED des Optokopplers hält 5 V ohne Probleme aus. Die Diode ist notwendig, um die OK-LED gegen ESD zu schützen. (Es passiert sehr schnell, dass man mit einem Finger an einen Pin des MIDI-Steckers fasst.)
Die 1N914 ist eine ältere Version der 1N4148; der einzige Unterschied ist, dass die 1N914 einen höheren Leckstrom haben könnte. Allerdings ist das mit heutigen Fertigungsverfahren kein Problem mehr, deswegen ist die Hardware von 1N914 und 1N4148 heutzutage identisch. Wer 1N914 kauft, bezahlt nur einen Aufpreis wegen der geringeren Nachfrage.
Der PC900 braucht nicht wirklich einen so kleinen Pullup, der 6N138 erst recht nicht. Wenn man nicht so viel Strom verschwenden will 🙂 , funktioniert auch bis zu 1 kΩ.
Nicht alle MIDI-Befehle haben 3 Bytes, und wenn Running Status verwendet wird, nicht einmal Note-On-Befehle. Und System-Realtime-Befehle können zwischen die Datenbytes anderer Befehle eingefügt werden.
Aber Status-Bytes haben eindeutige Werte, man könnte hier also einfach auf Bytes mit den Werten 144..159 warten und alle anderen Bytes ignorieren.
Coole Idee , allerdings würde mir ein 2ter VCO mit alternativen Wellenform fehlen.
Aber als Lötnoob würde mich das warscheinlich überforden. Genau aus diesem Grund habe ich mir auch noch keine Korg Volca Beats geholt , weil ich diese wenn auch gleich am liebsten modden würde.
Wobei der Monotron ja kein SMD PCB hat oder habe ich das falsch gesehen im Video?
Auf jedenfall coole Reihe. Freue mich drauf und evtl werd ich mich doch selbst ran wagen.
Dann könnte es funktionieren. Von außen betrachtet, hat der Delay keinen Regler für VCO auch die VCF Sektion muss sich mit dem Cufoff begnügen. Dafür hats eben zusätzlich ein Delay.und der Schiebeschalter ermöglicht die Wellenform des LFO (Dreieck/Rechteck) anzuwählen. Auf der Platine innen sind die gleichen Lötpunkte vorhanden bis auf „rate“, der fehlt, obwohl der Regler dafür außen ja da ist. Ich weiß ja nicht wie wichtig dieser Lötpunkt in Deinem neuen Projekt wird.
Danke für Deine Hinweise! 🙂 Was die Masseverbindung angeht hast du natürlich recht – die sollte nur an MIDI-Out und MIDI-Thru verbunden sein.
Bzgl. Running-Status warte mal bitte Folge 3 ab – da kommt das natürlich noch mal dran. Ich kann nur nicht gleichzeitig alles einfach für Anfänger und trotzdem absolut vollständig erklären – das ist leider immer ein Kompromiss!
Danke danke! 🙂 Der Volca hat ja schon MIDI an Bord, da lohnt der Mod eher nicht. SMD ist das beim Monotron auch!
Das weiß ich ehrlich gesagt auch noch nicht… 🙂
Nur MIDI In.
Gibt aber auch nen MIDI out Mod und zig Mods für die einzelnen Instrumente (Snare mit mithilfe von einem zusätzlichen Keramikkondensator , erweiterter Pitch für die Kick , zusätzlicher noise für die Toms etc) , Einzelausgänge und sogar ne Breakoutbox.
Also falls du mal Langeweile hast kann ich Dir gerne meine zum modden schicken 😉
Ich hab ja jetzt schon ’nen Stapel mit 5-6 unfertigen Projekten rumliegen… 😉
Moin Michael und Götz,
habe gerade nochmal im Video von Götz nachgeschaut, bei 1:56 sieht man gut, dass der Lötpunkt von „rate“ direkt auf den mittleren Lötpunkt des (beleuchteten) Rate-Encoders geht (wenn man sich ein Produktfoto danebenlegt und im Kopf spiegelt, ist der Schalter als Richtungshinweis auf der Platine gut zu erkennen). Zur Not also beim MonoDelay da ein Kabel anlöten… Soweit meine theoretischen Überlegungen- ich hoffe wirklich, ich liege da nicht falsch, ich habe mir nämlich heute auch einen Monotron Delay bestellt… bin also selbst einer der Leidtragenden, wenn ich falsch liegen sollte 😉
Vielen Dank für deine inspirierenden Tutorials.
Ich bin zwar kein Musiker und verwende kein NIDI habe aber ganz interessiert die über 4h sehr interessiert angeschaut.
Beschäftige mich schon einige Jahre mit Microcontrollern und war trotzdem glücklich über die überraschend einfache Function zur Potiwertglättung.
Mein Tip für preiswerte Teensy Controller ist OSH PARK. Da gibt es den Teensy 3.2 für $17 und den Teensy LC für $11.29 incl. Versand. Dauert zwar ein bischen (max. 14 Tage) aber für den Preis!?!?!
Teency LC
http://store.oshpark.com/products/teensy-lc
Teensy 3.2
http://store.oshpark.com/products/teensy-3-1
Man kann übrigens bei OSH PARK auch Platinen nach eigenen Entwürfen fertigen lassen. Bin darüber erst darauf gekommen weil sie einem bei der Kaufabwicklung die Controller anpreisen.
Ich nutze übrigens für meine Controller Projekte Platformio.
http://platformio.org/
Bitte weiter so
Heiko
Sorry, kommen doch noch $3 Versandkosten dazu. Habe gerade einen geordert.
Heiko
Danke Heiko für den guten Tipp mit dem Teensy! 🙂
Götz
Hallo Götz,
Kompliment für deine Videos, sind immer Super, weiter so! 🙂
Eine Frage:
Durch den Optocoupler wird doch das ankommende Midisignal invertiert. Also empfängt der Arduino immer eine 1 statt eine 0 und umgekehrt. Im ersten Beispiel tauschst du das ganze durch eine if-Bedingung wieder zurück, doch im nächsten Beispiel als du immer die LED aufleuchten hast lassen wenn eine Note empfangen wird nicht.
Also empfängt der Arduino z.B statt
10010000 (=144)
01101111 (=111)
Hab ich einen Denkfehler oder warum funktioniert es dann aber doch?
LG Leon
Hallo Leon,
vielen Dank für Dein Lob! 🙂
Die Lösung deines Rätsels liegt im MIDI-Signal bzw. der MIDI-Hardware selbst. Dort wird nämlich die „0“ mit HIGH und die „1“ mit LOW übertragen. Und somit stimmt’s dann schon wieder.
LG Götz
Hi, gibt es auch eine Anleitung wie ich den Korg Monotron Duo MIDI fähig umbauen kann? Da ich leider keine Erfahrung mit Elektronik habe würde ich das gerne von einem Experten umbauen lassen. Kann mir da jemand sagen wohin ich mich wenden kann? Danke
Hallo Götz,
Klasse Video, wie immer. Ich bastel zwar nicht an einem Monotron-Hack, aber Midi-In ist immer gut. Habe zur Zeit ein Projekt bestehend aus zwei Arduino Nano. Der eine liest über Multiplexer Buttons ein und gibt diese Informationen direkt als Midi-Befehl an Nano Nr.2, welcher mit FM-Synthese über PWM Sound ausgibt (Mozzi Library, sehr zu empfehlen). Bei mir läuft das ganze über RX und TX. Klappt so schon sehr gut. Ich will das ganze nun aber auftrennen und mit Midi-Buchsen arbeiten. Wenn ich eh schon über Midi kommuniziere, will ich ja auch in der lage sein externe Geräte anzuschliessen. Also müssen natürlich Optocoupler her. Allerdings habe ich nach dem Video ein paar Fragen:
1. Wieso geht der Optokoppler nicht an RX?
2. Ist es mit Midi(serial) auch möglich eine DaisyChain zu bilden?
Ich finde im Netz auch nichts Vernünftiges für Midi-Clock Programmierung mit dem Arduino. Gibt es da schon ein Video von dir? Oder kannst du da etwas empfehlen?
Gruß,
Felix
Danke Felix!
Der Optokoppler funktioniert natürlich auch an RX, hab ich im Video ja auch so gemacht. Allerdings haben die kleineren Arduinos (wie der Uno und auch der Nano) nur diesen einen seriellen Eingang, und über diesen werden sie auch programmiert. Dafür gibt’s einen extra Chip der USB nach Seriell übersetzt und dann auf der Arduino-Platine mit RX und TX verbunden ist. Darum kommt dein Arduino durcheinander, wenn du ihn über USB programmierst und gleichzeitig über den Pin MIDI-Daten empfängst. Ist das Programm erst einmal drauf, kannst du die Pins natürlich verwenden – wie im Video.
Fürs Programmieren über USB also immer solange das Kabel vom RX-Pin abziehen, einen Arduino mit mehreren Seriellen Pins verwenden (z.B. einen Mega) oder per SoftwareSerial Library einem anderen Pin am Nano Senden und Empfangen von Daten beibringen. Kommt auch in einer späteren Folge.
Frage 2 und 3 kann ich dir leider nicht beantworten, wobei ich mir schon vorstellen kann, dass eine daisy-chain mit mehreren Arduinos funktionieren sollte.
VG
Götz
Bei MIDI wird so eine Kette meist mit Hilfe von MIDI-Thru-Buchsen gebildet. Aus Thru kommt einfach eine Kopie des Eingangssignals; dazu muss man einfach eine MIDI-Ausgangs-Schaltung an die Eingangs-Schaltung anschließen. (Allerdings sollte man dann einen Optokoppler nehmen, der schneller ist als der 6N138, z.B. 6N137.)
Alternativ kann man am ersten Gerät mehrere Ausgänge implementieren.
Wenn es nur um eine Verbindung zwischen mehreren Arduinos (oder anderen Mikrocontrollern) mit der selben Versorgungsspannung und gemeinsamer Masse geht, kann man auch einfach die seriellen Signale direkt verbinden.
—
MIDI Clock senden ist einfach.
MIDI Clock empfangen geht (siehe z.B. http://little-scale.blogspot.de/2008/05/how-to-deal-with-midi-clock-signals-in.html), aber sich darauf zu synchronisieren ist eher kompliziert, und es gibt keine fertigen Bibliotheken dafür.
Großartig – vielen Dank für Deine Erklärung! 🙂
Götz
Super Leute. Vielen lieben Dank. Werde es auch mal mit softserial versuchen. Dann kann ich auch direkt versuchen die Buttons über einen attiny laufen lassen.
Ansonsten freue ich mich auf viele weitere Projekte.
Gruß Felix
Hallo Götz, ganz tolles Video! Ich möchte mir gerne ein optisches Metronom bauen und habe dazu deine MIDI Input Anleitung zur Einarbeitung in das Thema genommen. Allerdings bekomme ich über MIDI gar kein Signal. Der OC Test (Sketch 1) funktioniert einwandfrei. Aber über MIDI blinkt nichts. Schaltung mehrfach geprüft und Durchgang bzw. Widerstand bis zum OC Beinchen gemessen. MIDI Output Signal über zurück loopen getestet. Habe auch zwei unterschiedliche MIDI Interfaces verwendet. Ich lasse nur einen einfachen Midi Click aus einer Software laufen. Hast du eine Idee wo das Problem liegen könnte oder einen Vorschlag per Sketch zu debuggen? Besten Dank im Voraus. LG Hakan