Indholdsfortegnelse:

Opbygning af en Arduino MIDI -controller: 9 trin (med billeder)
Opbygning af en Arduino MIDI -controller: 9 trin (med billeder)

Video: Opbygning af en Arduino MIDI -controller: 9 trin (med billeder)

Video: Opbygning af en Arduino MIDI -controller: 9 trin (med billeder)
Video: Web Programming - Computer Science for Business Leaders 2016 2024, December
Anonim

Denne instruktive blev oprindeligt offentliggjort på min blog den 28. juni 2020

Jeg nyder at bygge ting, der indeholder elektronik, og jeg har altid ønsket at bygge noget ved hjælp af Arduino.

En af de mest almindelige builds til begyndere, jeg fandt, var en MIDI -controller. En MIDI -controller er enhver hardware, der sender MIDI -data (Musical Instrument Digital Interface) til en enhed for at udløse lyde og lave musik.

Jeg fandt ud af, at mange implementeringer er komplicerede, selv dem, der er for begyndere. Det var meget frustrerende at finde ud af, at jeg har brug for at bruge hundredvis af linjer med ulæselig kode. Eller at jeg skal lodde en modstand i nogle tilfælde, blandt andre eksempler.

Projektet

Ved at bygge min egen Arduino MIDI -controller var min hensigt at lave et sjovt projekt og holde støjen på den laveste. Noget enhver nybegynder kunne følge. For at opnå det brugte jeg MIDI Fighter 3D som en basisinspiration og fjernede alle ikke-væsentlige funktioner.

De samlede omkostninger ved mit projekt var under $ 30, og materialelisten var virkelig kort (tilknyttede links):

  • Arduino Leonardo (eller klon): mellem $ 10 og $ 20.
  • 16 x Sanwa -knapper 24 mm (eller klon): mellem $ 1 og $ 2,50 pr. Knap.
  • Loddekolbe
  • 22 AWG elektrisk ledning

Arduino Board

Da jeg startede dette projekt, fandt jeg ud af, at der er en masse nye Arduino -modeller (ikke inklusive hundredvis af kompatible tavler). Og alle tilbyder lidt forskellige muligheder.

Jeg havde brug for at sende MIDI -signaler til en computer, og den enkleste måde at gøre det på er via USB. Ethvert Arduino-kort baseret på ATmega32u4 mikrokontroller har indbygget USB-kommunikation.

De officielle Arduino -tavler med indbygget USB -understøttelse er Arduino Due, Arduino Zero, Arduino Leonardo, Arduino Micro. Disse kort har integreret USB -understøttelse, hvilket betyder, at de kan fungere som en USB MIDI -enhed.

Jeg besluttede at gå med en klon af Arduino Leonardo. Det har nok input til dette projekt, og det inkluderer også headers, hvilket gør det lettere at tilslutte/afbryde ledninger.

Første trin

Selvom jeg trin for trin vil forklare, hvordan jeg implementerede koden til dette projekt, kan du downloade den sidste version.

For at uploade kode til tavlen skal du bruge Arduino IDE. De har også en web -editor, der er meget nyttig, men de har en begrænset kvote på tidspunkter om dagen, som du kan kompilere kode.

Trin 1: Blinker den indbyggede LED

Det er sjovt, hvordan "Hello World" i hardwareens verden blinker med en LED.

Det var en dejlig overraskelse for mig at opdage, at Arduino Leonardo har en indbygget LED, som du kan blinke for at teste din kode. På den måde behøver du ikke bygge et eksternt kredsløb på et brødbræt med en LED og en modstand.

Kode:

Trin 2: Blinker LED'en ved manuel indgang

Det næste logiske trin var at blinke den samme LED hver gang jeg sender et signal. Jeg fjernede plastdækslet på den ene ende af 2 Dupont -ledninger og sluttede den anden ende til kortet:

  • Pin nummer 2: En af de digitale indgange (positiv). Det kan være en hvilken som helst digital pin.
  • Pin GND: Enhver jordstift (negativ).

Hver gang jeg slutter mig til de eksponerede ender af ledningerne, lukker jeg kredsløbet, og dermed kan jeg udføre kode som følge heraf

Hver af de 20 digitale stifter på Leonardo har en intern modstand (frakoblet som standard), der kan aktiveres ved hjælp af INPUT_PULLUP. Husk, at en pull-up input betyder, at knaptilstanden er inverteret:

  • HØJ, når kredsløbet er åbent (der trykkes IKKE på knappen).
  • LOW når kredsløbet er lukket (der trykkes på knappen).

Kode:

Trin 3: Installation af MIDIUSB -biblioteket

Dette bibliotek tillader et Arduino -kort med USB -funktioner at fungere som et MIDI -instrument over USB. Se den officielle dokumentation for mere information.

Ved hjælp af Arduino IDE kan du installere ekstra Arduino Libraries ved hjælp af Library Manager:

  1. Åbn IDE, og klik på menuen "Skitse", derefter "Inkluder bibliotek" og derefter "Administrer biblioteker".
  2. Søg efter MIDIUSB, og klik på Installer.
  3. Når det er færdigt, skal et installeret tag vises ved siden af MIDIUSB -biblioteket.
  4. Luk Library Manager.

Nu kan Leonardo sende MIDI -beskeder via USB! Men først er der brug for en vis indsigt i, hvordan MIDI fungerer.

Sådan fungerer MIDI

"MIDI (Musical Instrument Digital Interface) er en standard kommunikationsprotokol, der forbinder elektroniske musikinstrumenter, computere og relaterede lydenheder til afspilning af musik." - Wikipedia

Det håndterer hændelsesbeskeder med data om tonehøjde og hastighed på den spillede note, blandt andre instruktioner

I dette specifikke projekt sender input fra de 16 knapper forskellige meddelelser via USB. Disse meddelelser kan konverteres til lyd på en computer ved hjælp af passende software som GarageBand eller Ableton Live.

Anatomi af en MIDI -besked

For at sende en MIDI -besked brugte jeg metoden sendMIDI () fra MIDIUSB -biblioteket, som jeg installerede i trin 3.

Denne metode kan modtage 4 parametre:

  • Begivenhedstype: Det kan være 0x09 for note On (play note) eller 0x08 for note Off (stop med at spille note).
  • Bemærk Til/Fra: Hændelsestypen kombineret med MIDI-kanalen (1-16). Jeg bruger kun kanal 1, så det er enten 0x90 for note On eller 0x80 for note Off.
  • Notenummer: Hver note har en tilhørende numerisk tonehøjde (frekvensskala).
  • Hastighed: Fra 0 (ingen hastighed) til 127 (hurtigste).

Trin 4: Afsendelse af en MIDI -besked

Jeg inkluderede MIDIUSB-biblioteket, og i stedet for at blinke den indbyggede LED, sendte jeg en note.

Kode:

Vigtigt: Fra dette trin og fremefter bliver Arduino til en MIDI USB -controller, og den holder op med at modtage kode via USB.

Når du sidder fast i en position, hvor Arduino ikke længere kan programmeres, skal du følge disse trin:

  1. Hold den afrundede reset -knap nede på Arduino -kortet.
  2. Klik på Upload på Arduino IDE.
  3. Slip nulstillingsknappen.
  4. Den opdaterede kode uploades til tavlen.

Trin 5: Afsendelse af en MIDI -besked fra hver knap

Afsendelse af en MIDI -besked fra hver knap
Afsendelse af en MIDI -besked fra hver knap

Det sidste trin var at kortlægge hver tonehøjde til en knap. For de 16 knapper definerede jeg en skala fra C2 til E3b, som er tonehøjderne fra 36 til 51 i en sekvens fra bund til top og fra venstre mod højre. Tjek denne fil fra Arduino Tutorials for at se, hvilken tonehøjde der svarer til hver note.

Jeg brugte digitale ben fra 2 til 12 og analoge ben (brug dem som digitaler) fra A0 til A4.

Og sådan ser den endelige kode ud

Trin 6: Opsætning af kanaler eller banker (valgfrit)

Opsætning af kanaler eller banker (valgfrit)
Opsætning af kanaler eller banker (valgfrit)

Hvis du vil tilføje flere knapper med mulighed for at skifte kanal eller bank, som i MIDI Fighter 3D (se billede), har Arduino Leonardo yderligere fire pins, du kan bruge. Arduino Leonardo har 20 digitale input/output pins, hvoraf kun 16 er i brug til at spille noter.

Du kan bruge de ekstra knapper til at opdatere en variabel i koden og sende dens værdi som parameter til MidiUSB.sendMIDI -metoden:

gist.github.com/lean8086/ec8da7486ec3621f9f0b90542a06fcea

Trin 7: Sagen

Sagen
Sagen
Sagen
Sagen

For at holde dette projekt enkelt var jeg ekstremt kræsen med at vælge, hvilke funktioner der inkluderer.

  • Kun knapper: 16 Sanwa-lignende arkadeknapper i et 4x4-gitter. Ingen knapper, ingen skydere, ingen fadere eller andre analoge indgange.
  • Unibody -sag: Brug ingen skruer, møtrikker, bolte eller lim til kabinettet eller til at holde Arduino -kortet.
  • Daglige værktøjer: For eksempel lodde jeg ledningerne i stedet for at købe en bestemt trådklipper til arkadeknapperne.

Unibody Design

En af de udfordringer, jeg stod over for, var at designe en sag, der var enkel nok til, at den ikke skal samles og kan udskrives 3d i et enkelt løb.

For at undgå at bruge skruer eller lim var jeg nødt til at designe et kabinet, der giver den mindste adgang til elektronikken. Min største inspiration til kabinettet var Mac Mini, som har et cirkelformet hul i bunden. Jeg ville også designe et skruelåg til det, men jeg besluttede at lade det åbne for at afsløre elektronikken.

Download den 3D -printbare sag (322 KB). Anbefalede indstillinger: PLA, 0,15 mm lag, 20% fyldning, understøtter håndhævere i det mindste til det afrundede bundhul, Arduino -holdere og mikro -USB.

Holder en Arduino uden skruer

Leonardo har 4 huller til at skrue brættet i enhver passende sag, men min idé var at gøre det let at tilføje og fjerne brættet fra sagen.

Det var let at finde en klipholder til Arduino på Thingiverse, og det tog mig 5 iterationer at integrere holderen i unibody desing. Den sværeste del var at lave benene for at undgå hullerne til knapperne og at få mikro -USB'en til at være centreret på linje med sagen.

Trin 8: Forsamlingen

Forsamlingen
Forsamlingen
Forsamlingen
Forsamlingen
Forsamlingen
Forsamlingen

Efter at have indsat alle knapperne på plads lodde jeg korte sorte ledninger, der forbandt alle de negative ben på knapperne mellem dem.

Derefter lodde jeg lange røde ledninger fra hvert positivt ben for at forbinde direkte til brættet.

For at forbinde ledningerne til Arduino skar jeg og lodde nogle Dupont-ender og dækkede dem med varmekrympeslange.

Jeg sluttede ledningerne til brættet i samme rækkefølge som i MIDI Fighter. Fra bund til top og fra venstre mod højre

Trin 9: Brug af MIDI -controlleren

Brug af MIDI -controlleren
Brug af MIDI -controlleren

Enhver musiksoftware (eller passende hardware) kan bruges til at modtage MIDI og lave noget musik. De mest anbefalede er Garage Band, Ableton Live, og jeg ved, at der er en masse apps at installere på en telefon.

Alle disse værktøjer er nyttige til indlæsning af foruddefinerede lyde til fingertromning, men de blev lavet til større formål. Disse værktøjer kan være svære for begyndere at oprette.

MIDI i webbrowseren

For at gøre noget mere i overensstemmelse med dette projekt og dets enkelhed, byggede jeg et webværktøj helt fokuseret på MIDI -controllere.

Punchy: WebMIDI og WebAudio implementering til MIDI controllere.

Den kan læse MIDI -meddelelser i enhver browser, der understøtter WebMIDI JavaScript API. Derefter afspiller den lyde i en synthesizer (ved hjælp af WebAudio API) eller i en sampler og indlæser brugerdefinerede lyde fra enhver lydpakke.

Opsæt Ableton Live

For at få MIDI -controlleren til at fungere med Ableton Live, skal du følge disse enkle trin fra deres officielle dokumentation.

Gå til Indstillinger → Link MIDI, og sørg for, at "Input" har "Track" og "Remote" ON, og output har "Remote" ON såvel som nævnt i guiden:

Anbefalede: