Hoe maak je een MIDI-controller met een Arduino

Hoe maak je een MIDI-controller met een Arduino

Als muzikant die een verzameling muziekinstrumenten en noiseboxen heeft verzameld, is de eenvoudige Arduino het perfecte hulpmiddel om een ​​aangepaste MIDI-controller te maken. Hoewel de Raspberry Pi misschien de kroon heeft genomen voor Internet of Things (IoT) -projecten, heeft een eenvoudige Arduino Uno (wat zijn de verschillende soorten Arduino?) meer dan genoeg kracht voor dit project.





Gebruik je voor het eerst een Arduino? Geen zorgen, we hebben een complete Arduino beginnershandleiding om door te lezen voordat u dit project aanpakt.





Wat is MIDI?

MIDI staat voor Musical Instrument Digital Interface. Het schetst een standaardmanier voor muzikale apparaten om met elkaar te communiceren. Als je een elektronisch keyboard hebt, heb je waarschijnlijk een MIDI-interface. Hoewel er een paar technische details betrokken zijn bij de implementatie van MIDI, is het belangrijk om te onthouden dat MIDI geen audio is! MIDI-gegevens zijn een eenvoudige reeks instructies (één instructie wordt een 'bericht' genoemd) die een ander apparaat kan implementeren om verschillende geluiden te maken of parameters te regelen.





MIDI ondersteunt 16 kanalen. Dit betekent dat elke kabel 16 verschillende apparaten kan ondersteunen die onafhankelijk met elkaar communiceren. Apparaten worden aangesloten via een 5-polige 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-mannelijk



Besturingswijziging en programmawijziging

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 worden geleverd met een handleiding waarin wordt uitgelegd welke kanalen en berichten standaard zijn ingesteld en hoe deze kunnen worden gewijzigd (bekend als MIDI-toewijzing).





Program Change (PC)-berichten 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 worden soms 'Patch Change' genoemd. Net als bij CC-berichten moeten fabrikanten een document verstrekken waarin wordt beschreven welke voorinstellingen door een bepaald bericht worden gewijzigd.

Wat je nodig zult hebben

  • Arduino
  • 5-polige DIN vrouwelijke aansluiting
  • 2 x 220 ohm weerstanden
  • 2 x 10k ohm weerstanden
  • 2 x momentschakelaars
  • Aansluitdraden
  • Breadboard
  • MIDI-kabel
  • MIDI-apparaat of USB-interface
Water en hout 5 stuks DIN 5-pins PCB-montage vrouwelijke sockets voor pc-toetsenbord KOOP NU OP AMAZON

Bouwplan

Dit project zal vrij eenvoudig zijn. U kunt natuurlijk meer knoppen of hardware toevoegen om aan uw behoeften te voldoen. Bijna elke Arduino is geschikt - voor dit voorbeeld zijn slechts drie pinnen 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 hier op een breadboard gebouwd, maar het is mogelijk om het over te brengen naar een projectdoos en gesoldeerde connectoren voor een robuuste oplossing.





Circuitmontage

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 te veranderen die de Arduino 'ziet'. De Arduino-pin gaat door de schakelaar rechtstreeks naar aarde ( LAAG ) via een weerstand van 10k ohm (een 'pull down'-weerstand, waardoor de waarde laag blijft). Wanneer de knop wordt ingedrukt, verandert de waarde die door het circuit wordt gezien in +5v zonder weerstand ( HOOG ). De Arduino kan deze verandering detecteren met behulp van de digitaal lezen (pin) opdracht. Sluit de knoppen aan op pinnen 6 en 7 op de Arduino digitale input/output (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. Je hebt een USB-MIDI-interface nodig (veel audio-interfaces kunnen dit) 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, dus het is de invoer. Dit project maakt gebruik van de uitstekende Arduino MIDI-bibliotheek v4.2 door Zevenenveertig Effecten. Nadat u de bibliotheek hebt geïnstalleerd, kunt u deze in uw code opnemen door naar Schets > Bibliotheek opnemen > MIDI .

Je hebt ook een programma nodig om de binnenkomende MIDI-data te monitoren:

Sluit de Arduino aan op je computer en upload de volgende testcode (vergeet niet het juiste bord en de juiste poort te selecteren uit de Gereedschappen > Bord en Hulpmiddelen > Poort menu's).

#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 stuurt een CC-bericht, wacht 1 seconde, verzendt een pc-bericht en wacht vervolgens 1 seconde voor onbepaalde tijd. Als alles correct werkt, zou u een bericht in uw MIDI-monitor moeten zien verschijnen.

Als er niets gebeurt, geen paniek! Probeer het oplossen van problemen:

  • 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 is aangesloten op een USB-MIDI-interface met een MIDI-kabel
  • Controleer of uw MIDI-kabel is aangesloten op de invoer op uw USB-MIDI-interface
  • Zorg ervoor dat de Arduino stroom heeft
  • Installeer de juiste driver voor uw USB-MIDI-interface

Als je bent nog altijd Als u problemen heeft, is het misschien de moeite waard om uw breadboard te controleren. Goedkope borden kunnen soms erg inconsistent en van lage kwaliteit zijn - het overkwam me 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 aangesloten te zijn om deze part 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 'Knop twee werkt!' afhankelijk van de knop die u hebt ingedrukt.

Er is één belangrijke opmerking om mee te nemen uit dit voorbeeld: de software de-bounce. 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 wel wordt aanbevolen.

De controller maken

Nu alles is aangesloten en werkt, is het tijd om de volledige controller in elkaar te zetten.

In dit voorbeeld wordt voor elke ingedrukte knop een ander CC-bericht verzonden. Ik gebruik dit om Ableton Live 9.6 op OS X te besturen. 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 geen gebruik maken van Serieel.println() met MIDI-uitgang.

Als u een pc-bericht wilt verzenden in plaats van een CC, vervangt u eenvoudig:

midiOut.sendControlChange(42,127,1);

Met:

midiOut.sendProgramChange(value, channel);

In actie

Hieronder vindt u een demonstratie als controller voor: Ableton Live ( Beste DJ-software voor elk budget ). Rechtsboven staan ​​de audiometers, en middenboven de binnenkomende midi-berichten (via MIDI-monitor op OSX).

hoe lang gaan computervoedingen mee?

Heb je een MIDI-controller gemaakt?

Er zijn veel praktische toepassingen voor een aangepaste MIDI-controller. Je zou een enorme voetgestuurde eenheid kunnen bouwen, of een slanke studiocontroller. En als u geïnteresseerd bent om er een te kopen, zijn hier de beste USB MIDI-controllers die u kunt kopen.

Afbeelding tegoed: Keith Gentry via Shutterstock.com

We hopen dat je de items die we aanbevelen en bespreken leuk vindt! MUO heeft gelieerde en gesponsorde partnerschappen, dus we ontvangen een deel van de inkomsten van sommige van uw aankopen. Dit heeft geen invloed op de prijs die u betaalt en helpt ons de beste productaanbevelingen te doen.

Deel Deel Tweeten E-mail Is het de moeite waard om te upgraden naar Windows 11?

Windows is opnieuw ontworpen. Maar is dat genoeg om u te overtuigen om over te stappen van Windows 10 naar Windows 11?

Lees volgende
Gerelateerde onderwerpen
  • doe-het-zelf
  • DJ-software
  • Arduino
  • Elektronica
  • MIDDAG
Over de auteur Joe Coburn(136 gepubliceerde artikelen)

Joe is afgestudeerd in computerwetenschappen aan de Universiteit van Lincoln, VK. Hij is een professionele softwareontwikkelaar en als hij niet met drones vliegt of muziek schrijft, is hij vaak te vinden om foto's te maken of video's te maken.

Meer van Joe Coburn

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren