Hvordan lage en MIDI-kontroller med en Arduino

Som en musiker som har samlet en samling av musikinstrumenter og støybokser, er den ydmyke Arduino det perfekte verktøyet for å skape en tilpasset MIDI-kontroller.

Som en musiker som har samlet en samling av musikinstrumenter og støybokser, er den ydmyke Arduino det perfekte verktøyet for å skape en tilpasset MIDI-kontroller.
Annonse

Som en musiker som har samlet en samling av musikinstrumenter og støybokser, er den ydmyke Arduino det perfekte verktøyet for å skape en tilpasset MIDI-kontroller. Selv om Raspberry Pi kan ha tatt kronen for ting til Internett (IoT) Tingenes internett: 10 Nyttige produkter du må prøve i 2016 Tingenes internett: 10 Nyttige produkter du må prøve i 2016 Internettet på ting er på vei opp i 2016, men hva betyr det egentlig? Hvordan har du personlig nytte av tingets internett? Her er noen nyttige produkter å illustrere. Les flere prosjekter, en enkel Arduino Uno (hva er de forskjellige typene Arduino? Arduino Kjøpsguide: Hvilket styre bør du få? Arduino Kjøpeguide: Hvilket styre bør du få? Det er så mange forskjellige typer Arduino boards der ute, du Du må tilgis for å være forvirret. Hva skal du kjøpe for prosjektet? La oss hjelpe, med denne Arduino kjøpeguideen! Les mer) har mer enn nok kraft til dette prosjektet.

Første gang du bruker en Arduino? Ingen bekymringer, vi har en komplett Arduino nybegynnersguide. Komme i gang med Arduino: En nybegynnersveiledning Komme i gang med Arduino: En nybegynnersveiledning Arduino er en open source elektronikk prototyping plattform basert på fleksibel, brukervennlig maskinvare og programvare. Det er ment for kunstnere, designere, hobbyister, og alle som er interessert i å lage interaktive objekter eller miljøer. Les mer for å lese gjennom før du takler dette prosjektet.

Arduino-Midi-Controller-Breadboard

Hva er MIDI?

MIDI står for Musical Instrument Digital Interface. Det skisserer en standard måte for musikalske enheter å kommunisere med hverandre. Hvis du eier et elektronisk tastatur, har du sannsynligvis et MIDI-grensesnitt. Mens det er noen tekniske detaljer involvert i implementeringen av MIDI, er det viktig å huske at MIDI ikke er lyd! MIDI-data er et enkelt sett med instruksjoner (en instruksjon kalles en "melding") som en annen enhet kan implementere for å lage forskjellige lyder eller kontrollparametere.

MIDI støtter 16 kanaler. Dette betyr at hver kabel kan støtte 16 forskjellige enheter som kommuniserer uavhengig med hverandre. Enheter er koblet til med en 5-bens DIN-kabel. DIN står for "German Institute for Standardization", og er bare en kabel med fem pins i kontakten. USB brukes ofte i stedet for 5-pin DIN, eller et USB-MIDI-grensesnitt kan brukes.

MIDI-kabel-Male

Kontroll Endre og Program Endre

Det er to hovedtyper av MIDI-melding: Kontrollendring, og Programendring.

Control Change (CC) meldinger inneholder et kontroller nummer og en verdi mellom 0 og 127. CC meldinger brukes ofte til å endre innstillinger som volum eller tonehøyde. Enheter som godtar MIDI, bør komme med en håndbok som forklarer hvilke kanaler og meldinger som er satt opp som standard, og hvordan de kan endres (kjent som MIDI-kartlegging).

Program Endring (PC) meldinger er enklere enn CC-meldinger. PC-meldinger består av et enkelt nummer, og brukes til å endre forhåndsinnstillingen eller oppdateringen på en enhet. PC-meldinger kalles noen ganger "Patch Change". I likhet med CC-meldinger, bør produsentene gi et dokument som beskriver hvilke forhåndsinnstillinger som endres av en bestemt melding.

Hva du trenger

  • Arduino
  • 5-pinners DIN-hunnkontakt
  • 2 x 220 ohm motstander
  • 2 x 10k ohm motstander
  • 2 x kortvarige brytere
  • Hook-up ledninger
  • bread~~POS=TRUNC
  • MIDI-kabel
  • MIDI-enhet eller USB-grensesnitt

Vann og tre 5 stk. DIN 5-pin PCB-montering. Kvinnekontakter for PC-tastatur. Vann og tre. 5 stk. DIN 5-pin PCB-montering. Kvinnekontakter for PC-tastatur. Kjøp nå hos Amazon $ 4.59.

Bygg Plan

Dette prosjektet vil være ganske enkelt. Du kan selvfølgelig legge til flere knapper eller maskinvare som passer dine behov. Nesten noen Arduino vil være egnet - bare tre pins er nødvendig for dette eksempelet. Dette prosjektet består av to knapper for å styre programmet, en MIDI-port for å sende dataene, og en enhet for å motta meldingene. Denne kretsen er bygget på et brettbrett Beginners Electronics: 10 ferdigheter du trenger å vite Begynnerens elektronikk: 10 ferdigheter du trenger å vite Mange av oss har aldri engang rørt et loddejern - men å gjøre ting kan være utrolig givende. Her er ti av de mest grunnleggende DIY elektronikk ferdighetene for å hjelpe deg med å komme i gang. Les mer her, men det er mulig å overføre den til en prosjektboks og loddeplugg for en robust løsning.

Kretskort

Arduino-Midi-Controller-Circuit

MIDI-tilkobling

MIDI-Pinout

Koble til MIDI-kontakten på følgende måte:

  • MIDI pin 5 til Arduino Transmit (TX) 1 via en 220 ohm motstand
  • MIDI pin 4 til Arduino + 5V via en 220 ohm motstand
  • MIDI pin 2 til Arduino bakken

Knappforbindelse

Knappene fungerer ved å endre motstanden som Arduino "ser". Arduino pin går gjennom bryteren rett til bakken ( LOW ) via en 10k ohm motstand (en "trekk ned" motstand, slik at verdien forblir lav). Når knappen trykkes, endres verdien som ses av kretsen til + 5v uten motstand ( HIGH ). Arduino kan oppdage denne endringen ved hjelp av kommandoen digitalRead (pin) . Koble til knappene 6 og 7 på Arduino digital inngang / utgang (I / O). Koble begge knappene:

  • Venstre side av knappen til + 5V
  • Høyre side av knappen til Arduino Ground via en 10k ohm motstand
  • Høyre side av knappen til Arduino pin (6 eller 7)

MIDI Testing

Nå som all maskinvare er ferdig, er det på tide å teste det. Du trenger et USB-MIDI-grensesnitt (mange lydgrensesnitt kan gjøre dette) og en MIDI-kabel. MIDI-porten som er koblet opp på brødbrettet, sender data, så det er utgangen. Datamaskinen din mottar dataene, derfor er det inngangen. Dette prosjektet bruker det ypperlige Arduino MIDI Library v4.2 av Forty Seven Effects. Når du har installert biblioteket, kan du inkludere det i koden din ved å gå til Sketch> Include Library> MIDI .

Du trenger også et program for å overvåke innkommende MIDI-data:

  • MIDI Monitor for OS X
  • MIDI-OX for Windows
  • KMidimon for Linux

Koble Arduino Komme i gang med Arduino Starter Kit - Installere drivere og sette opp styret og porten Komme i gang med Arduino Starter Kit - Installere drivere og sette opp styret og porten Så du har kjøpt deg en Arduino startpakke, og muligens noen andre tilfeldige, kule komponenter - nå hva? Hvordan kommer du faktisk i gang med programmering av denne Arduino-tingen? Hvordan setter du opp ... Les mer på datamaskinen din og last opp følgende testkode (ikke glem å velge riktig kort og port fra Verktøy> Styret og Verktøy> 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 } 

Denne koden vil sende en CC-melding, vent 1 sekund, send en PC-melding og vent deretter et sekund på ubestemt tid. Hvis alt fungerer riktig, bør du se en melding som vises i MIDI-skjermen.

Hvis ingenting skjer, ikke panikk! Prøv feilsøking:

  • Kontroller at alle tilkoblingene er riktige
  • Kontroller at MIDI-porten er koblet riktig - det skal være 2 ekstra pinner på utsiden
  • Dobbeltklikk kretsen er riktig
  • Kontroller at kretsen er koblet til et USB-MIDI-grensesnitt med en MIDI-kabel
  • Kontroller at MIDI-kabelen er koblet til inngangen på USB-MIDI-grensesnittet
  • Pass på at Arduino har strøm
  • Installer riktig driver for USB-MIDI-grensesnittet

Hvis du fortsatt har problemer, kan det være verdt å sjekke ditt brødbrett. Billige brett kan noen ganger være svært inkonsekvent og lav kvalitet - det skjedde med meg mens jeg jobbet med dette prosjektet.

Knapptesting

Nå er det på tide å teste at knappene fungerer som de skal. Last opp følgende testkode. MIDI trenger ikke å være koblet til å teste denne 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); } } } 

Kjør denne koden (men hold USB-kabelen tilkoblet) og åpne seriell skjerm ( Topp høyre> Seriell skjerm ). Når du trykker på en knapp, bør du se "Button One Works!" Eller "Button Two Works!" Avhengig av knappen du trykket på.

Det er et viktig notat å ta bort fra dette eksemplet - programvaren avvises. Dette er en enkel 10 millisekond (ms) forsinkelse mellom å sjekke knappen og deretter sjekke knappen igjen. Dette øker nøyaktigheten av knappetrykket og bidrar til å forhindre at støy utløses av Arduino. Du trenger ikke å gjøre dette, selv om det anbefales.

Opprette kontrolleren

Nå som alt er koblet og arbeider, er det på tide å montere hele kontrolleren.

Dette eksemplet vil sende en annen CC-melding for hver knapp som trykkes. Jeg bruker dette til å kontrollere Ableton Live 9.6 på OS X. Koden ligner begge testeksemplene ovenfor.

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

Merk - du vil ikke kunne bruke Serial.println () med MIDI-utgang.
Hvis du vil sende en PC-melding i stedet for en CC, erstatter du bare:

 midiOut.sendControlChange(42, 127, 1); 

Med:

 midiOut.sendProgramChange(value, channel); 

I aksjon

Nedenfor er en demonstrasjon som kontroller for Ableton Live (Best DJ-programvare for hvert budsjett. Den beste DJ-programvaren for hvert budsjett. Den beste DJ-programvaren for hvert budsjett. God blandingsprogramvare kan gjøre hele forskjellen i ytelsen. Enten du bruker en Mac, Windows eller Linux, er alle nivåer av dyktighet og budsjett tatt i betraktning hvis du vil starte DJing. Les mer). Øverst til høyre vises lydmålere, og øverste midten viser innkommende midi-meldinger (via MIDI Monitor på OS X).

Har du laget en MIDI Controller?

Det er mange praktiske bruksområder for en tilpasset MIDI-kontroller. Du kan bygge en stor fotstyrt enhet eller en slank studiokontroll. Har du laget en egendefinert MIDI-kontroller? Gi meg beskjed i kommentarene, jeg vil gjerne se dem!

Bilde Kreditt: Keith Gentry via Shutterstock.com

In this article