Stap 2: theorie
Voordat we in hoofd-eerste duiken, ik dacht dat ik zou uitleggen een beetje hoe dit ding werkt. Voor degenen onder u die wilt aan de slag, kunt u deze sectie overslaan en kom later terug als u wilt leren de theorie.Voor dit project wilde ik een 15 RGB LED strip regenboog fader. Dit zal uiteindelijk worden gemonteerd in een fotolijst en gemonteerd op de muur als een stemming licht (in een later Instructable). Om te wijzigen de kleur voor elke strip, moeten we snel vergroten of verkleinen de helderheid van elke LED's RGB-kanalen. Er zijn vele manieren om dit te doen. De meest efficiënte manier om dit te doen is door middel van pulsbreedtemodulatie (PWM). Dat klinkt misschien als een groot woord, maar het is eigenlijk heel een eenvoudig concept te begrijpen. Zoals met de meeste LEDs, deze RGB LED strips normaal hebben twee kleurenopties per kanaal: ON of OFF (net zoiets als die monitor op de appel die ik terug op de lagere school). Maar wat als we besloten snel uit te schakelen de LED op vervolgens weer, vele malen per seconde? Blijkt dat het menselijk oog nog steeds de LED ziet, maar we zien niet het op-of uitschakelen. Het ziet er gewoon minder rooskleurig. Dit is het basisconcept voor PWM. Door te draaien het over en weer uit en in een zeer snel tempo, kon het menselijk oog niet wijzer bij het bepalen of de LED in- of uitschakelen is! Het lijkt gewoon alsof het verdwijnt tussen de helderheidsniveaus.
Als we de eerste LED's rode kanaal verdwijnen in het groene kanaal is, het zou uitzien als het was vervagen van rood, naar oranje, geel, groen. Als we dit met haar blauwe kanaal deden, zouden binnenkort hebben we alle kleuren van de regenboog, maar we alleen het vervagen van elke kleur van de regenboog op één RGB LED Strip. Nu wat gebeurt er als we deden dit in synchrone met alle van de RGB LED strips? Dat is waar de Shift Registers komen in het spel.
Als alle digitale communicatie met 1's en 0's werkt (hoog en laag, of ON en OFF), moeten we een manier om te vertellen elk van de draden om zelf aan of uit, en vrij snel. Gelukkig was het shift register voor dit doel ontworpen. In principe een tekenreeks van 1's en 0's vertellen we de Arduino en het voedt hen in de registers van de verschuiving. Wanneer één shift register vol raakt, wordt de eerste 8 cijfers, die werd gevoed aan het aan het volgende register, en zo verder totdat alle 6 registers worden verteld wat te doen. Denk aan het als een rij zitplaatsen in een bioscoop. Wanneer iemand de rij binnenkomt, gaan ze naar de laatste stoel totdat ze allemaal volledige zijn. Wanneer nieuwe mensen een zetel willen, de eerste persoon die nu opkomt en laat (tot de volgende shift register). Iedereen gaat vervolgens over een stoel en de nieuwe persoon kan nu gaan zitten. Dit is vergelijkbaar met hoe een verschuiving werken registreren. We kunnen praten met alle van de RGB LED strips op deze manier.
Maar dan hoe we dit werk uit slechts 3 digitale pinnen van de Arduino maken? Ga terug naar de rij zitplaatsen in een movie theater vergelijking, weten we dat we alleen maar één kabel hoeven sturen 1's en 0's naar de RGB LED strips (de lijn van mensen). Maar de shift registers moeten twee meer pinnen, één voor de klok, en één voor de klink pin. De klok pinnen is vrij spreekt voor zich. Het is in wezen een manier om het shift register vertellen hoe snel dingen gebeuren, veel als de klok van 16MHz vertelt de Arduino dat het is eigen timing. De klink pin speelt een cruciale rol met shift registers. Het vertelt het shift register, als we zijn klaar om te schrijven, en wanneer we klaar bent naar het schrijven. Zonder deze pin, zou de gegevens voortdurend vliegen uit het einde van de rijen, net als onze slechte film patroons als iemand besloten om stoom-ploeg door het gangpad. Dit zou net zo slecht voor onze film patroons, want het zou voor elektronica. Deze pin houdt gegevens in het register, totdat we klaar om te schrijven.
Maar hoe zit het met van die ULN2803? Wat de heck zijn die dingen voor toch? Nou, helaas de RGB LED's uitgevoerd op de 12VDC power en het shift register werkt op 5VDC. Om deze beperkingen te omzeilen, worden we 12VDC meegenomen in de Arduino, en de toegang via de 'Vin' pin om macht van de RGB LED's, en gebruik de shift registreert tot controle van de ULN2803 (die als 8 NPN Darlington-transistors gepropt in een glorieuze chip van awesomeness!). De schoonheid van deze zijn dat ze hebben een gemeenschappelijke emitter, wat betekent dat als we de stekker in een RGB LED met een gemeenschappelijk anode en de anode naar + 12VDC sluit en elke kathode op de verzamelaars van de ULN2803, vervolgens wanneer we hen met de transistors inschakelen sluit het circuit en de kathoden gronden, waardoor de LED inschakelen. (* OEF * dat was een lange zin.)
Genoeg chit chat, hebben we een RainBoard te maken!