Innholdsfortegnelse:

Bygg en Arduino MIDI -kontroller: 9 trinn (med bilder)
Bygg en Arduino MIDI -kontroller: 9 trinn (med bilder)

Video: Bygg en Arduino MIDI -kontroller: 9 trinn (med bilder)

Video: Bygg en Arduino MIDI -kontroller: 9 trinn (med bilder)
Video: Веб-программирование – информатика для руководителей бизнеса 2016 2024, Desember
Anonim

Denne instruksen ble opprinnelig publisert på bloggen min 28. juni 2020

Jeg liker å bygge ting som inkluderer elektronikk, og jeg har alltid ønsket å bygge noe ved hjelp av Arduino.

En av de vanligste byggene for nybegynnere jeg fant var en MIDI -kontroller. En MIDI -kontroller er hvilken som helst maskinvare som sender MIDI -data (Musical Instrument Digital Interface) til en enhet for å utløse lyder og lage musikk.

Jeg fant ut at mange implementeringer er kompliserte, selv de som er for nybegynnere. Det var veldig frustrerende å finne at jeg må bruke hundrevis av linjer med uleselig kode. Eller at jeg må lodde en motstand i noen tilfeller, blant andre eksempler.

Prosjektet

Ved å bygge min egen Arduino MIDI -kontroller, var min intensjon å lage et hyggelig prosjekt, og holde støyen på den laveste. Noe enhver nybegynner kan følge. For å oppnå det brukte jeg MIDI Fighter 3D som en grunnleggende inspirasjon og fjernet alle ikke-viktige funksjoner.

Den totale kostnaden for prosjektet mitt var under $ 30, og materialelisten var veldig kort (tilknyttede lenker):

  • Arduino Leonardo (eller klon): mellom $ 10 og $ 20.
  • 16 x Sanwa -knapper 24 mm (eller klon): mellom $ 1 og $ 2,50 per knapp.
  • Loddejern
  • 22 AWG elektrisk ledning

Arduino -styret

Da jeg startet dette prosjektet fant jeg ut at det er en haug med nye Arduino -modeller (ikke inkludert hundrevis av kompatible brett). Og alle tilbyr litt forskjellige muligheter.

Jeg trengte å sende MIDI -signaler til en datamaskin, og den enkleste måten å gjøre det på er via USB. Ethvert Arduino-kort basert på ATmega32u4 mikrokontroller har innebygd USB-kommunikasjon.

De offisielle Arduino -kortene med innebygd USB -støtte er Arduino Due, Arduino Zero, Arduino Leonardo, Arduino Micro. Disse kortene har integrert USB -støtte som betyr at de kan fungere som en USB MIDI -enhet.

Jeg bestemte meg for å gå med en klone av Arduino Leonardo. Den har nok innganger for dette prosjektet, og den inkluderer også overskrifter, noe som gjør det lettere å koble til/fra ledninger.

Første steg

Selv om jeg forklarer trinn for trinn hvordan jeg implementerte koden for dette prosjektet, kan du laste ned den endelige versjonen.

For å laste opp kode til brettet må du bruke Arduino IDE. De har også en webredaktør som er veldig nyttig, men de har en begrenset kvote på tider per dag som du kan kompilere kode.

Trinn 1: Blinker den innebygde LED-en

Det er morsomt hvordan "Hello World" i maskinvareverdenen blinker med en LED.

Det var en hyggelig overraskelse for meg å oppdage at Arduino Leonardo har en innebygd LED som du kan blinke for å teste koden din. På den måten trenger du ikke å bygge en ekstern krets på et brødbrett med en LED og en motstand.

Kode:

Trinn 2: Blinker LED -en på manuell inngang

Det neste logiske trinnet var å blinke samme LED hver gang jeg sender et signal. Jeg fjernet plastdekselet på den ene enden av 2 Dupont -ledninger, og koblet den andre enden til brettet:

  • Pin nummer 2: En av de digitale inngangene (positive). Det kan være en hvilken som helst digital pin.
  • Pin GND: Enhver bakkenål (negativ).

Hver gang jeg slutter meg til de avslørte endene av ledningene, lukker jeg kretsen, og dermed kan jeg utføre kode som konsekvens

Hver av de 20 digitale pinnene på Leonardo har en intern motstand (frakoblet som standard) som kan aktiveres ved hjelp av INPUT_PULLUP. Husk at en opptrekksinngang betyr at knappen er invertert:

  • HØY når kretsen er åpen (knappen trykkes IKKE).
  • LAV når kretsen er lukket (knappen trykkes).

Kode:

Trinn 3: Installere MIDIUSB -biblioteket

Dette biblioteket lar et Arduino -kort med USB -funksjoner fungere som et MIDI -instrument over USB. Se den offisielle dokumentasjonen for mer informasjon.

Ved å bruke Arduino IDE kan du installere ekstra Arduino -biblioteker ved hjelp av Library Manager:

  1. Åpne IDE og klikk på "Sketch" -menyen, deretter "Inkluder bibliotek" og deretter "Administrer biblioteker".
  2. Søk etter MIDIUSB og klikk på Installer.
  3. Når den er ferdig, skal en installert tag vises ved siden av MIDIUSB -biblioteket.
  4. Lukk Library Manager.

Nå kan Leonardo sende MIDI -meldinger via USB! Men først er det nødvendig med litt innsikt om hvordan MIDI fungerer.

Slik fungerer MIDI

"MIDI (Musical Instrument Digital Interface) er en standard kommunikasjonsprotokoll som forbinder elektroniske musikkinstrumenter, datamaskiner og relaterte lydenheter for å spille musikk." - Wikipedia

Den håndterer hendelsesmeldinger med data om tonehøyde og hastighet på notatet som spilles, blant annet instruksjoner

I dette spesifikke prosjektet sender inngangen fra de 16 knappene forskjellige meldinger via USB. Disse meldingene kan konverteres til lyd på en datamaskin ved hjelp av passende programvare som GarageBand eller Ableton Live.

Anatomi av en MIDI -melding

For å sende en MIDI -melding brukte jeg sendMIDI () -metoden fra MIDIUSB -biblioteket jeg installerte på trinn 3.

Denne metoden kan motta 4 parametere:

  • Hendelsestype: Det kan være 0x09 for note On (play note) eller 0x08 for note Off (slutte å spille note).
  • Merk På/Av: Hendelsestypen kombinert med MIDI-kanalen (1-16). Jeg bruker bare kanal 1, så det er enten 0x90 for note On eller 0x80 for note Off.
  • Notatnummer: Hver note har en tilhørende numerisk tonehøyde (frekvensskala).
  • Hastighet: Fra 0 (ingen hastighet) til 127 (raskeste).

Trinn 4: Sende en MIDI -melding

Jeg inkluderte MIDIUSB-biblioteket, og i stedet for å blinke den innebygde LED-en, sendte jeg et notat.

Kode:

Viktig: Fra dette trinnet blir Arduino til en MIDI USB -kontroller, og den slutter å motta kode via USB.

Når du sitter fast i en posisjon der Arduino ikke lenger kan programmeres, følger du disse trinnene:

  1. Hold nede den avrundede tilbakestillingsknappen på Arduino -kortet.
  2. Klikk Last opp på Arduino IDE.
  3. Slipp reset -knappen.
  4. Den oppdaterte koden vil bli lastet opp til tavlen.

Trinn 5: Sende en MIDI -melding fra hver knapp

Sender en MIDI -melding fra hver knapp
Sender en MIDI -melding fra hver knapp

Det siste trinnet var å kartlegge hver tonehøyde til en knapp. For de 16 knappene definerte jeg en skala fra C2 til E3b, som er pitchene fra 36 til 51 i en sekvens fra bunn til topp og fra venstre til høyre. Sjekk ut denne filen fra Arduino Tutorials for å se hvilken tonehøyde som tilsvarer hver note.

Jeg brukte digitale pinner fra 2 til 12 og analoge pinner (bruker dem som digitaler) fra A0 til A4.

Og slik ser den siste koden ut

Trinn 6: Konfigurere kanaler eller banker (valgfritt)

Konfigurere kanaler eller banker (valgfritt)
Konfigurere kanaler eller banker (valgfritt)

Hvis du vil legge til flere knapper med muligheten til å bytte kanal eller bank, som i MIDI Fighter 3D (se bilde), har Arduino Leonardo fire pinner til som du kan bruke. Arduino Leonardo har 20 digitale input/output pins, hvorav bare 16 er i bruk for å spille notater.

Du kan bruke de ekstra knappene til å oppdatere en variabel i koden, og sende verdien som en parameter til MidiUSB.sendMIDI -metoden:

gist.github.com/lean8086/ec8da7486ec3621f9f0b90542a06fcea

Trinn 7: Saken

Saken
Saken
Saken
Saken

For å holde dette prosjektet enkelt, var jeg ekstremt kresen med å velge hvilke funksjoner som inkluderer.

  • Bare knapper: 16 Sanwa-lignende arkadeknapper, i et 4x4-rutenett. Ingen knapper, ingen glidebrytere, ingen fadere eller annen analog inngang.
  • Unibody -etui: Bruk ingen skruer, muttere, bolter eller lim til skapet eller til å holde Arduino -brettet.
  • Daglige verktøy: For eksempel loddet jeg ledningene i stedet for å kjøpe en bestemt trådklipper til arkadeknappene.

Unibody Design

En av utfordringene jeg møtte var å designe en sak som er enkel nok til at den ikke trenger montering og kan skrives ut i 3D i en enkelt runde.

For å unngå å bruke skruer eller lim, trengte jeg å designe et kabinett som gir den minste tilgangen til elektronikken. Min største inspirasjon for kabinettet var Mac Mini, som har et sirkelformet hull nederst. Jeg ønsket også å designe et skrubart lokk for det, men jeg bestemte meg for å la det åpne for å avsløre elektronikken.

Last ned den 3D -utskrivbare saken (322 KB). Anbefalte innstillinger: PLA, 0,15 mm lag, 20% fylling, støtter håndhevere i det minste for det avrundede bunnhullet, Arduino -holderne og mikro -USB.

Holder en Arduino uten skruer

Leonardo har 4 hull for å skru brettet inn i et passende tilfelle, men tanken min var å gjøre det enkelt å legge til og fjerne brettet fra saken.

Det var enkelt å finne en klipsholder til Arduino på Thingiverse, og det tok meg fem iterasjoner å integrere holderen i Unibody Desing. Den vanskeligste delen var å lage bena for å unngå hullene for knappene, og for å få mikro -USB -en til å justeres midt på saken.

Trinn 8: Forsamlingen

Forsamlingen
Forsamlingen
Forsamlingen
Forsamlingen
Forsamlingen
Forsamlingen

Etter å ha satt inn alle knappene på plass, loddet jeg korte svarte ledninger som forbinder alle de negative benene på knappene mellom dem.

Deretter loddet jeg lange røde ledninger fra hvert positivt ben for å koble direkte til brettet.

For å koble ledningene til Arduino, kuttet og loddet jeg noen Dupont-ender og dekket dem med varmekrympende rør.

Jeg koblet ledningene til brettet etter samme rekkefølge som i MIDI Fighter. Fra bunn til topp og fra venstre til høyre

Trinn 9: Bruke MIDI -kontrolleren

Bruke MIDI -kontrolleren
Bruke MIDI -kontrolleren

Enhver musikkprogramvare (eller passende maskinvare) kan brukes til å motta MIDI og lage litt musikk. De mest anbefalte er Garage Band, Ableton Live, og jeg vet at det er en haug med apper å installere på en telefon.

Alle disse verktøyene er nyttige for å laste inn forhåndsdefinerte lyder for fingertromming, men de ble laget for større formål. Disse verktøyene kan være vanskelige for nybegynnere å sette opp.

MIDI i nettleseren

For å gjøre noe mer i tråd med dette prosjektet og dets enkelhet, bygde jeg et webverktøy helt fokusert på MIDI -kontrollere.

Punchy: WebMIDI- og WebAudio -implementering for MIDI -kontrollere.

Den kan lese MIDI -meldinger i alle nettlesere som støtter WebMIDI JavaScript API. Deretter spiller den lyder i en synthesizer (ved hjelp av WebAudio API) eller i en sampler, og laster inn egendefinerte lyder fra en hvilken som helst lydpakke.

Sett opp Ableton Live

For å få MIDI -kontrolleren til å fungere med Ableton Live, følg disse enkle trinnene fra den offisielle dokumentasjonen.

Gå til Preferences → Link MIDI og kontroller at "Input" har "Track" og "Remote" ON og at utgangen har "Remote" ON, så vel som nevnt i guiden:

Anbefalt: