Hur man gör en MIDI-kontroller med en Arduino

Som en musiker som har samlat en samling musikinstrument och ljudlådor, är den ödmjuka Arduino det perfekta verktyget för att skapa en anpassad MIDI-kontroller.

Som en musiker som har samlat en samling musikinstrument och ljudlådor, är den ödmjuka Arduino det perfekta verktyget för att skapa en anpassad MIDI-kontroller.
Annons

Som en musiker som har samlat en samling musikinstrument och ljudlådor, är den ödmjuka Arduino det perfekta verktyget för att skapa en anpassad MIDI-kontroller. Medan Raspberry Pi kan ha tagit kronan för saker av Internet (IoT) Tingenes internet: 10 Användbara produkter du måste försöka 2016 Tingenes internet: 10 Användbara produkter du måste försöka 2016 Tingenes Internet går upp i 2016, men vad betyder det exakt? Hur kan du personligen dra nytta av saker av Internet? Här är några användbara produkter att illustrera. Läs fler projekt, en enkel Arduino Uno (vad är olika typer av Arduino? Arduino Köpguide: Vilket styrelse ska du få? Arduino Köpguide: Vilket styrelse ska du få? Det finns så många olika typer av Arduino brädor där ute, du du ska bli förlåtad. Vilka ska du köpa för ditt projekt? Låt oss hjälpa till med denna Arduino köpguide! Läs mer) har mer än tillräckligt med kraft för detta projekt.

Första gången du använder en Arduino? Inga bekymmer, vi har en komplett Arduino nybörjarguide. Komma igång med Arduino: En nybörjarhandbok Komma igång med Arduino: En nybörjarhandbok Arduino är en öppen prototypplattform för öppen källkod baserad på flexibel, lättanvänd maskinvara och programvara. Den är avsedd för artister, designers, hobbyister och alla som är intresserade av att skapa interaktiva objekt eller miljöer. Läs mer för att läsa igenom innan du hanterar detta projekt.

Arduino-Midi-Controller-Breadboard

Vad är MIDI?

MIDI står för Musical Instrument Digital Interface. Det skisserar ett vanligt sätt för musikaliska enheter att kommunicera med varandra. Om du äger ett elektroniskt tangentbord har du förmodligen ett MIDI-gränssnitt. Även om det finns några tekniska detaljer som är inblandade i implementeringen av MIDI, är det viktigt att komma ihåg att MIDI inte är ljud! MIDI-data är en enkel uppsättning instruktioner (en instruktion kallas ett "meddelande") som en annan enhet kan implementera för att göra olika ljud eller kontrollparametrar.

MIDI stöder 16 kanaler. Det innebär att varje kabel kan stödja 16 olika enheter som kommunicerar oberoende med varandra. Enheterna är anslutna med en 5-polig DIN-kabel. DIN står för "German Institute for Standardization", och är helt enkelt en kabel med fem stift inom kontakten. USB används ofta i stället för 5-stifts DIN, eller ett USB-MIDI-gränssnitt kan användas.

MIDI-kabel-Man

Kontrolländring och programändring

Det finns två huvudtyper av MIDI-meddelande: Control Change och Program Change.

Meddelanden för kontrolländring (CC) innehåller ett kontrollernummer och ett värde mellan 0 och 127. CC-meddelanden används ofta för att ändra inställningar som volym eller tonhöjd. Enheter som accepterar MIDI bör komma med en manual som förklarar vilka kanaler och meddelanden som standard är inställda och hur man ändrar dem (känd som MIDI-kartläggning).

Programändringsmeddelanden (PC) är enklare än CC-meddelanden. PC-meddelanden består av ett enda nummer och används för att ändra förinställningen eller korrigeringen på en enhet. PC-meddelanden kallas ibland "Patch Change". På samma sätt som CC-meddelanden bör tillverkarna tillhandahålla ett dokument som beskriver vilka förinställningar som ändras av ett visst meddelande.

Vad du kommer att behöva

  • Arduino
  • 5-stifts DIN-hylsa
  • 2 x 220 ohm motstånd
  • 2 x 10k ohm motstånd
  • 2 x momentbrytare
  • Hook-up-ledningar
  • Bakbord
  • MIDI-kabel
  • MIDI-enhet eller USB-gränssnitt

Vatten och trä 5 st DIN 5-stift PCB-montering Kvinnauttag för PC-tangentbord Vatten och trä 5 st DIN 5-stift PCB-montering Kvinnauttag för PC-tangentbord Köp nu hos Amazon $ 4.59

Byggplan

Detta projekt kommer att bli ganska enkelt. Du kan naturligtvis lägga till fler knappar eller hårdvara som passar dina behov. Nästan alla Arduino kommer att vara lämpliga - bara tre stift behövs för detta exempel. Detta projekt består av två knappar för att styra programmet, en MIDI-port för att skicka data och en enhet för att ta emot meddelandena. Denna krets har byggts på ett brödbräda. Beginners Electronics: 10 färdigheter du behöver veta Beginners Electronics: 10 färdigheter du behöver veta Många av oss har aldrig ens rört ett lödstryk - men att göra saker kan vara otroligt givande. Här är tio av de mest grundläggande DIY elektronik färdigheter för att hjälpa dig att komma igång. Läs mer här, men det är möjligt att överföra den till en projektlåda och lödda kontakter för en robust lösning.

Circuit Assembly

Arduino-Midi-Controller-Circuit

MIDI-anslutning

MIDI-Pinout

Dra upp ditt MIDI-uttag enligt följande:

  • MIDI-stift 5 till Arduino Transmit (TX) 1 via ett 220 ohm motstånd
  • MIDI-stift 4 till Arduino + 5V via ett 220 ohm motstånd
  • MIDI-stift 2 till Arduino-marken

Knappanslutning

Knapparna fungerar genom att ändra motståndet som Arduino "ser". Arduino-stiftet går genom omkopplaren direkt till jord ( LOW ) via ett 10k ohm-motstånd (ett "drag ned" motstånd, vilket säkerställer att värdet blir lågt). När knappen trycks in ändras värdet som ses av kretsen till + 5v utan motstånd ( HIGH ). Arduino kan upptäcka denna ändring med kommandot digitalRead (pin) . Anslut knapparna till stift 6 och 7 på Arduino digital ingång / utgång (I / O). Anslut båda knapparna:

  • Vänster sida av knappen till + 5V
  • Höger sida av knappen till Arduino Ground via ett 10k ohm motstånd
  • Höger sida av knappen till Arduino pin (6 eller 7)

MIDI-testning

Nu när all hårdvara är klar är det dags att testa det. Du behöver ett USB-MIDI-gränssnitt (många ljudgränssnitt kan göra det) och en MIDI-kabel. MIDI-porten ansluten på brödbrädet skickar data, så det är utgången. Din dator tar emot data, därför är det ingången. Detta projekt använder det utmärkta Arduino MIDI Library v4.2 med Forty Seven Effects. När du har installerat biblioteket kan du inkludera det i din kod genom att gå till Sketch> Include Library> MIDI .

Du behöver också ett program för att övervaka inkommande MIDI-data:

  • MIDI Monitor för OS X
  • MIDI-OX för Windows
  • KMidimon för Linux

Anslut Arduino Komma igång med ditt Arduino Starter Kit - Installera drivrutiner och ställa in styret och porten Komma igång med ditt Arduino Starter Kit - Installera drivrutiner och konfigurera styrelsen och porten Så du har köpt dig en Arduino startpaket och eventuellt några andra slumpmässiga coola komponenter - nu vad? Hur kommer du faktiskt igång med att programmera denna Arduino sak? Hur ställer du upp det ... Läs mer på din dator och ladda upp följande testkod (glöm inte att välja rätt kartong och port från Verktyg> Styrelse och Verktyg> Portmenyer).

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

Denna kod skickar ett CC-meddelande, väntar 1 sekund, skicka ett PC-meddelande och vänta sedan en sekund i obestämd tid. Om allt fungerar korrekt borde du se ett meddelande som visas i din MIDI-bildskärm.

Om ingenting händer, var inte panik! Prova felsökning:

  • Kontrollera att alla anslutningar är korrekta
  • Kontrollera att MIDI-porten är korrekt ansluten - det borde finnas 2 reservstift på utsidan
  • Kontrollera att kretsen är korrekt
  • Kontrollera att kretsen är ansluten till ett USB-MIDI-gränssnitt med en MIDI-kabel
  • Kontrollera att din MIDI-kabel är ansluten till ingången på ditt USB-MIDI-gränssnitt
  • Se till att Arduino har ström
  • Installera rätt drivrutin för ditt USB-MIDI-gränssnitt

Om du fortfarande har problem kan det vara värt att kolla din breadboard. Billiga brädor kan ibland vara mycket inkonsekventa och lågkvalitativa - det hände mig medan jag arbetade med detta projekt.

Knapptestning

Nu är det dags att testa att knapparna fungerar korrekt. Ladda upp följande testkod. MIDI behöver inte anslutas för att testa den här delen.

 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); } } } 

Kör den här koden (men håll USB-kabeln ansluten) och öppna seriell bildskärm ( Top Right> Serial Monitor ). När du trycker på en knapp ska du se "Button One Works!" Eller "Button Two Works!" Beroende på vilken knapp du tryckte på.

Det finns en viktig anteckning att ta bort från det här exemplet - programvaran avvisar. Detta är en enkel 10 millisekund (ms) fördröjning mellan att kontrollera knappen och sedan kontrollera knappen igen. Detta ökar noggrannheten på knapptrycket och hjälper till att förhindra att ljudet utlöses av Arduino. Du behöver inte göra det, även om det rekommenderas.

Skapa kontrollenheten

Nu när allt är anslutet och fungerar, är det dags att montera hela kontrollenheten.

Detta exempel skickar ett annat CC-meddelande för varje knapp som trycks in. Jag använder detta för att kontrollera Ableton Live 9.6 på OS X. Koden liknar båda testproverna ovan.

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

Obs! Du kan inte använda Serial.println () med MIDI-utgång.
Om du vill skicka ett PC-meddelande istället för en CC, ersätt det enkelt:

 midiOut.sendControlChange(42, 127, 1); 

Med:

 midiOut.sendProgramChange(value, channel); 

I aktion

Nedan är en demonstration som styrenhet för Ableton Live (Bästa DJ-programvara för varje budget Den bästa DJ-mjukvaran för varje budget Den bästa DJ-mjukvaran för varje budget Bra mixningssoftware kan göra stor skillnad i din prestanda. Oavsett om du använder en Mac, Windows eller Linux, tillgodoses varje nivå av skicklighet och budget om du vill starta DJing. Läs mer). Överst till höger visas ljudmätarna, och den övre mitten visar de inkommande midi-meddelandena (via MIDI Monitor på OS X).

Har du gjort en MIDI Controller?

Det finns många praktiska användningsområden för en anpassad MIDI-kontroller. Du kan bygga en stor fotkontrollerad enhet eller en elegant studiokontroll. Har du gjort en anpassad MIDI-kontroller? Låt mig veta i kommentarerna, jag skulle gärna se dem!

Bildkrediter: Keith Gentry via Shutterstock.com

In this article