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

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

Som en musiker som har samlat en samling musikinstrument och bruslå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 Internet of Things (IoT) -projekt, har en enkel Arduino Uno (vilka är de olika typerna av Arduino?) 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 att läsa igenom innan du tar dig an detta projekt.





Vad är MIDI?

MIDI står för Musical Instrument Digital Interface. Det beskriver ett standard sätt för musikapparater 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 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 göra olika ljud eller styra parametrar.





MIDI stöder 16 kanaler. Detta innebär att varje kabel kan stödja 16 olika enheter som kommunicerar oberoende med varandra. Enheterna ansluts med en 5-polig 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 ett USB-MIDI-gränssnitt kan användas.

MIDI-kabel-hane



Kontrolländring och programändring

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

Control Change (CC) -meddelanden innehåller ett kontrollnummer 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 är inställda som standard 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 är ibland kända som '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-polig DIN-hona
  • 2 x 220 ohm motstånd
  • 2 x 10k ohm motstånd
  • 2 x tillfälliga omkopplare
  • Anslutningskablar
  • Bakbord
  • MIDI -kabel
  • MIDI -enhet eller USB -gränssnitt
Vatten och trä 5 st DIN 5 -stifts PCB -fäste för honkontakter för PC -tangentbord KÖP NU PÅ AMAZON

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 kommer att vara lämplig - endast 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 brödbräda här, men det är möjligt att överföra den till en projektlåda och lödade kontakter för en robust lösning.





Kretsmontering

Arduino-Midi-Controller-Circuit

MIDI -anslutning

MIDI-Pinout

Anslut 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 rakt till marken ( LÅG ) via ett 10k ohm motstånd (ett 'pull down' -motstånd, vilket säkerställer att värdet förblir lågt). När knappen trycks in ändras värdet som ses av kretsen till +5v utan ett motstånd ( HÖG ). Arduino kan upptäcka denna förändring med hjälp av digitalRead (pin) 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 ett 10k ohm motstånd
  • Knappens högra sida till Arduino -stift (6 eller 7)

MIDI -test

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 detta) och en MIDI-kabel. MIDI -porten som är ansluten till panelen skickar data, så det är utdata. Din dator tar emot data, därför är det ingången. Detta projekt använder den utmärkta Arduino MIDI -bibliotek v4.2 av fyrtio sju effekter. 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:

Anslut Arduino till din dator och ladda upp följande testkod (glöm inte att välja rätt kort och port från Verktyg> Styrelse och Verktyg> Port menyer).

#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, skickar ett PC -meddelande och väntar sedan 1 sekund på obestämd tid. Om allt fungerar korrekt bör ett meddelande visas på din MIDI -bildskärm.

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

  • Se till att alla anslutningar är korrekta
  • Kontrollera att MIDI -porten är korrekt ansluten - det bör finnas 2 extra stift på ytterkanterna
  • Dubbelkolla 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 kan det vara värt att kolla din brödbräda. Billiga brädor kan ibland vara mycket inkonsekventa och av låg kvalitet-det hände mig när jag arbetade med detta projekt.

Knapptest

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 denna del.

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 ( Överst till höger> Seriell bildskärm ). När du trycker på en knapp bör du se 'Button One Works!' eller 'Knapp två fungerar!' beroende på knappen du tryckte på.

Det finns en viktig anteckning att ta bort från detta exempel-programvaran avstängning. Detta är en enkel 10 millisekund (ms) fördröjning mellan att kontrollera knappen och sedan kontrollera knappen igen. Detta ökar knapptryckningens precision och hjälper till att förhindra att buller utlöser Arduino. Du behöver inte göra detta, även om det rekommenderas.

Skapa kontrollen

Nu när allt är trådbundet och fungerar är det dags att montera hela styrenheten.

Detta exempel skickar ett annat CC -meddelande för varje knapp som trycks. Jag använder detta för att styra Ableton Live 9.6 på OS X. Koden liknar båda testproven 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 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 helt enkelt:

midiOut.sendControlChange(42,127,1);

Med:

midiOut.sendProgramChange(value, channel);

I aktion

Nedan visas en demonstration som controller för Ableton Live ( Bästa DJ -programvara för varje budget ). Längst upp till höger visas ljudmätarna och den övre mitten visar inkommande midi -meddelanden (via MIDI -skärm på OS X).

hur man återställer osparade word -dokument 2010

Har du gjort en MIDI -controller?

Det finns många praktiska användningsområden för en anpassad MIDI -styrenhet. Du kan bygga en stor fotstyrd enhet eller en elegant studiokontroll. Och om du är intresserad av att köpa en, här är de bästa USB MIDI -kontrollerna du kan köpa.

Bildkredit: Keith Gentry via Shutterstock.com

Vi hoppas att du gillar de saker vi rekommenderar och diskuterar! MUO har samarbetspartners och sponsrade partnerskap, så vi får en del av intäkterna från några av dina köp. Detta påverkar inte priset du betalar och hjälper oss att erbjuda de bästa produktrekommendationerna.

Dela med sig Dela med sig Tweet E-post Är det värt att uppgradera till Windows 11?

Windows har gjorts om. Men är det tillräckligt för att övertyga dig om att byta från Windows 10 till Windows 11?

Läs Nästa
Relaterade ämnen
  • DIY
  • DJ -programvara
  • Arduino
  • Elektronik
  • MIDDAG
Om författaren Joe Coburn(136 artiklar publicerade)

Joe är utbildad 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 hittas ta foton eller producera videor.

Mer från Joe Coburn

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera