Innehållsförteckning:

MIDI2LED - en MIDI -kontrollerad LED Strip Light Effect: 6 steg
MIDI2LED - en MIDI -kontrollerad LED Strip Light Effect: 6 steg

Video: MIDI2LED - en MIDI -kontrollerad LED Strip Light Effect: 6 steg

Video: MIDI2LED - en MIDI -kontrollerad LED Strip Light Effect: 6 steg
Video: Convenience items needed in the family 2024, November
Anonim
MIDI2LED - en MIDI -kontrollerad LED Strip Light Effect
MIDI2LED - en MIDI -kontrollerad LED Strip Light Effect

Detta är min första instruerbara, så håll ut med mig.

Jag älskar att göra musik, och i levande situationer som vardagsrumskonserter gillar jag det när det finns ljuseffekter i synk med det jag spelar. Så jag byggde en Arduino-baserad låda som får en LED-remsa att lysa i en slumpmässig färg när jag träffar en ton på mitt MIDI-tangentbord, och där jag träffar noten.

Tillbehör

  • Arduino Uno
  • Arduino protoshield
  • MIDI -uttag
  • 1N4148 -diod
  • 6N138 optokopplare
  • motstånd: 2x 220 Ohm, 1x 10kOhm, 1x 470Ohm
  • WS2812B LED -remsa (60 lysdioder)
  • några ledningar kvar
  • värmekrympslang
  • lämpligt hölje för Arduino (jag använder en kopplingsdosa av plast)

Du behöver också

  • lödkolv och löd
  • MIDI -tangentbord och MIDI -kabel

Steg 1: Elektroniken

Elektroniken
Elektroniken

Kretsen är ganska enkel. Den består av en standard MIDI -ingång (vänster om Arduino) och anslutningen till LED -remsan (höger om Arduino). Placera alla delar på protoshielden, det finns gott om plats. Det rekommenderas i allmänhet att använda en extern strömförsörjning för att driva LED -remsan, men jag upptäckte att när du spelar är det bara få lysdioder på samtidigt, så det var inga problem med att använda Arduino +5V / GND som effekt. (Försök att undvika att slå alla tangenter samtidigt och med full hastighet.;-)) Om du bestämmer dig för att använda en extern strömförsörjning, anslut den helt enkelt till Arduino +5V och GND-stiften. Vissa människor rekommenderar att du sätter in en 100uF kondensator (visas inte schematiskt) mellan dessa två linjer.

Lödda delarna till protoskärmen och anslut LED -remsan som visas i schemat.

Steg 2: Anslutning av LED -remsan

Anslutning av LED -remsan
Anslutning av LED -remsan

Det är viktigt att ansluta den högra änden - ingångsänden - av LED -remsan till kretsen. Min remsa har en honkontakt som ingång och har små trianglar som pekar bort från ingången. Vid utgången fanns en hankontakt (för att kunna ansluta den till en annan remsa, som vi inte behöver), så jag klippte av den och lodde den till de tre kablarna som kom från Arduino. Använd värmekrympslang för att binda ihop de tre kablarna till LED -remsan och för att göra dem mindre synliga.

LED -remsan jag använde kommer med tejp på baksidan, så att den enkelt kan limmas på baksidan av MIDI -tangentbordet.

Steg 3: Anpassa projektet till ditt tangentbord

Anpassa projektet till ditt tangentbord
Anpassa projektet till ditt tangentbord
Anpassa projektet till ditt tangentbord
Anpassa projektet till ditt tangentbord

Du kan behöva anpassa LED -remsan och Arduino -koden till ditt tangentbord. Min har 76 tangenter och remsans längd är nästan exakt bredden på tangentbordet. Om du har t.ex. 61 nycklar kan du behöva en kortare remsa. LED -remsan kan skäras mellan två lysdioder. Se bara till att du skär av rätt del, den har en ingångsände (med en honkontakt) och en utgång (med en hankontakt), du måste behålla ingångsänden. I koden ändrar du #defines för

  • NUMBER_OF_LEDS till antalet lysdioder kvar i remsan efter att du har klippt av änden,
  • NUMBER_OF_KEYS till antalet tangenter på tangentbordet och
  • MIN_KEY till MIDI -tonhöjden för din lägsta nyckel. Du kan hitta detta i tangentbordets användarhandbok; eller använd ett verktyg som visar MIDI -anteckningsnumret, som KMidiMon för Linux eller Pocket MIDI för Windows eller Mac; eller prova olika värden tills enheten svarar på alla tangenter på tangentbordet

Steg 4: Arduino -koden

Arduino -koden använder MIDI -biblioteket (v4.3.1) från Forty Seven Effects och Adafruit NeoPixel -biblioteket (v1.3.4) från Adafruit. Installera dessa bibliotek med Arduino IDE. Kompilera sedan koden och ladda upp den till Arduino utan att skärmen är ansluten (optokopplaren är ansluten till RX -stiftet, vilket hindrar uppladdningen). Driv Arduino via USB -kabel (jag använder en USB -väggvarta).

Om du vill ändra koden efter eget tycke, här är en kort översikt över hur den fungerar: I varje slinga läses MIDI -ingången upp. Om en Note On eller Note Off -händelse har mottagits anropas funktionerna MyHandleNoteOn eller MyHandleNoteOff. De kallar båda updateVelocityArray -funktionen, som lagrar hastigheten (dvs. hur hårt du har slagit på tangenten) för nyckelnumret. Om hastigheten är högre än vad som lagrades tidigare, är färgen på motsvarande lysdiod inställd på "aktuell färg". Efter att MIDI -händelserna har hanterats anropas funktionen updateLedArray. Detta uppdaterar den "nuvarande färgen" (vars röda, gröna och blåa värden ändras oberoende på ett linjärt sätt, tills den nedre eller övre änden nås, vid vilken tidpunkt hastigheten för den linjära ändringen är satt till ett slumpmässigt tal), sakta sänker hastigheten på de nedtryckta tonerna och uppdaterar färgvärdena för varje lysdiod som måste ändra dess färg (på grund av ny notträff eller minskning av hastighet). Funktionen showLedArray överför färgerna till Adafruit_NeoPixel -strukturen som kallas "pixlar" och får de faktiska lysdioderna att visa färgerna i pixelstrukturen.

Steg 5: Möjliga förbättringar …

Ett projekt är aldrig klart. Det finns alltid något som kan göras för att förbättra det:

  • Protoshielden innehåller så få delar att det verkligen är slöseri; man skulle lätt kunna uppnå samma effekt med en Arduino Nano och ett 15x7 håls kretskort plus några kvinnliga stifthuvuden.
  • Några av MIDI -signalerna går vilse. Om det är en NoteOn tänds inte motsvarande lysdiod; om det är en NoteOff, kommer den inte att slockna (det är därför jag införde hastighetsminskningen, vilket säkerställer att lysdioderna inte kommer att vara på i oändlighet). Jag försöker fortfarande ta reda på orsaken. Möjligen är det en tidsfråga, och MIDI.read () borde kallas oftare.
  • Några av MIDI -signalerna är fellästa, dvs fel lysdioder lyser. Kan kopplas till punkten ovan. Behöver lite utredning.
  • Kretsen är utformad för att ge en trevlig visuell effekt utan mycket användarinteraktion (förutom att spela på tangentbordet). Jag kan dock tänka mig att lägga till en potentiometer som läses upp (med hjälp av en av Arduinos analoga ingångar) med vilken du kan ändra den maximala hastighet vid vilken färgerna ändras (för närvarande #definierat som MAX_COLOR_CHANGE_SPEED = 20). Eller mäta medeltiden mellan två NoteOn -händelser och ändra MAX_COLOR_CHANGE_SPEED i enlighet därmed - i långsamma låtar bör färgen förändras långsammare.

Steg 6: Klar

Driv Arduino via USB -kabel (jag använder en USB -väggvarta). Anslut ditt MIDI -tangentbord till MIDI -uttaget och börja rocka. Se mig spela lite lätt musik (ordspel, så illa som det är, tänkt).

Rekommenderad: