Annonse

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 Tingenes internett (IoT) Tingenes internett: 10 nyttige produkter du må prøve i 2016Tingenes internett ryker opp i 2016, men hva betyr det nøyaktig? Hvordan har du personlig fordel av tingenes internett? Her er noen nyttige produkter å illustrere. Les mer prosjekter, en enkel Arduino Uno (hva er de forskjellige typene Arduino? Arduino kjøpeguide: Hvilket brett bør du få?Det er så mange forskjellige typer Arduino-brett der ute, du vil bli tilgitt for å bli forvirret. Hvilket bør du kjøpe for prosjektet ditt? La oss hjelpe med denne Arduino-kjøpsguiden! Les mer ) har mer enn nok kraft til dette prosjektet.

Første gang du bruker en Arduino? Ingen bekymringer, vi har en komplett Arduino nybegynnerguide Komme i gang med Arduino: En nybegynnerguideArduino er en åpen kildekode-prototypeplattform for elektronikk basert på fleksibel, brukervennlig maskinvare og programvare. Den er beregnet på kunstnere, designere, hobbyister og alle som er interessert i å lage interaktive objekter eller miljøer.

Les mer å lese gjennom før du takler dette prosjektet.

Arduino-Midi-Controller-Breadboard

Hva er MIDI?

MIDI står for Musical Instrument Digital Interface. Den skisserer en standard måte for musikalske apparater å 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 kontrollparametere.

MIDI støtter 16 kanaler. Dette betyr at hver kabel kan støtte 16 forskjellige enheter som kommuniserer uavhengig av hverandre. Enhetene 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 inni kontakten. USB brukes ofte i stedet for 5-pinners DIN, eller et USB-MIDI-grensesnitt kan brukes.

MIDI-kabel-Male

Kontroll endring og programendring

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

Kontrollendringsmeldinger (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 manual som forklarer hvilke kanaler og meldinger som er konfigurert som standard, og hvordan du endrer dem (kjent som MIDI-kartlegging).

Program Change (PC) -meldinger er enklere enn CC-meldinger. PC-meldinger består av et enkelt nummer, og brukes til å endre forhåndsinnstillingen eller lappen på en enhet. PC-meldinger er noen ganger kjent som “Patch Change”. I likhet med CC-meldinger, bør produsenter gi et dokument som beskriver hvilke forhåndsinnstillinger som er endret av en bestemt melding.

Hva du trenger

  • Arduino
  • 5-pinners DIN-stikkontakt
  • 2 x 220 ohm-motstander
  • 2 x 10k ohm-motstander
  • 2 x momentante brytere
  • Koblingsledninger
  • Breadboard
  • MIDI-kabel
  • MIDI-enhet eller USB-grensesnitt

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 er bygget på en brødfjel Begynnerelektronikk: 10 ferdigheter du trenger å viteMange av oss har aldri rørt et loddejern - men å gjøre ting kan være utrolig givende. Her er ti av de mest grunnleggende DIY-elektronikkferdighetene for å hjelpe deg i gang. Les mer her er det imidlertid 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-pinne 5 til Arduino Transmit (TX) 1 via en 220 ohm-motstand
  • MIDI-pinne 4 til Arduino + 5V via en 220 ohm-motstand
  • MIDI-pinne 2 til Arduino bakken

Knapptilkobling

Knappene fungerer ved å endre motstanden Arduino "ser". Arduino-tappen går gjennom bryteren rett til bakken (LAV) via en 10k ohm-motstand (en “trekk” -motstand, som sikrer at verdien forblir lav). Når du trykker på knappen, endres verdien av kretsen til + 5v uten en motstand (HØY). Arduino kan oppdage denne endringen ved å bruke digitallesning (pin) kommando. Koble knappene til pinnene 6 og 7 på Arduino digitale 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-pinnen (6 eller 7)

MIDI-testing

Nå som all maskinvaren 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 den inndata. Dette prosjektet bruker den utmerkede Arduino MIDI Library v4.2 av Forty Seven Effects. Når du har installert biblioteket, kan du ta det med i koden ved å gå til Skisse> Inkluder bibliotek> 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 til Arduino Komme i gang med Arduino Starter Kit - Installere drivere og sette opp styret og portenSå, du har kjøpt deg et Arduino-startsett, og muligens noen andre tilfeldige kule komponenter - hva nå? Hvordan kommer du faktisk i gang med å programmere denne Arduino-tingen? Hvordan setter du det opp ... Les mer til datamaskinen din og last opp følgende testkode (ikke glem å velge riktig tavle og port fra Verktøy> Board og Verktøy> Port menyer).

#inkludere 
#inkludere 
#inkludere 
#inkludere 
#inkludere  MIDI_CREATE_INSTANCE (HardwareSerial, Serial, midiOut); // opprette et MIDI-objekt kalt midiOut void setup () {Serial.begin (31250); // oppsett seriell for MIDI. } void loop () {midiOut.sendControlChange (56,127,1); // send en MIDI CC - 56 = note, 127 = hastighet, 1 = kanalforsinkelse (1000); // vent 1 sekund midiOut.sendProgramChange (12,1); // sende en MIDI-PC - 12 = verdi, 1 = kanalforsinkelse (1000); // vent 1 sekund. }

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

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

  • Forsikre deg om at alle tilkoblingene er riktige
  • Kontroller at MIDI-porten er kablet riktig - det skal være to reservepinner på ytterkantene
  • Dobbeltsjekk at kretsen er korrekt
  • Kontroller at kretsen er koblet til et USB-MIDI-grensesnitt med en MIDI-kabel
  • Kontroller at MIDI-kabelen er koblet til inngang på USB-MIDI-grensesnittet
  • Forsikre deg om at Arduino har makt
  • Installer riktig driver for USB-MIDI-grensesnittet

Hvis du er fortsatt Hvis du har problemer, kan det være verdt å sjekke brødbordet ditt. Billige brett kan noen ganger være veldig inkonsekvent 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 koblet for å teste denne delen.

const int-knapp En = 6; // tilordne knappestiften til variabelen. const int-knappTo = 7; // tilordne knappestiften til oppsett av variabelt tomrom () {Serial.begin (9600); // oppsett seriell for tekst pinMode (buttonOne, INPUT); // Setup-knapp som input pinMode (buttonTwo, INPUT); // oppsett-knapp som inngang. } void loop () {if (digitalRead (buttonOne) == HIGH) {// kontroller tastens forsinkelse (10); // programvare de-bounce if (digitalRead (buttonOne) == HIGH) {// sjekk knappen tilstand igjen Serial.println ("Button One Works!"); // log resultats forsinkelse (250); }} if (digitalRead (knappTo) == HØY) {// kontroller tastens forsinkelse (10); // programvare de-bounce if (digitalRead (buttonTwo) == HIGH) {// sjekk knappen tilstand igjen Serial.println ("Button Two Works!"); // log resultats forsinkelse (250); } } }

Kjør denne koden (men hold USB-kabelen tilkoblet) og åpne Serial Monitor (Øverst til høyre> Seriell skjerm). Når du trykker på en knapp, skal du se “Button One Works!” eller "Button Two Works!" avhengig av knappen du trykket på.

Det er en viktig merknad å ta bort fra dette eksemplet - programvaren avbryter. Dette er en enkel forsinkelse på 10 millisekunder (ms) mellom å sjekke knappen og deretter kontrollere knappen igjen. Dette øker nøyaktigheten av knappetrykk og hjelper til med å 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 vil sende en annen CC-melding for hver knapp som trykkes. Jeg bruker dette til å kontrollere Ableton Live 9.6 på OS X. Koden er lik begge testprøvene ovenfor.

#inkludere 
#inkludere 
#inkludere 
#inkludere 
#inkludere const int-knapp En = 6; // tilordne knappestiften til variabelen. const int-knappTo = 7; // tilordne knappestiften til variabelen MIDI_CREATE_INSTANCE (HardwareSerial, Serial, midiOut); // opprette et MIDI-objekt kalt midiOut void setup () {pinMode (buttonOne, INPUT); // Setup-knapp som input pinMode (buttonTwo, INPUT); // oppsett-knapp som inngang Serial.begin (31250); // oppsett MIDI-utgang. } void loop () {if (digitalRead (buttonOne) == HIGH) {// kontroller tastens forsinkelse (10); // programvare de-bounce if (digitalRead (buttonOne) == HIGH) {// sjekk knappestatus midiOut.sendControlChange (56,127,1); // send en MIDI CC - 56 = note, 127 = hastighet, 1 = kanalforsinkelse (250); }} if (digitalRead (knappTo) == HØY) {// kontroller tastens forsinkelse (10); // programvare de-bounce if (digitalRead (knappTo) == HØY) {// sjekk knappestatus midiOut.sendControlChange (42,127,1); // send en MIDI CC - 42 = note, 127 = hastighet, 1 = kanalforsinkelse (250); } } }

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

midiOut.sendControlChange (42,127,1);

Med:

midiOut.sendProgramChange (verdi, kanal); 

I aksjon

Nedenfor er en demonstrasjon som kontroller for Ableton Live (Beste DJ-programvare for ethvert budsjett Den beste DJ-programvaren for ethvert budsjettGod mikseprogramvare kan utgjøre hele forskjellen i ytelsen din. Enten du bruker en Mac, Windows eller Linux, er det mulig med alle ferdighetsnivåer og budsjetter hvis du vil starte DJ-er. Les mer ). Øverst til høyre viser lydmålerne, og den øverste midten viser innkommende midi-meldinger (via MIDI Monitor på OS X).

Har du laget en MIDI-kontroller?

Det er mange praktiske bruksområder for en tilpasset MIDI-kontroller. Du kan bygge en enorm fotkontrollert enhet, eller en elegant studiokontroller. Og hvis du er interessert i å kjøpe en, her de beste USB MIDI-kontrollerne De 9 beste USB MIDI-kontrollene for musikereSer du etter en USB MIDI-kontroller? Her er de beste MIDI-kontrollerne du kan kjøpe akkurat nå, uansett budsjett. Les mer du kan kjøpe.

Bildekreditt: Keith Gentry via Shutterstock.com

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 finne bilder og produsere videoer.