Talaan ng mga Nilalaman:
- Ang itinuturo na ito ay orihinal na na-publish sa aking blog noong Hunyo 28, 2020
- Hakbang 1: Pagkurap sa Built-in LED
- Hakbang 2: Pagkurap sa LED sa Manu-manong Pag-input
- Hakbang 3: Pag-install ng MIDIUSB Library
- Hakbang 4: Pagpapadala ng Mensahe ng MIDI
- Hakbang 5: Pagpapadala ng Mensahe ng MIDI Mula sa bawat Button
- Hakbang 6: Pag-set up ng Mga Channel o Bangko (opsyonal)
- Hakbang 7: Ang Kaso
- Hakbang 8: Ang Assembly
- Hakbang 9: Gamit ang MIDI Controller
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-13 06:58
Ang itinuturo na ito ay orihinal na na-publish sa aking blog noong Hunyo 28, 2020
Nasisiyahan ako sa pagbuo ng mga bagay-bagay na may kasamang electronics, at palaging nais kong bumuo ng isang bagay gamit ang Arduino.
Ang isa sa mga pinaka-karaniwang build para sa mga nagsisimula na nahanap ko ay isang MIDI controller. Ang isang MIDI controller ay anumang hardware na nagpapadala ng data ng MIDI (Musical Instrument Digital Interface) sa isang aparato upang ma-trigger ang mga tunog at makagawa ng musika.
Nalaman ko na maraming pagpapatupad ay kumplikado, kahit na para sa mga nagsisimula. Napakasimangot na malaman na kailangan kong gumamit ng daan-daang mga linya ng hindi nababasa na code. O kailangan kong maghinang ng isang risistor sa ilang mga kaso, bukod sa iba pang mga halimbawa.
Ang proyekto
Sa pamamagitan ng pagbuo ng aking sariling Arduino MIDI Controller, ang aking hangarin ay gumawa ng isang kasiya-siyang proyekto, pinapanatili ang ingay sa pinakamababa. Isang bagay na maaaring sundin ng sinumang nagsisimula. Upang magawa iyon, ginamit ko ang MIDI Fighter 3D bilang pangunahing inspirasyon at inalis ang bawat hindi kinakailangang tampok.
Ang kabuuang halaga ng aking proyekto ay mas mababa sa $ 30, at ang listahan ng mga materyales ay talagang maikli (mga link ng kaakibat):
- Arduino Leonardo (o clone): sa pagitan ng $ 10 at $ 20.
- 16 x Mga pindutan ng Sanwa 24mm (o clone): sa pagitan ng $ 1 at $ 2.50 bawat pindutan.
- Panghinang
- 22 AWG Electrical Wire
Ang Lupon ng Arduino
Nang sinimulan ko ang proyektong ito natagpuan ko mayroong maraming mga bagong modelo ng Arduino (hindi kasama ang daan-daang mga katugmang board). At lahat sa kanila ay nag-aalok ng bahagyang magkakaibang mga kakayahan.
Kailangan kong magpadala ng mga signal ng MIDI sa isang computer at ang pinakasimpleng paraan upang gawin iyon ay sa pamamagitan ng USB. Anumang board ng Arduino batay sa ATmega32u4 microcontroller ay may built-in na komunikasyon sa USB.
Ang opisyal na Arduino boards na may katutubong suporta sa USB ay ang Arduino Dahil, Arduino Zero, Arduino Leonardo, Arduino Micro. Ang mga board na ito ay may pinagsamang suporta sa USB na nangangahulugang maaari silang kumilos bilang isang aparatong USB MIDI.
Nagpasya akong pumunta kasama ang isang clone ng Arduino Leonardo. Mayroon itong sapat na mga input para sa proyektong ito at nagsasama rin ito ng mga header, na ginagawang mas madaling i-plug / i-unplug ang mga wire.
Mga Unang Hakbang
Bagaman ipapaliwanag ko nang sunud-sunod kung paano ko ipinatupad ang code para sa proyektong ito, maaari mong i-download ang panghuling bersyon.
Upang mag-upload ng code sa board kailangan mong gamitin ang Arduino IDE. Mayroon din silang isang Web editor na napaka kapaki-pakinabang ngunit mayroon silang isang limitadong quota sa mga oras bawat araw na maaari mong maiipon ang code.
Hakbang 1: Pagkurap sa Built-in LED
Nakakatawa kung paano ang "Hello World" sa mundo ng hardware ay kumikislap ng isang LED.
Ito ay isang magandang sorpresa para sa akin upang matuklasan na ang Arduino Leonardo ay may built-in na LED na maaari mong blink upang subukan ang iyong code. Sa ganoong paraan hindi mo na kailangang bumuo ng isang panlabas na circuit sa isang breadboard na may isang LED at isang risistor.
Code:
Hakbang 2: Pagkurap sa LED sa Manu-manong Pag-input
Ang susunod na lohikal na hakbang ay upang magpikit ng parehong LED tuwing magpapadala ako ng isang senyas. Inalis ko ang takip na plastik ng isang dulo ng 2 mga Dupont wires, at ikinonekta ang kabilang dulo sa board:
- Pin number 2: Isa sa mga digital input (positibo). Maaari itong maging anumang digital pin.
- I-pin ang GND: Anumang ground pin (negatibo).
Ngayon, sa tuwing sasali ako sa mga nakalantad na dulo ng mga wire ay isinasara ko ang circuit at sa gayon maaari kong maisagawa ang code bilang resulta
Ang bawat isa sa 20 mga digital na pin sa Leonardo ay may panloob na risistor (na naka-disconnect bilang default) na maaaring paganahin gamit ang INPUT_PULLUP. Tandaan na ang isang pull-up input ay nangangahulugang ang estado ng pindutan ay baligtad:
- Mataas kapag ang circuit ay bukas (ang pindutan ay HINDI pinindot).
- LOW kapag ang circuit ay sarado (ang pindutan ay pinindot).
Code:
Hakbang 3: Pag-install ng MIDIUSB Library
Pinapayagan ng library na ito ang isang Arduino board na may mga kakayahan sa USB na kumilos bilang isang instrumento ng MIDI sa paglipas ng USB. Suriin ang opisyal na dokumentasyon para sa karagdagang impormasyon.
Gamit ang Arduino IDE, maaari kang mag-install ng labis na Arduino Library gamit ang Library Manager:
- Buksan ang IDE at mag-click sa menu na "Sketch", pagkatapos ay "Isama ang Library", pagkatapos ay "Pamahalaan ang Mga Aklatan".
- Maghanap para sa MIDIUSB at i-click ang I-install.
- Kapag natapos na ito, dapat na lumitaw ang isang naka-install na tag sa tabi ng MIDIUSB library.
- Isara ang Library Manager.
Ngayon ang Leonardo ay maaaring magpadala ng mga mensahe ng MIDI sa pamamagitan ng USB! Ngunit una, ang ilang pananaw tungkol sa kung paano gumagana ang MIDI ay kinakailangan.
Paano Gumagawa ang MIDI
"Ang MIDI (Musical Instrument Digital Interface) ay isang pamantayang protocol ng komunikasyon na nag-uugnay sa mga elektronikong instrumento sa musika, computer, at mga kaugnay na audio device para sa pagtugtog ng musika." - Wikipedia
Humahawak ito ng mga mensahe ng kaganapan na may data ng pitch at bilis ng tala na na-play, bukod sa iba pang mga tagubilin
Sa tukoy na proyekto na ito, ang input mula sa 16 na mga pindutan ay nagpapadala ng iba't ibang mga mensahe sa pamamagitan ng USB. Ang mga mensahe na ito ay maaaring i-convert sa tunog sa isang computer gamit ang anumang naaangkop na software tulad ng GarageBand o Ableton Live.
Anatomy ng isang mensahe na MIDI
Upang magpadala ng isang mensahe na MIDI, ginamit ko ang sendMIDI () na pamamaraan mula sa na-install kong MIDIUSB Library sa hakbang 3.
Ang pamamaraang ito ay maaaring makatanggap ng 4 na mga parameter:
- Uri ng kaganapan: Maaari itong maging 0x09 para sa tala na Bukas (tala ng pag-play) o 0x08 para sa tala na Patayin (itigil ang tala sa paglalaro).
- Tala Ng / Patay: Ang uri ng kaganapan na sinamahan ng MIDI channel (1-16). Gumagamit lang ako ng channel 1 kaya't alinman sa 0x90 para sa tala na Bukas o 0x80 para sa tala na Napatay.
- Numero ng tala: Ang bawat tala ay may kaugnay na bilang ng bilang (sukat ng dalas).
- Tulin: Mula sa 0 (walang bilis) hanggang 127 (pinakamabilis).
Hakbang 4: Pagpapadala ng Mensahe ng MIDI
Isinama ko ang MIDIUSB Library at sa halip na magpikit ang built-in na LED, nagpadala ako ng isang tala.
Code:
⚠ Mahalaga: Mula sa hakbang na ito pasulong ang Arduino ay nagiging isang MIDI USB Controller, at hihinto ito sa pagtanggap ng code sa pamamagitan ng USB.
Kapag natigil ka sa isang posisyon kung saan ang Arduino ay hindi na ma-program, sundin ang mga hakbang na ito:
- Pindutin nang matagal ang bilugan na pindutan ng pag-reset sa Arduino board.
- I-click ang I-upload sa Arduino IDE.
- Pakawalan ang pindutan ng pag-reset.
- Ang na-update na code ay ia-upload sa board.
Hakbang 5: Pagpapadala ng Mensahe ng MIDI Mula sa bawat Button
Ang pangwakas na hakbang ay upang mapa ang bawat pitch sa isang pindutan. Para sa 16 na mga pindutan, tinukoy ko ang isang sukat mula C2 hanggang E3b, na kung saan ay ang mga pitches mula 36 hanggang 51 sa isang pagkakasunud-sunod mula sa ibaba hanggang sa itaas at mula kaliwa hanggang kanan. Suriin ang file na ito mula sa Arduino Tutorials upang makita kung anong pitch ang tumutugma sa bawat tala.
Gumamit ako ng mga digital na pin mula 2 hanggang 12 at mga analog na pin (ginagamit ang mga ito bilang mga digital) mula A0 hanggang A4.
At ganito ang hitsura ng panghuling code
Hakbang 6: Pag-set up ng Mga Channel o Bangko (opsyonal)
Kung sakaling nais mong magdagdag ng higit pang mga pindutan na may kakayahang lumipat ng mga channel o bangko, tulad ng sa MIDI Fighter 3D (tingnan ang imahe), ang Arduino Leonardo ay may apat pang mga pin na maaari mong gamitin. Ang Arduino Leonardo ay mayroong 20 digital input / output pin, kung saan 16 lamang ang ginagamit para sa paglalaro ng mga tala.
Maaari mong gamitin ang mga karagdagang pindutan na iyon upang mag-update ng isang variable sa code, at ipadala ang halaga nito bilang isang parameter sa pamamaraang MidiUSB.sendMIDI:
gist.github.com/lean8086/ec8da7486ec3621f9f0b90542a06fcea
Hakbang 7: Ang Kaso
Upang mapanatili ang proyektong ito na simple, ako ay napaka-picky tungkol sa pagpili kung aling mga tampok ang kasama.
- Mga pindutan lamang: 16 na tulad ng Sanwa na mga arcade button, sa isang 4x4 grid. Walang mga knobs, walang slider, walang faders, o anumang iba pang analog input.
- Kaso ng unibody: Huwag gumamit ng mga turnilyo, nut, bolts, o pandikit para sa enclosure o upang hawakan ang Arduino board.
- Mga tool sa pang-araw-araw: Halimbawa, hinihinang ko ang mga wire sa halip na bumili ng isang tukoy na wire clipper para sa mga arcade button.
Disenyo ng Unibody
Isa sa mga hamon na kinakaharap ko ay ang pagdidisenyo ng isang kaso na sapat na simple na hindi nito kailangan ng pagpupulong at maaaring ma-print sa 3d sa isang solong pagpapatakbo.
Upang maiwasan ang paggamit ng mga turnilyo o pandikit, kailangan kong mag-disenyo ng isang enclosure na nagbibigay ng pinakamaliit na pag-access sa electronics. Ang aking pinakamalaking inspirasyon para sa enclosure ay ang Mac Mini, na may isang hugis bilog na butas sa ilalim. Nais ko ring mag-disenyo ng isang maaaring i-screw na takip para doon, ngunit napagpasyahan kong buksan ito upang mailantad ang electronics.
I-download ang 3d na naka-print na kaso (322 KB). Mga inirekumendang setting: PLA, 0.15mm layer, 20% infill, suportado ng mga nagpapatupad ng hindi bababa sa bilugan na ilalim ng butas, ang may-ari ng Arduino, at ang micro USB.
Hawak ang isang Arduino na walang mga turnilyo
Ang Leonardo ay may 4 na butas upang i-tornilyo ang board sa anumang naaangkop na kaso, ngunit ang aking ideya ay upang gawing madali upang idagdag at alisin ang board mula sa kaso.
Ang paghahanap ng isang may-ari ng clip para sa Arduino sa Thingiverse ay madali, at inabot ako ng 5 pag-ulit upang maisama ang may-ari na iyon sa unibody desing. Ang pinakamahirap na bahagi ay ang paggawa ng mga binti nito upang maiwasan ang mga butas para sa mga pindutan, at gawin ang micro USB upang maging gitnang nakahanay sa kaso.
Hakbang 8: Ang Assembly
Matapos ipasok ang lahat ng mga pindutan sa lugar, naghinang ako ng maikling itim na mga wire na sumasali sa lahat ng mga negatibong binti ng mga pindutan sa pagitan nila.
Pagkatapos ay naghinang ako ng mahabang pulang mga wire mula sa bawat positibong binti upang kumonekta nang direkta sa board.
Upang ikonekta ang mga wires sa Arduino, pinutol at hinang ko ang ilang mga dulo ng Dupont at tinakpan sila ng tubong nagpapababa ng init.
Ikinonekta ko ang mga wire sa board kasunod ng parehong pagkakasunud-sunod tulad ng sa MIDI Fighter. Mula sa ibaba hanggang sa itaas at mula kaliwa hanggang kanan
Hakbang 9: Gamit ang MIDI Controller
Anumang software ng musika (o angkop na hardware) ay maaaring magamit upang makatanggap ng MIDI at gumawa ng ilang musika. Ang pinaka-inirekumenda ay ang Garage Band, Ableton Live, at alam kong mayroong isang kumpol ng mga app na mai-install sa isang telepono.
Ang lahat ng mga tool na iyon ay kapaki-pakinabang para sa pag-load ng paunang natukoy na mga tunog para sa drum drum, ngunit ginawa ito para sa mas malaking layunin. Ang mga tool na iyon ay maaaring maging matigas para sa mga nagsisimula upang mag-set up.
MIDI sa Web browser
Upang makagawa ng isang bagay na higit na nakahanay sa proyektong ito at ang pagiging simple nito, nagtayo ako ng isang tool sa Web na ganap na nakatuon sa mga MIDI control.
Punchy: pagpapatupad ng WebMIDI at WebAudio para sa mga MIDI Controllers.
Maaari itong mabasa ang mga mensahe ng MIDI sa anumang browser na sumusuporta sa WebMIDI JavaScript API. Pagkatapos ay nagpe-play ito ng mga tunog sa isang synthesizer (gamit ang WebAudio API) o sa isang sampler, na naglo-load ng mga pasadyang tunog mula sa anumang sound pack.
I-set up ang Ableton Live
Upang magawa ang MIDI Controller sa Ableton Live, sundin ang mga simpleng hakbang na ito mula sa kanilang opisyal na dokumentasyon.
Pumunta sa Mga Kagustuhan → I-link ang MIDI at tiyaking ang "Input" ay mayroong "Track" at "Remote" at ang output ay "Remote" ON pati na rin ang nabanggit sa gabay: