Paano Gumawa ng isang MIDI Controller sa isang Arduino

Paano Gumawa ng isang MIDI Controller sa isang Arduino

Bilang isang musikero na nagtipon ng isang koleksyon ng mga instrumento sa musika at mga kahon ng ingay, ang mapagpakumbabang Arduino ay ang perpektong tool upang lumikha ng isang pasadyang MIDI controller. Habang ang Raspberry Pi ay maaaring nakuha ang korona para sa mga proyekto ng Internet of Things (IoT), ang isang simpleng Arduino Uno (ano ang iba't ibang uri ng Arduino?) Ay may higit sa sapat na lakas para sa proyektong ito.





First time mo bang gumamit ng Arduino? Walang alalahanin, nakumpleto na namin Patnubay sa nagsisimula ng Arduino upang basahin bago mo harapin ang proyektong ito.





Ano ang MIDI?

Ang MIDI ay nangangahulugang Musical Instrument Digital Interface. Binabalangkas nito ang isang karaniwang paraan upang makipag-usap ang bawat isa sa mga musikal na aparato. Kung nagmamay-ari ka ng isang elektronikong keyboard malamang na mayroon kang isang interface ng MIDI. Habang mayroong ilang mga teknikal na detalye na kasangkot sa pagpapatupad ng MIDI, mahalagang tandaan na ang MIDI ay hindi audio! Ang data ng MIDI ay isang simpleng hanay ng mga tagubilin (ang isang tagubilin ay tinatawag na isang 'mensahe') na maaaring ipatupad ng isa pang aparato upang makagawa ng iba't ibang mga tunog o control parameter.





Sinusuportahan ng MIDI ang 16 na mga channel. Nangangahulugan ito na ang bawat cable ay maaaring suportahan ang 16 iba't ibang mga aparato na nakikipag-usap nang nakapag-iisa sa bawat isa. Nakakonekta ang mga aparato gamit ang isang 5-pin DIN cable. Ang DIN ay kumakatawan sa 'German Institute for Standardization', at simpleng isang cable na may limang mga pin sa loob ng konektor. Kadalasang ginagamit ang USB sa lugar ng 5-pin DIN, o maaaring magamit ang isang USB-MIDI interface.

MIDI-Cable-Lalaki



Kontrolin ang Pagbabago at Pagbabago ng Program

Mayroong dalawang pangunahing uri ng mensahe ng MIDI: Kontrolin ang Pagbabago, at Pagbabago ng Program.

Ang mga mensahe sa Control Change (CC) ay naglalaman ng isang numero ng controller at isang halaga sa pagitan ng 0 at 127. Ang mga mensahe sa CC ay madalas na ginagamit upang baguhin ang mga setting tulad ng dami o pitch. Ang mga aparato na tumatanggap ng MIDI ay dapat na may isang manu-manong nagpapaliwanag kung anong mga channel at mensahe ang na-setup bilang default, at kung paano baguhin ang mga ito (kilala bilang MIDI mapping).





Ang mga mensahe sa Pagbabago ng Program (PC) ay mas simple kaysa sa mga mensahe sa CC. Ang mga mensahe sa PC ay binubuo ng isang solong numero, at ginagamit upang baguhin ang preset o patch sa isang aparato. Ang mga mensahe sa PC ay kilala minsan bilang 'Patch Change'. Katulad ng mga mensahe sa CC, dapat magbigay ang mga tagagawa ng isang dokumento na binabalangkas kung anong mga preset ang binago ng isang partikular na mensahe.

Ano ang Kakailanganin Mo

  • Arduino
  • 5-pin DIN babaeng socket
  • 2 x 220 ohm resistors
  • 2 x 10k ohm resistors
  • 2 x panandalian switch
  • Mga wire na pang-hook
  • Breadboard
  • MIDI cable
  • MIDI aparato o USB interface
Tubig at Kahoy 5 Pcs DIN 5 Pin PCB Pag-mount ng Mga Sockets ng Babae para sa PC Keyboard BUMILI NA NGAYON SA AMAZON

Bumuo ng Plano

Ang proyektong ito ay magiging simple. Maaari kang magdagdag ng kurso ng higit pang mga pindutan o hardware upang umangkop sa iyong mga pangangailangan. Halos anumang Arduino ay magiging angkop - tatlong mga pin lamang ang kinakailangan para sa halimbawang ito. Ang proyektong ito ay binubuo ng dalawang mga pindutan upang makontrol ang programa, isang port ng MIDI upang maipadala ang data, at isang aparato upang makatanggap ng mga mensahe. Ang circuit na ito ay itinayo sa isang breadboard dito, subalit posible na ilipat ito sa isang kahon ng proyekto at mga solder na konektor para sa isang matibay na solusyon.





Circuit Assembly

Arduino-Midi-Controller-Circuit

Koneksyon sa MIDI

MIDI-Pinout

Wire up ang iyong socket ng MIDI tulad ng sumusunod:

  • Ang MIDI pin 5 sa Arduino Transmit (TX) 1 sa pamamagitan ng resistor na 220 ohm
  • Ang MIDI pin 4 sa Arduino + 5V sa pamamagitan ng resistor na 220 ohm
  • Ang MIDI pin 2 sa Arduino ground

Koneksyon ng Butones

Gumagana ang mga pindutan sa pamamagitan ng pagbabago ng paglaban na 'nakikita' ng Arduino. Ang Arduino pin ay dumadaan sa switch nang diretso sa lupa ( MABABA ) sa pamamagitan ng isang resistensya na 10k ohm (isang 'pull down' risistor, tinitiyak na ang halaga ay mananatiling mababa). Kapag pinindot ang pindutan, ang halagang nakikita ng circuit ay nagbabago sa + 5v nang walang risistor ( TAAS ). Mahahanap ng Arduino ang pagbabagong ito gamit ang digitalRead (pin) utos Ikonekta ang mga pindutan sa mga pin 6 at 7 sa Arduino digital input / output (I / O). Ikonekta ang parehong mga pindutan:

  • Kaliwang bahagi ng pindutan sa + 5V
  • Kanang bahagi ng pindutan sa Arduino Ground sa pamamagitan ng isang resistensya na 10k ohm
  • Kanang bahagi ng pindutan sa Arduino pin (6 o 7)

Pagsubok sa MIDI

Ngayon na natapos na ang lahat ng hardware, oras na upang subukan ito. Kakailanganin mo ang isang USB-MIDI interface (maraming mga audio interface ay maaaring gawin ito) at isang MIDI cable. Ang port ng MIDI na naka-wire sa breadboard ay nagpapadala ng data, kaya't ito ang output. Tumatanggap ang iyong computer ng data, samakatuwid ito ang input. Gumagamit ang proyektong ito ng mahusay na Arduino MIDI Library v4.2 sa Apatnapung Pitong Epekto. Kapag na-install mo na ang Library, maaari mo itong isama sa iyong code sa pamamagitan ng pagpunta sa Sketch> Isama ang Library> MIDI .

Kakailanganin mo rin ang isang programa upang subaybayan ang papasok na data ng MIDI:

Ikonekta ang Arduino sa iyong computer at i-upload ang sumusunod na test code (huwag kalimutang piliin ang tamang board at port mula sa Mga tool> Lupon at Mga tool> Port mga menu)

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

Ang code na ito ay magpapadala ng isang mensahe sa CC, maghintay ng 1 segundo, magpadala ng isang mensahe sa PC pagkatapos maghintay ng 1 segundo nang walang katiyakan. Kung gumagana ang lahat nang tama dapat mong makita ang isang mensahe na lilitaw sa iyong monitor na MIDI.

Kung walang nangyari, huwag mag-panic! Subukan ang pag-troubleshoot:

  • Tiyaking tama ang lahat ng mga koneksyon
  • Suriin ang MIDI port ay naka-wire nang tama - dapat mayroong 2 ekstrang mga pin sa mga labas na gilid
  • I-double-check ang circuit ay tama
  • I-verify na ang circuit ay konektado sa isang USB-MIDI interface na may isang MIDI cable
  • Suriin ang iyong MIDI cable ay konektado sa input sa iyong USB-MIDI interface
  • Tiyaking may kapangyarihan ang Arduino
  • I-install ang tamang driver para sa iyong USB-MIDI interface

Kung ikaw ay pa rin pagkakaroon ng mga problema maaari itong suliting suriin ang iyong breadboard. Ang mga murang board ay paminsan-minsan ay napaka-hindi pantay at mababang kalidad - nangyari sa akin habang nagtatrabaho sa proyektong ito.

Pagsubok sa Butones

Ngayon ay oras na upang subukan ang mga pindutan ay gumagana nang tama. I-upload ang sumusunod na code ng pagsubok. Ang MIDI ay hindi kailangang konektado upang subukan ang bahaging ito.

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

}

Patakbuhin ang code na ito (ngunit panatilihing konektado ang USB cable) at buksan ang Serial Monitor ( Nangungunang Kanan> Serial Monitor ). Kapag pinindot mo ang isang pindutan dapat mong makita ang 'Button One Works!' o 'Button Two Works!' depende sa pindutan na iyong pinindot.

Mayroong isang mahalagang tala na dapat alisin mula sa halimbawang ito - ang de-bounce ng software. Ito ay isang simpleng 10 millisecond (ms) pagkaantala sa pagitan ng pag-check ng pindutan at pagkatapos suriin muli ang pindutan. Dagdagan nito ang katumpakan ng pindutin ang pindutan at makakatulong na maiwasan ang ingay na nagpapalitaw sa Arduino. Hindi mo ito kailangang gawin, kahit na inirerekumenda ito.

Lumilikha ng Controller

Ngayon na ang lahat ay naka-wire at gumagana, oras na upang tipunin ang buong controller.

Ang halimbawang ito ay magpapadala ng ibang mensahe sa CC para sa bawat pindutan na pinindot. Ginagamit ko ito upang makontrol ang Ableton Live 9.6 sa OS X. Ang code ay pareho sa parehong mga sample ng pagsubok sa itaas.

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

Tandaan - hindi mo magagamit Serial.println () na may output na MIDI.

Kung nais mong magpadala ng isang mensahe sa PC sa halip na isang CC ay palitan lamang:

midiOut.sendControlChange(42,127,1);

Sa:

midiOut.sendProgramChange(value, channel);

Sa Pagkilos

Nasa ibaba ang isang pagpapakita bilang isang controller para sa Ableton Live ( Pinakamahusay na DJ software para sa bawat badyet ). Ipinapakita ng kanang tuktok ang mga audio meter, at ang tuktok na gitna ay ipinapakita ang mga papasok na midi message (sa pamamagitan ng Monitor ng MIDI sa OS X).

kung paano madagdagan ang nakatuon na video ram sa laptop

Nakagawa ka na ba ng MIDI Controller?

Mayroong maraming mga praktikal na paggamit para sa isang pasadyang MIDI controller. Maaari kang bumuo ng isang malawak na yunit na kinokontrol ng paa, o isang makinis na studio controller. At kung interesado kang bumili ng isa, narito ang pinakamahusay na mga kontrol sa USB MIDI na maaari mong bilhin.

Credit sa Larawan: Keith Gentry sa pamamagitan ng Shutterstock.com

Inaasahan namin na gusto mo ang mga item na inirerekumenda namin at talakayin! Ang MUO ay may kaakibat at naka-sponsor na pakikipagsosyo, kaya nakakatanggap kami ng bahagi ng kita mula sa ilan sa iyong mga pagbili. Hindi ito makakaapekto sa presyo na babayaran mo at makakatulong sa amin na mag-alok ng pinakamahusay na mga rekomendasyon ng produkto.

Magbahagi Magbahagi Mag-tweet Email Ito ba ay Worth Upgrading sa Windows 11?

Ang Windows ay muling idisenyo. Ngunit sapat na ba iyon upang kumbinsihin kang lumipat mula sa Windows 10 patungong Windows 11?

Basahin Susunod
Mga Kaugnay na Paksa
  • DIY
  • DJ Software
  • Arduino
  • Elektronika
  • MIDDAY
Tungkol sa May-akda Joe Coburn(136 Mga Artikulo Na-publish)

Si Joe ay nagtapos sa Computer Science mula sa University of Lincoln, UK. Siya ay isang propesyonal na developer ng software, at kapag hindi siya lumilipad ng mga drone o sumusulat ng musika, madalas siyang matagpuan na kumukuha ng mga larawan o gumawa ng mga video.

Higit pa Mula kay Joe Coburn

Mag-subscribe sa aming newsletter

Sumali sa aming newsletter para sa mga tip sa tech, pagsusuri, libreng ebook, at eksklusibong deal!

Mag-click dito upang mag-subscribe
Kategorya Diy