Hvordan lage en MIDI -kontroller med en Arduino

Hvordan lage en MIDI -kontroller med en Arduino

Som en musiker som har samlet en samling musikkinstrumenter og støykasser, er den ydmyke Arduino det perfekte verktøyet for å lage en tilpasset MIDI -kontroller. Mens Raspberry Pi kan ha tatt kronen for Internet of Things (IoT) -prosjekter, har en enkel Arduino Uno (hva er de forskjellige typene Arduino?) Mer enn nok kraft til dette prosjektet.





Første gang du bruker en Arduino? Ingen bekymringer, vi har en komplett Arduino nybegynnerguide å lese gjennom før du tar fatt på dette prosjektet.





Hva er MIDI?

MIDI står for Musical Instrument Digital Interface. Den skisserer en standard måte for musikalske enheter å kommunisere med hverandre. Hvis du eier et elektronisk tastatur har du sannsynligvis et MIDI -grensesnitt. Selv om det er noen få 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 kontrollere parametere.





MIDI støtter 16 kanaler. Dette betyr at hver kabel kan støtte 16 forskjellige enheter som kommuniserer uavhengig med hverandre. Enheter kobles til med en 5-pinners DIN-kabel. DIN står for 'German Institute for Standardization', og er ganske enkelt en kabel med fem pinner inne i kontakten. USB brukes ofte i stedet for 5-pinners DIN, eller et USB-MIDI-grensesnitt kan brukes.

MIDI-kabel-hann



Kontrollendring og programendring

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

Control Change (CC) -meldinger inneholder et kontrollernummer 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 konfigurert som standard, og hvordan du endrer dem (kjent som MIDI -kartlegging).





Programendringsmeldinger (PC) 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 er noen ganger kjent som 'Patch Change'. I likhet med CC -meldinger, bør produsentene levere et dokument som beskriver hvilke forhåndsinnstillinger som endres av en bestemt melding.

Hva du trenger

  • Arduino
  • 5-pinners DIN hunkontakt
  • 2 x 220 ohm motstander
  • 2 x 10k ohm motstander
  • 2 x midlertidige brytere
  • Tilkoblingskabler
  • Brødbrett
  • MIDI -kabel
  • MIDI -enhet eller USB -grensesnitt
Vann og tre 5 stk DIN 5 -pins PCB -monteringskontakter for PC -tastatur KJØP NÅ PÅ AMAZON

Bygg plan

Dette prosjektet vil være ganske enkelt. Du kan selvfølgelig legge til flere knapper eller maskinvare som passer dine behov. Nesten hvilken som helst Arduino vil være egnet - bare tre pinner er nødvendige for dette eksemplet. Dette prosjektet består av to knapper for å kontrollere programmet, en MIDI -port for å sende dataene, og en enhet for å motta meldingene. Denne kretsen har blitt bygget på et brødbrett her, men det er mulig å overføre den til en prosjektboks og loddede kontakter for en robust løsning.





Kretsmontering

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

Knapptilkobling

Knappene fungerer ved å endre motstanden Arduino 'ser'. Arduino -pinnen går gjennom bryteren rett til bakken ( LAV ) via en 10k ohm motstand (en 'trekk ned' -motstand, som sikrer at verdien forblir lav). Når du trykker på knappen, endres verdien som ses av kretsen til +5v uten motstand ( HØY ). Arduino kan oppdage denne endringen ved hjelp av digitalRead (pin) kommando. Koble knappene til pinne 6 og 7 på Arduino digital inngang/utgang (I/O). Koble til 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 den. Du trenger et USB-MIDI-grensesnitt (mange lydgrensesnitt kan gjøre dette) og en MIDI-kabel. MIDI -porten som er koblet til brødbrettet sender data, så det er utgangen. Datamaskinen din mottar dataene, derfor er det inngangen. Dette prosjektet bruker den utmerkede 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 Skisse> Inkluder bibliotek> MIDI .

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

Koble Arduino til datamaskinen og last opp følgende testkode (ikke glem å velge riktig kort og port fra Verktøy> Brett og Verktøy> 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
}

Denne koden sender en CC -melding, venter 1 sekund, sender en PC -melding og venter 1 sekund på ubestemt tid. Hvis alt fungerer som det skal, skal du se en melding på MIDI -skjermen.

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

  • Sørg for at alle tilkoblinger er riktige
  • Kontroller at MIDI -porten er riktig koblet - det skal være 2 ekstra pinner på ytterkantene
  • Dobbeltsjekk om kretsen er riktig
  • Kontroller at kretsen er koblet til et USB-MIDI-grensesnitt med en MIDI-kabel
  • Kontroller at MIDI -kabelen er koblet til input på USB-MIDI-grensesnittet
  • Sørg for at Arduino har strøm
  • Installer riktig driver for USB-MIDI-grensesnittet

Hvis du er fortsatt har problemer kan det være verdt å sjekke brødbrettet. Noen ganger kan billige brett være veldig inkonsekvente og av 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 tilkoblet for å 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 ( Øverst til høyre> Seriell skjerm ). Når du trykker på en knapp, bør du se 'Button One Works!' eller 'Knapp to fungerer!' avhengig av knappen du trykket på.

Det er en viktig merknad å ta fra dette eksemplet-programvaren de-bounce. Dette er en forsinkelse på 10 millisekunder (ms) mellom å kontrollere knappen og deretter kontrollere knappen igjen. Dette øker nøyaktigheten av knappetrykket og bidrar til å forhindre støy som utløser Arduino. Du trenger ikke å gjøre dette, selv om det anbefales.

Opprette kontrolleren

Nå som alt er kablet og fungerer, er det på tide å sette sammen hele kontrolleren.

Dette eksemplet sender en annen CC -melding for hver knapp som trykkes. Jeg bruker dette til å kontrollere Ableton Live 9.6 på OS X. Koden ligner begge testprøvene 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 ønsket å 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 ( Beste DJ -programvare for ethvert budsjett ). Øverst til høyre viser lydmålere, og øverst i midten vises innkommende midi -meldinger (via MIDI -skjerm på OS X).

trådløst tastatur med touchpad for mac

Har du laget en MIDI -kontroller?

Det er mange praktiske bruksområder for en tilpasset MIDI -kontroller. Du kan bygge en stor fotkontrollert enhet eller en elegant studiokontroller. Og hvis du er interessert i å kjøpe en, her er de beste USB MIDI -kontrollerne du kan kjøpe.

Bildekreditt: Keith Gentry via Shutterstock.com

Vi håper du liker elementene vi anbefaler og diskuterer! MUO har tilknyttede og sponsede partnerskap, så vi mottar en andel av inntektene fra noen av kjøpene dine. Dette påvirker ikke prisen du betaler, og hjelper oss med å tilby de beste produktanbefalingene.

Dele Dele kvitring E -post Er det verdt å oppgradere til Windows 11?

Windows har blitt redesignet. Men er det nok til å overbevise deg om å bytte fra Windows 10 til Windows 11?

Les neste
Relaterte temaer
  • DIY
  • DJ -programvare
  • Arduino
  • Elektronikk
  • MIDDAG
Om forfatteren Joe Coburn(136 artikler publisert)

Joe er utdannet innen informatikk fra University of Lincoln, Storbritannia. Han er en profesjonell programvareutvikler, og når han ikke flyr droner eller skriver musikk, kan han ofte bli funnet å ta bilder eller produsere videoer.

Mer fra Joe Coburn

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!

Klikk her for å abonnere