Innehållsförteckning:
- Tillbehör
- Steg 1: Elektroniken
- Steg 2: Anslutning av LED -remsan
- Steg 3: Anpassa projektet till ditt tangentbord
- Steg 4: Arduino -koden
- Steg 5: Möjliga förbättringar …
- Steg 6: Klar
Video: MIDI2LED - en MIDI -kontrollerad LED Strip Light Effect: 6 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:39
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
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
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
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:
LED Christmas Light Strip: 3 steg
LED Christmas Light Strip: Jag ville skapa ett roligt och festligt Arduino -projekt för jullovet, så jag bestämde mig för att skapa mina egna DIY led strip -lampor. Detta projekt kräver en lödmaskin så ha det i åtanke
RGB Led Strip Bluetooth Controller V3 + Music Sync + Ambient Light Control: 6 steg (med bilder)
RGB Led Strip Bluetooth Controller V3 + Music Sync + Ambient Light Control: Detta projekt använder arduino för att styra en RGB led strip med din telefon via bluetooth. Du kan ändra färg, synkronisera ljus med musik eller låta dem justeras automatiskt för omgivningsbelysningen
LED Strip Light Paper Lamp: 4 steg
LED Strip Light Paper Lamp: Lampans hela dimensioner är 6x6x10. Jag använde min 3D-skrivare (CR-10 Mini) och några LED-remsor och elektronik hittade jag runt huset. Det är en fantastisk skrivbordslampa
Enklare WiFi LED Light Strip Controller: 8 steg (med bilder)
Enklare WiFi LED Light Strip Controller: Förra våren började jag designa anpassad hårdvara och programvara för att styra två remsor LED-lampor med ett NodeMCU ESP8266-12E utvecklingskort. Under den processen lärde jag mig att göra mina egna kretskort (PCB) på en CNC -router, och jag
MIDI 5V LED Strip Light Controller för Spielatron eller annan MIDI Synth: 7 steg (med bilder)
MIDI 5V LED Strip Light Controller för Spielatron eller annan MIDI Synth: Denna kontroller blinkar trefärgade LED-remsor för 50 ms per ton. Blå för G5 till D#6, röd för E6 till B6 och grön för C7 till G7. Styrenheten är en ALSA MIDI -enhet så att MIDI -programvara kan mata ut till lysdioderna samtidigt som en MIDI -syntenhet