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.

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.
Advertentie

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! Read More) heeft meer dan genoeg 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-source prototype-platform voor prototyping 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.

Arduino-Midi-Controller-Breadboard

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 een "bericht" genoemd) die een ander apparaat kan gebruiken om verschillende geluiden of regelparameters 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 "German Institute for Standardization" 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.

MIDI-kabel-Male

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 (ook wel 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 Change". 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-pins 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 $ 4, 59

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

Arduino-Midi-Controller-Circuit

MIDI-verbinding

MIDI-Pinout

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 die de Arduino "ziet" te veranderen. De Arduino-pin gaat via een weerstand van 10k ohm rechtstreeks door de schakelaar naar aarde ( LOW ) (een "pull-down" -weerstand, waardoor de waarde laag blijft). Wanneer de knop wordt ingedrukt, verandert de waarde die wordt gezien door het circuit in + 5v zonder een weerstand ( HOOG ). De Arduino kan deze verandering detecteren met behulp van de opdracht digitalRead (pin) . 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 de 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 te gaan .

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 bord en de poort aan de slag Aan de slag met uw Arduino starterkit - Stuurprogramma's installeren en het bord 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 om het juiste bord en de juiste poort te selecteren via het menu Hulpmiddelen> Bord en Extra> Poort ).

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

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 je MIDI-kabel is aangesloten op de ingang van je USB-MIDI-interface
  • Zorg dat de Arduino stroom heeft
  • Installeer de juiste driver voor uw USB-MIDI-interface

Als u nog steeds problemen ondervindt, is het misschien de moeite waard om uw 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; // 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); } } } 

Voer deze code uit (maar houd de USB-kabel aangesloten) en open de seriële monitor ( rechtsboven> seriële monitor ). Als u op een knop drukt, ziet u "Button One Works!" Of "Button Two Works!", Afhankelijk van de knop die u indrukte.

Er is een 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; // 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); } } } 

Opmerking - u kunt Serial.println () niet gebruiken 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(value, channel); 

In actie

Hieronder is 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 je prestaties. Of je 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 reacties, ik zou ze graag willen zien!

Afbeelding: Keith Gentry via Shutterstock.com

In this article