Hoe een MIDI-controller te maken met een Arduino
Als een muzikant die een verzameling muziekinstrumenten en noise-boxes heeft verzameld, is de eenvoudige Arduino de perfecte tool om een aangepaste MIDI-controller te maken. Terwijl de Raspberry Pi mogelijk de kroon heeft gepakt voor Internet of Things (IoT) Het internet der dingen: 10 nuttige producten die u in 2016 moet proberen Het internet der dingen: 10 nuttige producten die u in 2016 moet proberen Het internet der dingen neemt toe in 2016, maar wat betekent dat precies? Hoe profiteer je persoonlijk van het internet der dingen? Hier zijn een paar nuttige producten om te illustreren. Lees meer projecten, een simpele Arduino Uno (wat zijn de verschillende soorten Arduino? Arduino Koopwijzer: welke kaart moet je kopen? Arduino Koopwijzer: welk bord moet je kopen? Er zijn zoveel verschillende soorten Arduino-kaarten die er zijn, Het zou je vergeven zijn als je in de war was. Wat zou je voor je project moeten kopen? Laat ons helpen, met deze Arduino koopgids! Lees meer) heeft meer dan voldoende power voor dit project.
De eerste keer met een Arduino? Geen zorgen, we hebben een complete Arduino-handleiding voor beginners. Aan de slag met Arduino: een beginnershandleiding Aan de slag met Arduino: een beginnersgids Arduino is een open-sourceprotocol voor prototyping van elektronica op basis van flexibele, gebruiksvriendelijke hardware en software. Het is bedoeld voor kunstenaars, ontwerpers, hobbyisten en iedereen die geïnteresseerd is in het maken van interactieve objecten of omgevingen. Lees meer om door te lezen voordat je dit project aanpakt.
Wat is MIDI?
MIDI staat voor Musical Instrument Digital Interface. Het schetst een standaardmanier om muzikale apparaten met elkaar te laten communiceren. Als je een elektronisch toetsenbord hebt, heb je waarschijnlijk een MIDI-interface. Hoewel er een paar technische details spelen bij de implementatie van MIDI, is het belangrijk om te onthouden dat MIDI geen audio is! MIDI-data is een eenvoudige set instructies (één instructie wordt a genoemd “bericht”) die door een ander apparaat kan worden geïmplementeerd om verschillende geluiden of besturingsparameters te maken.
MIDI ondersteunt 16 kanalen. Dit betekent dat elke kabel 16 verschillende apparaten kan ondersteunen die onafhankelijk van elkaar communiceren. Apparaten worden aangesloten met behulp van een 5-pins DIN-kabel. DIN staat voor “Duits Instituut voor Standaardisatie”, en is gewoon een kabel met vijf pinnen in de connector. USB wordt vaak gebruikt in plaats van 5-pins DIN of er kan een USB-MIDI-interface worden gebruikt.
Control Change en Program Change
Er zijn twee hoofdtypen MIDI-berichten: Control Change en Program Change.
Control Change (CC) -berichten bevatten een controllernummer en een waarde tussen 0 en 127. CC-berichten worden vaak gebruikt om instellingen zoals volume of toonhoogte te wijzigen. Apparaten die MIDI accepteren, moeten een handleiding bevatten waarin wordt uitgelegd welke kanalen en berichten standaard zijn ingesteld en hoe ze kunnen worden gewijzigd (bekend als MIDI-toewijzing).
Program Change-berichten (PC Change) zijn eenvoudiger dan CC-berichten. Pc-berichten bestaan uit een enkel nummer en worden gebruikt om de voorinstelling of patch op een apparaat te wijzigen. PC-berichten zijn soms bekend als “Patch wijzigen”. Net als bij CC-berichten moeten fabrikanten een document bieden waarin wordt beschreven welke presets door een bepaald bericht worden gewijzigd.
Wat je nodig zult hebben
- Arduino
- 5-pins vrouwelijke DIN-bus
- 2 x 220 ohm weerstanden
- 2 x 10k ohm-weerstanden
- 2 x pulsdrukkers
- Aansluitdraden
- broodplank
- MIDI-kabel
- MIDI-apparaat of USB-interface
Water en hout 5 stuks DIN 5 pin PCB-montage vrouwelijke sockets voor pc-toetsenbord Water en hout 5 stuks DIN 5-pins PCB-montage vrouwelijke sockets voor pc-toetsenbord Nu kopen bij Amazon $ 2,79
Bouw plan
Dit project zal vrij eenvoudig zijn. U kunt natuurlijk meer knoppen of hardware toevoegen om aan uw behoeften te voldoen. Bijna elke Arduino zal geschikt zijn - in dit voorbeeld zijn slechts drie pennen nodig. Dit project bestaat uit twee knoppen om het programma te besturen, een MIDI-poort om de gegevens te verzenden en een apparaat om de berichten te ontvangen. Dit circuit is gebouwd op een breadboard. Beginner's Electronics: 10 vaardigheden die je moet kennen De elektronica van beginners: 10 vaardigheden die je moet weten Velen van ons hebben nog nooit een soldeerbout aangeraakt, maar het maken van dingen kan ongelooflijk lonend zijn. Hier zijn tien van de meest elementaire doe-het-zelf-elektronica-vaardigheden om u op weg te helpen. Lees hier meer, maar het is mogelijk om het over te zetten naar een projectdoos en gesoldeerde connectoren voor een robuuste oplossing.
Circuit vergadering
MIDI-verbinding
Sluit uw MIDI-aansluiting als volgt aan:
- MIDI pin 5 naar Arduino Transmit (TX) 1 via een 220 ohm weerstand
- MIDI pin 4 naar Arduino + 5V via een 220 ohm weerstand
- MIDI-pin 2 naar Arduino-aarde
Knop verbinding
De knoppen werken door de weerstand van de Arduino te veranderen “ziet”. De Arduino-pin gaat door de schakelaar recht naar de grond (LAAG) via een weerstand van 10k ohm (a “omlaag trekken” weerstand, zodat de waarde laag blijft). Wanneer de knop wordt ingedrukt, verandert de waarde die wordt gezien door het circuit naar + 5 v zonder een weerstand (HIGH). De Arduino kan deze verandering detecteren met behulp van de digitalRead (pen) commando. Verbind de knoppen met pennen 6 en 7 op de Arduino digitale invoer / uitvoer (I / O). Verbind beide knoppen:
- Linkerkant van knop naar + 5V
- Rechterkant van knop naar Arduino Ground via een weerstand van 10k ohm
- Rechterkant van knop naar Arduino-pin (6 of 7)
MIDI testen
Nu alle hardware klaar is, is het tijd om het te testen. U hebt een USB-MIDI-interface nodig (veel audio-interfaces kunnen dit doen) en een MIDI-kabel. De MIDI-poort die op het breadboard is aangesloten, verzendt gegevens, dus het is de uitvoer. Uw computer ontvangt de gegevens, daarom is dit de invoer. Dit project maakt gebruik van de uitstekende Arduino MIDI Library v4.2 van Forty Seven Effects. Nadat u de bibliotheek hebt geïnstalleerd, kunt u deze in uw code opnemen door naar Schets> Inclusief bibliotheek> MIDI.
Je hebt ook een programma nodig om de binnenkomende MIDI-gegevens te controleren:
- MIDI-monitor voor OS X
- MIDI-OX voor Windows
- KMidimon voor Linux
Verbind de Arduino Aan de slag met uw Arduino starterkit - Stuurprogramma's installeren en het board en de poort aan de slag Aan de slag met uw Arduino starterkit - Stuurprogramma's installeren en het board en de poort instellen Dus u hebt uzelf een Arduino-starterkit gekocht en mogelijk enkele andere willekeurige coole componenten - wat nu? Hoe begin je eigenlijk met het programmeren van dit Arduino-ding? Hoe stel je het in ... Lees meer op je computer en upload de volgende testcode (vergeet niet het juiste bord en de juiste poort uit de Hulpmiddelen> Bord en Hulpmiddelen> Poort menu's).
#include #include #include #include #include MIDI_CREATE_INSTANCE (HardwareSerial, Serial, midiOut); // maak een MIDI-object met de naam midiOut void setup () Serial.begin (31250); // setup serial for MIDI void loop () midiOut.sendControlChange (56,127,1); // stuur een MIDI CC - 56 = note, 127 = velocity, 1 = channel delay (1000); // wacht 1 seconde midiOut.sendProgramChange (12,1); // stuur een MIDI PC - 12 = waarde, 1 = kanaalvertraging (1000); // wacht 1 seconde
Deze code verzendt een CC-bericht, wacht 1 seconde, verzendt een pc-bericht en wacht vervolgens 1 seconde voor onbepaalde tijd. Als alles goed werkt, zou er een bericht op je MIDI-monitor moeten verschijnen.
Als er niets gebeurt, raak dan niet in paniek! Probeer het probleem op te lossen:
- Zorg ervoor dat alle verbindingen correct zijn
- Controleer of de MIDI-poort correct is aangesloten - er moeten 2 reservepinnen aan de buitenranden zijn
- Controleer nogmaals of het circuit correct is
- Controleer of het circuit via een MIDI-kabel is aangesloten op een USB-MIDI-interface
- Controleer of uw MIDI-kabel is aangesloten op de invoer op uw USB-MIDI-interface
- Zorg dat de Arduino stroom heeft
- Installeer de juiste driver voor uw USB-MIDI-interface
Als je bent nog steeds problemen hebben, is het misschien de moeite waard om je breadboard te controleren. Goedkope borden kunnen soms erg inconsistent en van lage kwaliteit zijn - het overkwam mij tijdens het werken aan dit project.
Knop testen
Nu is het tijd om te testen of de knoppen correct werken. Upload de volgende testcode. MIDI hoeft niet te worden aangesloten om dit onderdeel te testen.
const int buttonOne = 6; // wijs knoppen toe aan variabele const int-knopTwee = 7; // wijs knoppen toe aan variable void setup () Serial.begin (9600); // setup serial for text pinMode (buttonOne, INPUT); // setup-knop als input pinMode (buttonTwo, INPUT); // setup-knop als invoer void loop () if (digitalRead (buttonOne) == HIGH) // controleer knop state delay (10); // software de-bounce if (digitalRead (buttonOne) == HIGH) // controleer knop staat opnieuw Serial.println ("Button One Works!"); // log resultaat vertraging (250); if (digitalRead (buttonTwo) == HIGH) // controleer knop state delay (10); // software de-bounce if (digitalRead (buttonTwo) == HIGH) // controleer knop staat opnieuw Serial.println ("Button Two Works!"); // log resultaat vertraging (250);
Voer deze code uit (maar houd de USB-kabel aangesloten) en open de seriële monitor (Rechtsboven> Seriële monitor). Als je op een knop drukt, zou je het moeten zien “Button One werkt!” of “Knop twee werkt!” afhankelijk van de knop die u indrukte.
Er is één belangrijke opmerking om mee te nemen van dit voorbeeld: de software ontkoppelt. Dit is een eenvoudige vertraging van 10 milliseconden (ms) tussen het controleren van de knop en het opnieuw controleren van de knop. Dit verhoogt de nauwkeurigheid van de druk op de knop en helpt voorkomen dat de Arduino door ruis wordt geactiveerd. U hoeft dit niet te doen, hoewel het wordt aanbevolen.
De controller maken
Nu alles is bedraad en werkt, is het tijd om de volledige controller te monteren.
In dit voorbeeld wordt een ander CC-bericht verzonden voor elke knop die wordt ingedrukt. Ik gebruik dit om Ableton Live 9.6 te besturen op OS X. De code is vergelijkbaar met beide bovenstaande testvoorbeelden.
#include #include #include #include #include const int buttonOne = 6; // wijs knoppen toe aan variabele const int-knopTwee = 7; // wijs knoppen toe aan variabele MIDI_CREATE_INSTANCE (HardwareSerial, Serial, midiOut); // maak een MIDI-object met de naam midiOut void setup () pinMode (buttonOne, INPUT); // setup-knop als input pinMode (buttonTwo, INPUT); // setup-knop als invoer Serial.begin (31250); // setup MIDI output void loop () if (digitalRead (buttonOne) == HIGH) // check button state delay (10); // software de-bounce if (digitalRead (buttonOne) == HIGH) // selectievakje knop staat weer midiOut.sendControlChange (56,127,1); // stuur een MIDI CC - 56 = noot, 127 = velocity, 1 = channel delay (250); if (digitalRead (buttonTwo) == HIGH) // controleer knop state delay (10); // software de-bounce if (digitalRead (buttonTwo) == HIGH) // selectietoets staat weer midiOut.sendControlChange (42,127,1); // stuur een MIDI CC - 42 = note, 127 = velocity, 1 = channel delay (250);
Let op - u zult niet kunnen gebruiken Serial.println () met MIDI-uitvoer.
Als u een pc-bericht in plaats van een CC wilt verzenden, vervangt u eenvoudigweg:
midiOut.sendControlChange (42,127,1);
Met:
midiOut.sendProgramChange (waarde, kanaal);
In actie
Hieronder vindt u een demonstratie als controller voor Ableton Live (Beste DJ-software voor elk budget De beste DJ-software voor elk budget De beste DJ-software voor elk budget Goede mixsoftware kan het verschil maken in uw prestaties Of u nu een Mac gebruikt , Windows of Linux, aan elk niveau van vaardigheid en budget wordt tegemoet gekomen als u wilt beginnen met DJ-en. Lees meer). Rechtsboven worden de geluidsmeters weergegeven en het midden in het midden toont de binnenkomende MIDI-berichten (via MIDI Monitor op OS X).
Heb je een MIDI-controller gemaakt??
Er zijn veel praktische toepassingen voor een aangepaste MIDI-controller. Je zou een enorme voetgestuurde eenheid of een slanke studio-controller kunnen bouwen. Heb je een aangepaste MIDI-controller gemaakt? Laat het me weten in de comments, ik zou ze graag willen zien!
Afbeelding: Keith Gentry via Shutterstock.com
Ontdek meer over: Arduino, DJ Software, elektronica, MIDI.