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. 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 förlåtas för att vara förvirrad. Vad ska du köpa för ditt projekt? Låt oss hjälpa till med den här Arduino-köpguiden! Läs mer) har mer än tillräckligt med makt 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.
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 a “meddelande”) som en annan enhet kan implementera för att skapa 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 “Tyska institutet för standardisering”, 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.
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-mappning).
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-pin PCB-montering Kvinnauttag för PC-tangentbord Köp nu På Amazon $ 2,79
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 Nybörjarens elektronik: 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
MIDI-anslutning
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 Arduino “ser”. Arduino-stiftet går genom strömbrytaren rakt till marken (LÅG) via ett 10 k ohm motstånd (a “dra ner” motstånd, vilket garanterar att värdet blir lågt). När knappen trycks in ändras värdet som ses av kretsen till + 5v utan motstånd (HÖG). Arduino kan upptäcka denna ändring med hjälp av digitalRead (pin) kommando. 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 Skissa> Inkludera bibliotek> 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å datorn och ladda upp följande testkod (glöm inte att välja rätt kartong och port från Verktyg> Styrelse och Verktyg> Port menyer).
#inkludera #inkludera #inkludera #inkludera #inkludera MIDI_CREATE_INSTANCE (HardwareSerial, Serial, midiOut); // skapa ett MIDI-objekt som heter midiOut void setup () Serial.begin (31250); // setup seriell för MIDI void loop () midiOut.sendControlChange (56,127,1); // skicka en MIDI CC - 56 = not, 127 = hastighet, 1 = kanalfördröjning (1000); // vänta 1 sekund midiOut.sendProgramChange (12,1); // skicka en MIDI PC - 12 = värde, 1 = kanalfördröjning (1000); // vänta 1 sekund
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 inmatning 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 är fortfarande har problem det kan 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; // tilldela knappstift till variabel const int knappTwo = 7; // tilldela knappstift till variabel tomgångsinställning () Serial.begin (9600); // installationsserie för text pinMode (buttonOne, INPUT); // inställningsknappen som ingångs pinMode (knappTwo, INPUT); // inställningsknapp som inmatning tomgångsling () om (digitalRead (buttonOne) == HIGH) // kontrollera knappfördröjning (10); // programvara avvisa om (digitalRead (buttonOne) == HIGH) // kontrollera knappen igen Serial.println ("Button One Works!"); // Fördröjning av loggresultatet (250); om (digitalRead (buttonTwo) == HÖG) // kontrollera knappen tillståndsfördröjning (10); // programvara avstängning om (digitalRead (buttonTwo) == HIGH) // kontrollera knappen igen Serial.println ("Button Two Works!"); // Fördröjning av loggresultatet (250);
Kör den här koden (men håll USB-kabeln ansluten) och öppna seriell bildskärm (Överst till höger> Seriell bildskärm). När du trycker på en knapp ska du se “Knapp en fungerar!” eller “Knapp två fungerar!” 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.
#inkludera #inkludera #inkludera #inkludera #inkludera const int buttonOne = 6; // tilldela knappstift till variabel const int knappTwo = 7; // Tilldela knappstift till variabel MIDI_CREATE_INSTANCE (HardwareSerial, Serial, midiOut); // skapa ett MIDI-objekt som heter midiOut void setup () pinMode (buttonOne, INPUT); // inställningsknappen som ingångs pinMode (knappTwo, INPUT); // inställningsknappen som ingång Serial.begin (31250); // setup MIDI output void loop () if (digitalRead (buttonOne) == HIGH) // kontrollera knappen tillståndsfördröjning (10); // programvara avstängning om (digitalRead (buttonOne) == HIGH) // kontrollera knappen tillstånd igen midiOut.sendControlChange (56,127,1); // skicka en MIDI CC - 56 = not, 127 = hastighet, 1 = kanalfördröjning (250); om (digitalRead (buttonTwo) == HÖG) // kontrollera knappen tillståndsfördröjning (10); // programvara avstängning om (digitalRead (buttonTwo) == HIGH) // kontrollera knappen tillstånd igen midiOut.sendControlChange (42,127,1); // skicka en MIDI CC - 42 = not, 127 = hastighet, 1 = kanalfördröjning (250);
Obs! Du kommer inte att kunna 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 (värde, kanal);
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
Utforska mer om: Arduino, DJ Software, Elektronik, MIDI.