MIDI2LED - en MIDI -kontrollert LED -stripe lyseffekt: 6 trinn
MIDI2LED - en MIDI -kontrollert LED -stripe lyseffekt: 6 trinn
Anonim
MIDI2LED - en MIDI -kontrollert LED Strip Light Effect
MIDI2LED - en MIDI -kontrollert LED Strip Light Effect

Dette er min første instruerbare, så vær med meg.

Jeg elsker å lage musikk, og i live situasjoner som stue-konserter liker jeg det når det er lyseffekter som er synkronisert med det jeg spiller. Så jeg bygde en Arduino-basert boks som får en LED-stripe til å lyse i en tilfeldig farge når jeg treffer et notat på mitt MIDI-tastatur, og hvor jeg treffer notatet.

Rekvisita

  • Arduino Uno
  • Arduino protoshield
  • MIDI -kontakt
  • 1N4148 diode
  • 6N138 optokobling
  • motstander: 2x 220 Ohm, 1x 10kOhm, 1x 470Ohm
  • WS2812B LED -stripe (60 lysdioder)
  • noen ledninger igjen
  • krympeslange
  • passende foringsrør for Arduino (jeg bruker en koblingsboks av plast)

Du trenger også

  • loddejern og loddetinn
  • MIDI -tastatur og MIDI -kabel

Trinn 1: Elektronikken

Elektronikken
Elektronikken

Kretsen er ganske grei. Den består av en standard MIDI -inngang (til venstre for Arduino) og tilkoblingen til LED -stripen (høyre for Arduino). Plasser alle delene på protoskjoldet, det er mye plass. Det anbefales generelt å bruke en ekstern strømforsyning for å drive LED -stripen, men jeg fant ut at når du spiller, er det bare få lysdioder på samtidig, så det var ikke noe problem med å bruke Arduino +5V / GND som effekt. (Prøv å unngå å slå alle tastene samtidig, og med full hastighet.;-)) Hvis du bestemmer deg for å bruke en ekstern strømforsyning, kobler du den bare til Arduino +5V og GND-pinnene. Noen anbefaler at du setter inn en 100uF kondensator (ikke vist skjematisk) mellom disse to linjene.

Lodd delene til protoskjoldet og koble til LED -stripen som vist på skjematikken.

Trinn 2: Koble til LED -stripen

Koble til LED -stripen
Koble til LED -stripen

Det er viktig å koble den høyre enden - inngangsenden - av LED -stripen til kretsen. Stripen min har en hunkontakt som inngang, og har små trekanter som hele tiden peker vekk fra inngangen. På utgangen var det en hannkontakt (for å kunne koble den til en annen stripe, som vi ikke trenger), så jeg kuttet den av og loddet den til de tre kablene som kom fra Arduino. Bruk varmekrympeslanger for å knytte de tre kablene til LED -stripen sammen, og for å gjøre dem mindre synlige.

LED -stripen jeg brukte kommer med tape på baksiden, slik at den enkelt kan limes på baksiden av MIDI -tastaturet.

Trinn 3: Tilpass prosjektet til tastaturet ditt

Tilpasse prosjektet til tastaturet ditt
Tilpasse prosjektet til tastaturet ditt
Tilpasse prosjektet til tastaturet ditt
Tilpasse prosjektet til tastaturet ditt

Du må kanskje tilpasse LED -stripen og Arduino -koden til tastaturet. Min har 76 taster, og lengden på stripen er nesten nøyaktig bredden på tastaturet. Hvis du har f.eks. 61 nøkler, kan det hende du trenger en kortere stripe. LED -stripen kan kuttes mellom to lysdioder. Bare sørg for at du kutter av den riktige delen, den har en inngangsende (med en hunnkontakt) og en utgang (med en mannlig kontakt), du må beholde inngangssiden. I koden, endre #defines til

  • NUMBER_OF_LEDS til antall lysdioder igjen i stripen din etter at du har kuttet av enden,
  • NUMBER_OF_KEYS til antall taster på tastaturet, og
  • MIN_KEY til MIDI -tonehøyden til den laveste nøkkelen. Du kan finne dette i tastaturets brukerhåndbok; eller bruk et verktøy som viser MIDI -notatnummeret, som KMidiMon for Linux, eller Pocket MIDI for Windows eller Mac; eller prøv forskjellige verdier til enheten reagerer på alle tastene på tastaturet

Trinn 4: Arduino -koden

Arduino -koden bruker MIDI -biblioteket (v4.3.1) av Forty Seven Effects og Adafruit NeoPixel -biblioteket (v1.3.4) av Adafruit. Installer disse bibliotekene ved hjelp av Arduino IDE. Deretter kompilerer du koden og laster den opp til Arduino uten at skjoldet er tilkoblet (optokobleren er koblet til RX -pinnen, noe som hindrer opplastingen). Slå på Arduino via USB -kabel (jeg bruker en USB -veggvorter).

Hvis du vil endre koden etter eget ønske, her er en kort oversikt over hvordan den fungerer: I hver loop blir MIDI -inngangen lest opp. Hvis en Note On eller Note Off -hendelse er mottatt, kalles funksjonene MyHandleNoteOn eller MyHandleNoteOff. De kaller begge updateVelocityArray -funksjonen, som lagrer hastigheten (dvs. hvor hardt du har slått tasten) til nøkkelenummeret. Hvis hastigheten er høyere enn det som ble lagret før, settes fargen på den tilhørende lysdioden til "gjeldende farge". Etter at MIDI -hendelsene er håndtert, kalles funksjonsoppdateringenLedArray. Dette oppdaterer den "nåværende fargen" (de røde, grønne og blå verdiene endres uavhengig på en lineær måte, til den nedre eller øvre enden er nådd, da er hastigheten for den lineære endringen satt til et tilfeldig tall), reduserer sakte hastigheten til de pressede notatene, og oppdaterer fargeverdiene til hver LED som må endre fargen (på grunn av et nytt notat -treff eller reduksjon av hastigheten). Funksjon showLedArray overfører fargene til Adafruit_NeoPixel -strukturen kalt "piksler" og får de faktiske lysdiodene til å vise fargene i pikslestrukturen.

Trinn 5: Mulige forbedringer …

Et prosjekt er aldri ferdig. Det er alltid noe som kan gjøres for å forbedre det:

  • Protoshield inneholder så få deler at det virkelig er bortkastet; man kunne lett oppnå samme effekt med en Arduino Nano og en 15x7 hulls PCB pluss noen kvinnelige pinhoder.
  • Noen av MIDI -signalene går tapt. Hvis det er en NoteOn, vil ikke den tilhørende lysdioden lyse; hvis det er en NoteOff, vil den ikke slukke (det er derfor jeg introduserte hastighetsreduksjonen, noe som sikrer at lysdioder ikke forblir på i det uendelige). Jeg prøver fortsatt å finne ut årsaken. Muligens er det et timingproblem, og MIDI.read () bør kalles oftere.
  • Noen av MIDI -signalene blir feil lest, det vil si at feil lysdioder lyser. Kan kobles til punktet ovenfor. Trenger litt etterforskning.
  • Kretsen er designet for å gi en hyggelig visuell effekt uten mye brukerinteraksjon (bortsett fra å spille på tastaturet). Imidlertid kunne jeg tenke meg å legge til et potensiometer som er lest opp (ved hjelp av en av Arduino's analoge innganger) som du kan endre maksimal hastighet som fargene endres med (for øyeblikket #definert som MAX_COLOR_CHANGE_SPEED = 20). Eller mål gjennomsnittlig tid mellom to NoteOn -hendelser, og endre MAX_COLOR_CHANGE_SPEED tilsvarende - i langsomme sanger bør fargen endres saktere.

Trinn 6: Ferdig

Slå på Arduino via USB -kabel (jeg bruker en USB -veggvorter). Koble MIDI -tastaturet til MIDI -kontakten, og start rockin '. Se meg spille litt lett musikk (ordspill, så ille som det er, tenkt).

Anbefalt: