En 15-LED RGB klocka med Arduino kärna (1 / 5 steg)
Steg 1: Hårdvara överväganden 1: driva lysdioder
Normala Arduino har endast 6 PWM utgångar, vilket innebär att det kan driva 2 RGB lysdioder av sig själv. Du behöver några extra hårdvara att kontrollera 15 av dem. I mitt projekt använda jag en egen styrelse som är i huvudsak en Arduino Mini variant med 3 LED drivrutiner installerade; har du till komma med din egen lösning. I detta avsnitt ska jag försöka förklara de tillgängliga alternativen.
Det finns fyra sätt att köra en massa lysdioder av en Arduino: en särskild LED driver; ett skiftregister; en multiplexing/charlieplexing förare; eller lysdioder med en chip ombord. Jag har lite eller ingen i första hand erfarenhet med de två sistnämnda alternativ, så jag ska vara kort om dem.
Multiplexering drivrutiner, som den kända i Arduino är cirklar MAX7219, avsedda för användning i LED visas och 8 x 8 LED matriser. De kan köra upp till 64 enskilda lysdioder, så de verkar vara ganska bra för detta projekt, eftersom det kräver 45 anslutningar. Dessa drivrutiner behöver dock inte någon PWM alternativ, så att du inte kommer att kunna ställa in enskilda ljusstyrkan i varje LED och blir fast med 7 grundfärgerna RGB lysdioder med några ytterligare alternativ som slät animationer, fade-outs och liknande (för att vara exakt, det är ett projekt att lägga rudimentär 4-bitars PWM förmåga till MAX7219, du kan se sina begränsningar på video där). Det blir också ganska svårt att koppla dem, som är avsedda för olika användningsområden. Slutligen, lysdioder kommer att blinka på grund av multiplexing-de flesta människor märker inte detta, men jag gillar inte idén. I alla rekommenderas detta inte.
Lysdioder med en controller chip är antingen WS2812B (marknadsförs i USA som NeoPixels) eller APA102 (aka DotStar). Först är mer eller mindre allmänt känt, att vara på marknaden för en tid; Jag övervägt aldrig ens denna sak på grund av dess absolut infernal kontrollmetod med exakt timing krav. APA102 framkom ganska nyligen medan mitt projekt pågick, och här verkar mycket bättre än sin föregångare, som det kan vara kontrollerad med SPI eller ens lite smällar. I staterna APA102 även har en mycket lämplig prislapp, säljer på $4,5 för 10 lysdioder. Tyvärr är jag inte där, så för mig här inte är fortfarande ett alternativ. Några anteckningar ska dock. Första APA102 är för närvarande endast tillgänglig i SMD form (5050): ingen thru-håls lysdioder för dig. Andra, även med WS2812B att vara på marknaden för en tid, det kunde inte blivit en industri standard. Personligen har jag allvarliga tvivel när det gäller dessa lysdioder livstid på grund av uppvärmning. Tredje, Observera att även i USA kan uppstå problem när du söker en ersättare för utbrända lampan. Som sagt, jag tycker fortfarande att APA102 lysdioder för att vara en intressant utveckling som är värt att överväga, om även för experiment bara.
Och nu för allvarliga, industri-godkända alternativ.
1. LED driver
Dessa marker är ganska vanliga, eftersom de används i enorm reklam LED-skärmar. Eftersom de är utformade att driva lysdioder, är det klart bästa alternativet. Dessa drivrutiner är tänkt att vara seriekopplas, så kan du ansluta dem i kedjan att lysa upp så många lysdioder som du vill använda samma antal Arduino utgångar. De är aktuella diskbänken enheter, vilket innebär att endast gemensam anod RGB lysdioder kan användas; men det innebär också att du inte behöver motstånd för varje LED ben, bara en per chip (eller ingen alls med vissa drivrutiner).
Den mest kända bland Arduino entusiaster LED driver är Texas Instruments TLC5940 16-kanal 12-bitars nuvarande diskhon drivrutin. Det blev populärt eftersom det är en av mycket få bakbord-vänlig LED drivrutiner, tillgängliga i DIP paket. Det finns en mycket grundlig och mycket testade bibliotek tillgängliga för detta chip. TLC5940 behöver bara 5 data linjer från controller plus spänning och marken.
Jag använder obskyra LED drivers kallas DM633 och DM634 från vissa taiwanesiska tillverkaren. Jag snubblat på dem medan de väntar på paketet med TLCs som aldrig kom fram och jag är ganska glad att på min lycka, som dessa killar är 3 gånger billigare och faktiskt bättre: de har egna gratis-kör PWM, så behöver bara tre data linjer från registeransvarige. De har också globala ljusstyrka (som i själva verket är ett inre motstånd – så det är möjligt att dike den yttre en, även om jag inte rekommendera det) och 634 har 16-bitars gråskala djup. De är dock tillgängliga i SMD paket bara, så du måste löda (även om SSOP-DIP-kontakten på en skärbräda). Om du lyckats få dessa marker och har problem att göra dem arbeta gärna använda min skiss med grundläggande funktionalitet här (Observera att detta är i arbete och inte ett bibliotek ändå, så bara inkludera kod i din skiss).
Det bästa och snabbaste sättet att styra LED drivers är SPI-gränssnittet. Dessa marker är dock inte utformade för SPI, så de kan programmeras med hjälp av enkel bit-banka teknik om du behöver SPI utgångar (stift 10-13 på Arduino) för något annat. Se TLC5940 biblioteket för detaljer.
Som en bonus, kan LED drivrutiner användas också att driva servon och motorer. De är ju bara PWM utdata multiplikatorer.
2: SKIFT register
Skift register finns i en mängd olika paket nästan överallt, de är exceptionellt billiga och de lätt kan användas som LED drivers tack vare utmärkt shiftPWM bibliotek. De kan också vara seriekopplas. Vilket gör dem det näst bästa möjliga valet, särskilt för bakbord prototyping (förutsatt att du hittar ett ställe att lägga 6 av dem).
De vanligaste och billigaste SKIFT registret är den goda gamla 74HC595. Du kan använda både gemensam anod och gemensam katod RGB lysdioder med det, men det har en betydande nackdel: du måste lägga ett motstånd på varje data ben i varje LED, och det är 45 motstånd i alla för detta projekt (ganska genomförbart, i själva verket).
Alternativet är ett nuvarande diskhon skiftregister, som är i huvudsak LED driver utan någon inbyggd PWM. Här behöver du endast en resistor per skift register, men också kommer att vara begränsad till att använda gemensam anod endast lysdioder. Dessa marker är också dyrare.
Som SKIFT register har inte någon inbyggd PWM, alla moduleringen kommer att göras av ShiftPWM bibliotek i mikrokontroller, och dessa beräkningar äter resurser. För detta projekt inte ens denna resurs sjunka märkbart om du inte prova att göra några allvarliga visualiseringar med antialiasing och sådant. Det finns en resurs kalkylator på ShiftPWM sida som ger dig en uppfattning om hur lång tid den kommer att vara upptagen PWMing. Igen, det rekommenderas att använda SPI för att kommunicera med Skift register, eftersom detta är snabbare; bit-banka finns också.
För att sammanfatta:
-LED drivers är bäst men inte det billigaste alternativet. Om du är intresserad av att göra LED visualiseringar med Arduino, ska du verkligen gå för det: så småningom kommer ni att bekanta sig med dessa marker, så varför inte börja nu? Du behöver tre 16-kanals LED förare plus tre motstånd för detta projekt.
-Skift register, nämligen 74HC595, presentera det billigaste alternativet, med en nackdel att behöva en hel del motstånd. Fortfarande, som SKIFT register finns i någon Arduino workshop, detta alternativ kan vara idealisk för människor som vandrar in LED driver fältet endast sporadiskt och inte vill investera i dedikerad hårdvara. Detta är också ett bra (men inte den enda) alternativ om du tänker bygga allt på en skärbräda. För detta projekt behöver du sex 8-kanals SKIFT register plus 45 motstånd.
-LEDs med chip ombord, nämligen APA102, är värt att överväga om du har tillgång till dem och är nöjda med deras endast SMD-form. Observera att dessa är nya och unika, så du inte kommer att kunna hitta ersättare om de får avbrytas av någon anledning. Du behöver bara 15 sådana lampor här.
-Multiplexering drivrutiner som MAX7219 skall anses endast om du redan har dem och vill sätta dem till någon meningsfull användning, eftersom de inte ger full PWM förmåga. Köp inte dem för detta projekt – en äkta MAX7219 kostar lika mycket som tre TLC5940s. En MAX7219 kan köra 15 RGB lysdioder.