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-styrenhet. Medan Raspberry Pi kan ha tagit krona för Internet of Things (IoT) Tingenes Internet: 10 användbara produkter du måste prova 2016Tingen Internet går upp 2016, men vad betyder det exakt? Hur kommer du personligen att dra nytta av Internet of Things? Här är några användbara produkter att illustrera. Läs mer projekt, en enkel Arduino Uno (vad är de olika typerna av Arduino? Arduino Buying Guide: Vilket styrelse ska du få?Det finns så många olika typer av Arduino-brädor där ute, du skulle bli förlåten för att du är förvirrad. Vilket 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örjarguideArduino är en open-source elektronikprototypplattform baserad på flexibel, lättanvänd hårdvara och mjukvara. Den är avsedd för konstnärer, designers, hobbyister och alla som är intresserade av att skapa interaktiva objekt eller miljöer.

instagram viewer
Läs mer att läsa igenom innan du tar itu med detta projekt.

Arduino-Midi-Controller-Breadboard

Vad är MIDI?

MIDI står för Musical Instrument Digital Interface. Den beskriver ett vanligt sätt för musikinstrument att kommunicera med varandra. Om du äger ett elektroniskt tangentbord har du antagligen ett MIDI-gränssnitt. Även om det är några tekniska detaljer involverade 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 skapa olika ljud eller kontrollparametrar.

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

MIDI-kabel-Man

Kontrollera ändring och programändring

Det finns två huvudtyper av MIDI-meddelande: Kontrolländring och Programändring.

Kontrolländringsmeddelanden (CC) -meddelanden innehåller ett styrenhetsnummer 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 ha en handbok som förklarar vilka kanaler och meddelanden som standard är inställda och hur man ändrar dem (känd som MIDI-mapping).

Programbyte (PC) -meddelanden ä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”. I likhet med CC-meddelanden bör tillverkare 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-uttag
  • 2 x 220 ohm-motstånd
  • 2 x 10 k ohm-motstånd
  • 2 x momentana omkopplare
  • Kopplingsledningar
  • Bakbord
  • MIDI-kabel
  • MIDI-enhet eller USB-gränssnitt

Bygg plan

Detta projekt kommer att vara ganska enkelt. Du kan naturligtvis lägga till fler knappar eller hårdvara som passar dina behov. Nästan vilken Arduino som helst är lämplig - 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 meddelanden. Denna krets har byggts på en bakbord Nybörjarelektronik: 10 färdigheter du behöver vetaMånga av oss har aldrig ens rört en lödkolv - men att göra saker kan vara oerhört givande. Här är tio av de mest grundläggande DIY-elektronikfärdigheterna som hjälper dig komma igång. Läs mer här är det emellertid möjligt att överföra den till en projektlåda och lödkopplingar för en robust lösning.

Kretsmontering

Arduino-Midi-Controller-Circuit

MIDI-anslutning

MIDI-Pinout

Anslut ditt MIDI-uttag på följande sätt:

  • 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 mark

Knappanslutning

Knapparna fungerar genom att ändra motståndet som Arduino "ser". Arduino-stiftet går genom omkopplaren rakt till marken (LÅG) via ett 10k ohm-motstånd (ett “dra ner” -motstånd, se till att värdet förblir lågt). När knappen trycks in ändras värdet som kretsen ser till + 5v utan motstånd (HÖG). Arduino kan upptäcka denna förändring med hjälp av digitalRead (stift) kommando. Anslut knapparna till stift 6 och 7 på Arduino digitala 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 en 10k ohm-motstånd
  • Höger sida av knappen till Arduino-stiftet (6 eller 7)

MIDI-testning

Nu när all hårdvara är klar är det dags att testa den. Du behöver ett USB-MIDI-gränssnitt (många ljudgränssnitt kan göra det) och en MIDI-kabel. MIDI-porten som är uppkopplad på brädskivan skickar data, så det är utgången. Din dator tar emot data, därför är det ingången. Detta projekt använder den utmärkta Arduino MIDI Library v4.2 av Forty Seven Effects. När du har installerat biblioteket kan du inkludera det i din kod genom att gå till Skiss> 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-startpaket - Installera drivrutiner och ställa in styrelsen och portenSå du har köpt dig ett Arduino-startpaket och eventuellt andra slumpmässiga coola komponenter - vad nu? Hur kommer du faktiskt igång med att programmera den här Arduino-saken? Hur ställer du in det ... Läs mer till din dator och ladda upp följande testkod (glöm inte att välja rätt kort och port från Verktyg> Board 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); // inställningsserie för MIDI. } void loop () {midiOut.sendControlChange (56,127,1); // skicka en MIDI CC - 56 = anteckning, 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. }

Den här koden skickar ett CC-meddelande, vänta 1 sekund, skicka ett PC-meddelande och vänta sedan 1 sekund på obestämd tid. Om allt fungerar korrekt bör du se ett meddelande visas på din MIDI-bildskärm.

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

  • Se till att alla anslutningar är korrekta
  • Kontrollera att MIDI-porten är korrekt ansluten - det bör finnas två reservstift på ytterkanterna
  • Dubbelkontrollera 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 makt
  • Installera rätt drivrutin för ditt USB-MIDI-gränssnitt

Om du är fortfarande Har du problem kan det vara värt att kontrollera din brödskiva. Billiga styrelser kan ibland vara mycket inkonsekventa och av låg kvalitet - det hände mig när 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 vara ansluten för att testa den här delen.

const int-knapp En = 6; // tilldela knappstift till variabel. const int-knappTo = 7; // tilldela knappstift till inställning av variabelt tomrum () {Serial.begin (9600); // inställningsserien för text pinMode (buttonOne, INPUT); // inställningsknapp som input pinMode (buttonTwo, INPUT); // inställningsknapp som ingång. } void loop () {if (digitalRead (buttonOne) == HIGH) {// kontrollera fördröjning av knapptillstånd (10); // mjukvara avstoppa om (digitalRead (buttonOne) == HÖG) {// kontrollera knappen status igen Serial.println ("Button One fungerar!"); // logresultatfördröjning (250); }} if (digitalRead (knappTo) == HÖG) {// kontrollera fördröjning av knapptillstånd (10); // mjukvara avstoppa om (digitalRead (buttonTwo) == HÖG) {// kontrollera knappen status igen Serial.println ("Button Two Works!"); // logresultatfördröjning (250); } } }

Kör den här koden (men håll USB-kabeln ansluten) och öppna Serial Monitor (Upp till höger> Seriell bildskärm). När du trycker på en knapp ska du se “Button One Works!” eller "Button Two Works!" beroende på knappen du tryckte på.

Det finns en viktig anmärkning att ta bort från det här exemplet - programvaran avbryter. Detta är en enkel fördröjning på 10 millisekunder (ms) mellan att kontrollera knappen och sedan kontrollera knappen igen. Detta ökar noggrannheten för knapptryckningen och hjälper till att förhindra brusutlöser Arduino. Du behöver inte göra det, även om det rekommenderas.

Skapa kontrollern

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

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

#inkludera 
#inkludera 
#inkludera 
#inkludera 
#inkludera const int-knapp En = 6; // tilldela knappstift till variabel. const int-knappTo = 7; // tilldela knappstift till variabel MIDI_CREATE_INSTANCE (HardwareSerial, Serial, midiOut); // skapa ett MIDI-objekt som heter midiOut void setup () {pinMode (buttonOne, INPUT); // inställningsknapp som input pinMode (buttonTwo, INPUT); // inställningsknapp som ingång Serial.begin (31250); // inställning av MIDI-utgång. } void loop () {if (digitalRead (buttonOne) == HIGH) {// kontrollera fördröjning av knapptillstånd (10); // avstängning av mjukvara om (digitalRead (buttonOne) == HÖG) {// kontrollera knappen igen midiOut.sendControlChange (56,127,1); // skicka en MIDI CC - 56 = anteckning, 127 = hastighet, 1 = kanalfördröjning (250); }} if (digitalRead (knappTo) == HÖG) {// kontrollera fördröjning av knapptillstånd (10); // mjukvara avstoppa om (digitalRead (knappTo) == HÖG) {// kontrollera knappen igen midiOut.sendControlChange (42,127,1); // skicka en MIDI CC - 42 = anteckning, 127 = hastighet, 1 = kanalfördröjning (250); } } }

Obs - du kommer inte att kunna använda Serial.println () med MIDI-utgång.
Om du ville skicka ett PC-meddelande istället för ett CC ersätt bara:

midiOut.sendControlChange (42,127,1);

Med:

midiOut.sendProgramChange (värde, kanal); 

I aktion

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

Har du skapat en MIDI-controller?

Det finns många praktiska användningar för en anpassad MIDI-styrenhet. Du kan bygga en enorm fotkontrollerad enhet eller en elegant studiokontroller. Och om du är intresserad av att köpa en, här är de bästa USB MIDI-kontrollerna De 9 bästa USB MIDI-kontrollerna för musikerLetar du efter en USB MIDI-controller? Här är de bästa MIDI-kontrollerna du kan köpa just nu, oavsett budget. Läs mer du kan köpa.

Bildkredit: Keith Gentry via Shutterstock.com

Joe är en examen i datavetenskap från University of Lincoln, Storbritannien. Han är en professionell mjukvaruutvecklare, och när han inte flyger drönare eller skriver musik kan han ofta hitta foton eller producera videor.