LED-projekt med Arduino

Squeeds Julkalender | 2021-12-05 | Vidar Karlsson
Vad kan väl passa bättre så här i juletid än ett litet hobbyprojekt att lysa upp vintermörkret med? I den här artikeln får du lära dig hur du kan styra LED-slingor som har individuellt adresserbara pixlar, med hjälp av en Arduino och biblioteket FastLED.

Vad är en pixel?

 

Ljusslingan består av en lång rad sammanlänkade “pixlar”, där varje pixel kan lysa i sin egen färg oberoende av varandra. En RGB-pixel består av tre dioder (röd, grön + blå) samt ett litet chip som gör det möjligt att styra den. Genom att kontrollera de olika diodernas ljusstyrka, så kan du styra vilken färg pixeln ser ut att ha. Sätter du 100% på den röda, 0% på den gröna och 100% på den blå, så kommer pixeln att lysa med en lila färg. Sätter du samma ljusstyrka på dem allihop, så kommer pixeln lysa med en vit färg.

 

Att välja ljusslinga

 

Ljusslingor säljs med olika chip och med olika antal pixlar per meter.

Till mitt projekt så har jag använt WS2812B, som är en ganska prisvärd slinga. Den har dock bara en datakanal; går en LED sönder så slutar samtliga LEDs efter den också att lysa. Går en pixel sönder så behöver du alltså klippa bort den trasiga pixeln och löda ihop slingan igen, vilket är lite krångligt. Efterföljaren WS2813 har två datakanaler, vilket innebär att kretsen inte bryts av att en lampa går sönder; resterande pixlar fortsätter att lysa.

WS2812B lider liksom alla andra typer av RGB-slingor av att “vitt” ljus ser lite blålila ut. Vill du ha bättre och jämnare vitt ljus så är det värt att kika på SK6812 som har en dedikerad vit ljusdiod (RGBW, kallvit eller varmvit) i varje pixel. Det är en lite dyrare slinga och du behöver använda ett bibliotek som stödjer fyra färgkanaler per pixel.

Ytterligare ett alternativ är APA102 som har snabbare dataöverföring, vilket kan vara av vikt  för större projekt där du vill styra flera hundra pixlar.

Du kan också välja vilken typ av IP-klassning slingan har; de med högst klassning kommer med ett silikonskal som skyddar mot fukt och smuts, men som också gör det lite mer krångligt att löda, och det påverkar också ljusbilden en gnutta att hela slingan är inbäddad i ett silikonlager.

Hur alla olika typer av LED-slingor och deras chip skiljer sig åt är en hel vetenskap i sig. Om du vill ha lite mer kött på benen innan du väljer så finns det många bra videos på YouTube, följande video tycker jag är väldigt bra och pedagogisk: https://www.youtube.com/watch?v=QnvircC22hU

 

Räkna ut hur mycket ström du behöver

 

Hur mycket ström som krävs för att driva din slinga brukar anges i de tekniska specifikationerna som ofta anges i annonserna där du köper dem. Men här kommer en snabb översikt över ungefär hur mycket ström du behöver för att driva 1 pixel, samt vilken spänning. Siffrorna som anges är när pixeln lyser med 100% ljusstyrka.

 

Chip

Effekt (Watt)

Spänning (Volt)

WS2811 0.184 12
WS2812B 0.18 5
WS2813 0.24 5
WS2815 0.12 12
SK6812 0.148 5
SK9822 0.265 5
APA102 0.2 5

 

 

Så för att driva en WS2813-slinga med 60 pixlar per meter så kommer du att behöva ett nätaggregat med minst 14.4W effekt (2.88A / 5V) per meter som du vill driva. Värt att notera är att om du ska driva väldigt långa slingor, så kommer du att behöva injecta ström på flera ställen (varje 2.5 meter ungefär, det beror lite på vilken typ av chip och hur tätt pixlarna sitter).

 

Vad behöver jag för utrustning?

  • Nätaggregat
  • Ljusslinga LED RGB
  • Lödkolv + tenn
  • Elkablar
  • Arduino (jag använder Arduino UNO, en bra liten bräda som har gott om anslutningsmöjligheter, hela 14 I/O portar)
  • Pincett för att hålla i kablar/komponenter med du löder
  • Bra att ha: eltejp, sockerbitar, limpistol
  • Ev. kontakter för att enkelt kunna koppla ihop/loss slingorna, exakt vilken typ och hur många pinnar beror på dina slingor och hur många kanaler de har.

 

Koppla ihop dina komponenter

 

Här är ett enkelt "kopplingsschema" som visar hur allt ska sitta ihop.

Motståndet mellan LED-slingan och I/O-porten på din Arduino reducerar "noise" på datakanalen.
Kondensatorerna jämnar ut eventuella "strömtoppar".

Här är mitt projekt. Jag har ett nätaggregat med två utgångar, så att jag kan driva två LED-slingor. Själva LED-slingorna har jag fäst i en kabelkanal så att jag kan sätta upp dem på väggen eller ha dem ståendes utan att de rullar ihop sig.


 

Hello World


För att koppla ihop din Arduino med din dator, så behöver du ladda ner Arduino Create Agent här:
https://create.arduino.cc/getting-started/plugin/install

Anslut sedan din Arduino till din dator med en USB-kabel. Sätt på nätverksaggregatet så att din ljusslinga har ström.

För att programmera så kommer vi att använda Arduino Online Editor:
https://create.arduino.cc/

 

Välj din Arduino i listan längst upp på sidan, och skapa ett nytt projekt:



 

Det första vi behöver göra är att lägga till FastLED biblioteket i ditt projekt. Vi lägger till den i favoriter så att du enkelt kan lägga till den i nya projekt.

 

Så där ja, då är vi redo att börja programmera! Har du använt dig av Python tidigare så känner du säkert igen detta, om inte, så är det ett gyllene tillfälle att lära sig.

Ditt projekt har en setup-funktion som körs en gång, och en loop-funktion som kommer att exekveras om och om igen tills dess att du stänger av din Arduino. För det här projektet så vill vi loopa igenom alla LED:s och säga åt dem att börja lysa, en efter en med en liten delay emellan. När det är klart så vill vi att de ska stänga av sig igen, på samma sätt. Så här ser koden ut, busenkelt!

 

 

När du är klar så sparar du och laddar upp filen till din Arduino:



Och vips så kommer din slinga att lysa på det här sättet:

 

What's next?


FastLED-biblioteket är fantastiskt roligt att jobba med, det finns otroligt mycket som du kan göra med det. Jag rekommenderar denna videoserie på YouTube för en grundlig genomgång av vad man kan göra med det. Scott Marley som har gjort dessa videos, har också lagt upp källkoden till alla olika experiment på Github - det är bara att kopiera rakt in i din egen kod och se vilka fantastiska saker din ljusslinga kan hitta på!