MIDI2LED - een MIDI-gestuurd LED-striplichteffect - Ajarnpa
MIDI2LED - een MIDI-gestuurd LED-striplichteffect - Ajarnpa
Anonim
MIDI2LED - een MIDI-gestuurd LED-striplichteffect
MIDI2LED - een MIDI-gestuurd LED-striplichteffect

Dit is mijn eerste instructable, dus geduld met mij.

Ik hou van muziek maken en in live situaties zoals huiskamerconcerten vind ik het prettig als er lichteffecten zijn die synchroon lopen met wat ik speel. Dus bouwde ik een op Arduino gebaseerde doos die een LED-strip in een willekeurige kleur laat oplichten wanneer ik een noot op mijn MIDI-toetsenbord aanraak, en waar ik de noot aanraak.

Benodigdheden

  • Arduino Uno
  • Arduino protoshield
  • MIDI-aansluiting
  • 1N4148-diode
  • 6N138 optische koppeling
  • weerstanden: 2x 220 Ohm, 1x 10kOhm, 1x 470Ohm
  • WS2812B LED-strip (60 LED's)
  • wat overgebleven draden
  • krimpkous
  • geschikte behuizing voor de Arduino (ik gebruik een plastic aansluitdoos)

Je hebt ook nodig

  • soldeerbout en soldeer
  • MIDI-toetsenbord en MIDI-kabel

Stap 1: De elektronica

De elektronica
De elektronica

De schakeling is vrij eenvoudig. Het bestaat uit een standaard MIDI-ingang (links van de Arduino) en de aansluiting op de LED-strip (rechts van de Arduino). Plaats alle onderdelen op de protoshield, er is veel ruimte. Het wordt over het algemeen aanbevolen om een externe voeding te gebruiken om de LED-strip van stroom te voorzien, maar ik ontdekte dat wanneer je speelt, er maar een paar LED's tegelijkertijd branden, dus er was geen probleem om de Arduino +5V / GND als uitgangsvermogen te gebruiken. (Probeer te voorkomen dat alle toetsen tegelijk en met volle snelheid worden ingedrukt.;-)) Als u besluit een externe voeding te gebruiken, sluit u deze gewoon aan op de Arduino +5V- en GND-pinnen. Sommige mensen raden aan om een condensator van 100 uF (niet weergegeven in het schema) tussen deze twee lijnen te plaatsen.

Soldeer de onderdelen op het protoschild en sluit de ledstrip aan zoals aangegeven in het schema.

Stap 2: De LED-strip aansluiten

De LED-strip aansluiten
De LED-strip aansluiten

Het is belangrijk om het rechter uiteinde - het ingangseinde - van de LED-strip op het circuit aan te sluiten. Mijn strip heeft een vrouwelijke connector als ingang en heeft overal kleine driehoekjes die van de ingang af wijzen. Aan de uitgang zat een mannelijke connector (om hem op een andere strip aan te kunnen sluiten, die we niet nodig hebben), dus die heb ik afgeknipt en aan de drie kabels van de Arduino gesoldeerd. Gebruik krimpkous om de drie kabels aan de ledstrip aan elkaar te binden en minder zichtbaar te maken.

De LED-strip die ik heb gebruikt, wordt aan de achterkant geleverd met plakband, zodat deze gemakkelijk aan de achterkant van het MIDI-toetsenbord kan worden geplakt.

Stap 3: Het project aanpassen aan uw toetsenbord

Het project aanpassen aan uw toetsenbord
Het project aanpassen aan uw toetsenbord
Het project aanpassen aan uw toetsenbord
Het project aanpassen aan uw toetsenbord

Mogelijk moet u de LED-strip en de Arduino-code aanpassen aan uw toetsenbord. De mijne heeft 76 toetsen en de lengte van de strip is bijna precies de breedte van het toetsenbord. Als je bv. 61 toetsen, wellicht heeft u een kortere strip nodig. De LED-strip kan tussen twee willekeurige LED's worden gesneden. Zorg er wel voor dat je het juiste deel afsnijdt, het heeft een invoeruiteinde (met een vrouwelijke connector) en een uitvoeruiteinde (met een mannelijke connector), je moet het invoeruiteinde behouden. Verander in de code de #defines voor

  • NUMBER_OF_LEDS tot het aantal LED's dat nog in uw strip zit nadat u het uiteinde hebt afgesneden,
  • NUMBER_OF_KEYS tot het aantal toetsen op uw toetsenbord, en
  • MIN_KEY naar het MIDI-toonhoogtenummer van je laagste toets. U kunt dit vinden in de gebruikershandleiding van het toetsenbord; of gebruik een tool die het MIDI-nootnummer weergeeft, zoals KMidiMon voor Linux, of Pocket MIDI voor Windows of Mac; of probeer verschillende waarden uit totdat het apparaat op alle toetsen op je toetsenbord reageert

Stap 4: De Arduino-code

De Arduino-code maakt gebruik van de MIDI-bibliotheek (v4.3.1) van Forty Seven Effects en de Adafruit NeoPixel-bibliotheek (v1.3.4) van Adafruit. Installeer deze bibliotheken met behulp van de Arduino IDE. Compileer vervolgens de code en upload deze naar de Arduino zonder dat het schild is aangesloten (de optocoupler is verbonden met de RX-pin, wat het uploaden belemmert). Voed de Arduino via een USB-kabel (ik gebruik een USB-muurwrat).

Als u de code naar uw wens wilt wijzigen, volgt hier een kort overzicht hoe het werkt: In elke loop wordt de MIDI-ingang uitgelezen. Als een Note On- of Note Off-gebeurtenis is ontvangen, worden de MyHandleNoteOn- of MyHandleNoteOff-functies aangeroepen. Ze noemen allebei de updateVelocityArray-functie, die de snelheid (d.w.z. hoe hard je op de toets hebt gedrukt) van het toetsnummer opslaat. Als de snelheid hoger is dan wat eerder was opgeslagen, wordt de kleur van de bijbehorende LED ingesteld op de "huidige kleur". Nadat de MIDI-events zijn afgehandeld, wordt de functie updateLedArray aangeroepen. Hiermee wordt de "huidige kleur" bijgewerkt (waarvan de rood-, groen- en blauwwaarden onafhankelijk lineair veranderen, totdat het onder- of boveneinde is bereikt, waarna de snelheid voor de lineaire wijziging wordt ingesteld op een willekeurig getal), vermindert langzaam de aanslagsnelheid van de ingedrukte noten en werkt de kleurwaarden bij van elke LED die van kleur moet veranderen (vanwege een nieuwe nootslag of vermindering van de snelheid). Functie showLedArray brengt de kleuren over naar de Adafruit_NeoPixel-structuur genaamd "pixels" en zorgt ervoor dat de eigenlijke LED's de kleuren in de pixelstructuur laten zien.

Stap 5: Mogelijke verbeteringen …

Een project is nooit af. Er is altijd iets dat kan worden gedaan om het te verbeteren:

  • Het protoschild bevat zo weinig onderdelen dat het echt zonde is; men zou gemakkelijk hetzelfde effect kunnen bereiken met een Arduino Nano en een PCB met 15x7 gaten plus enkele vrouwelijke pin-headers.
  • Sommige MIDI-signalen gaan verloren. Als het een NoteOn is, zal de bijbehorende LED niet oplichten; als het een NoteOff is, gaat hij niet uit (daarom heb ik de verlaging van de snelheid geïntroduceerd, die ervoor zorgt dat LED's niet voor onbepaalde tijd blijven branden). Ik probeer nog steeds de reden te achterhalen. Mogelijk is het een timingprobleem en zou MIDI.read() vaker moeten worden aangeroepen.
  • Sommige MIDI-signalen zijn verkeerd gelezen, d.w.z. de verkeerde LED's lichten op. Kan verband houden met het bovenstaande punt. Heeft wat onderzoek nodig.
  • Het circuit is ontworpen om een aangenaam visueel effect te geven zonder veel gebruikersinteractie (afgezien van het bespelen van het toetsenbord). Ik zou me echter kunnen voorstellen een potentiometer toe te voegen die wordt uitgelezen (met behulp van een van de analoge ingangen van de Arduino) waarmee je de maximale snelheid kunt wijzigen waarmee de kleuren veranderen (momenteel #define'd als MAX_COLOR_CHANGE_SPEED = 20). Of meet de gemiddelde tijd tussen twee NoteOn-gebeurtenissen en wijzig MAX_COLOR_CHANGE_SPEED dienovereenkomstig - in langzame nummers zou de kleur langzamer moeten veranderen.

Stap 6: Klaar

Voed de Arduino via een USB-kabel (ik gebruik een USB-muurwrat). Sluit je MIDI-keyboard aan op de MIDI-aansluiting en begin te rocken. Kijk hoe ik een beetje lichte muziek speel (woordspeling, hoe slecht het ook is, bedoeld).

Aanbevolen: