Lys upp med Neopixel

Lys upp med Neopixel

Ibland räcker inte en handfull lysdioder för att ljussätta ett projekt. Då finns Neopixel som vi ska se närmare på i detta kapitel.

Neopixel

Neopixel är ett bibliotek och en familj av LED-produkter. Namnet är egentligen amerikanska Adafruits konsumentvänliga benämning för chippen WS2801/11/12. Produkterna tillverkas dock av många olika tillverkare. Produktutbudet består av allt från ringar i olika storlekar (likt den som följer med i bokens tillhörande komponentkit) till lister i olika längder.

Neopixel-ringar i två storlekar

Lysdioderna på Neopixel-produkter är av RGB-typ och alla lysdioder är individuellt adresserbara. All adressering sker av Neopixel-produktens inbyggda mikrokontroller i kombination med Neopixel-biblioteket. Det räcker därför med tre kablar (plus, minus och data) för att ansluta en Neopixel-ring med 24 lysdioder till ett utvecklingskort.

Anslutning av Neopixel

De flesta Neopixel-ringar levereras utan anslutningskablar. För att ansluta komponentkittets Neopixel-ring börjar vi med att löda fast anslutningskablar till punkterna PWR +5 V, GND och Data Input. På kopplingsplattan kopplar vi sedan Neopixel-ringen i serie med en 100 Ω-resistor (behövs för modellen i bokens komponentkit). 

Illustration gjord med komponenter från Fritzing (fritzing.org). CC BY-SA 3.0

Sätt färg på lysdioder

I följande exempel vill vi bygga en enkel sekundvisare som tänder eller släcker alla lysdioder på ungefär en sekund. Vi kommer att använda delay-funktionen för att räkna fram en sekund åt gången. Den är inte så exakt och i Håll tiden med Arduino använde vi därför en annan lösning. 

Vi börjar med att importera biblioteket Adafruit_NeoPixel och definiera tre variabler: 

  • en byte-konstant för vilket GPIO-stift som Neopixel-ringen är kopplad till
  • en byte-konstant för hur många lysdioder Neopixel-ringen består av
  • en byte-variabel för hur starkt Neopixel-ringen ska lysa (0-255).

Obs! Varje lysdiod kan dra upp till 60 mA på högsta ljusstyrka (1,4 A totalt). Det kan inte nätaggregatet i det tillhörande komponentkittet leverera. Den högsta rekommenderade ljusstyrkan är därför 100.

Del 1/4 av NeopixelSecond.ino

Vi skapar sedan ett nytt Neopixel-objekt som vi kallar ring. Utöver argumenten för GPIO-stift och pixelantal beskriver vi vilken typ av Neopixel-produkt vi har (NEO_GRB). 

Del 2/4 av NeopixelSecond.ino

I setup-funktionen startar vi ringen och sätter ljusstyrkan.

Del 3/4 av NeopixelSecond.ino

I loop-funktionen skriver vi två for-loopar. Den ena for-loopen stegar igenom pixlarna (från nummer 0 till nummer 23) och ändrar färgen från svart (av) till en färg. Den andra for-loopen gör samma sak fast tvärtom. 

Med setPixelColor-metoden anger vi först vilken pixel vi vill ändra färg på och sedan vilken färg den ska få. Vi kan ange vilken färg som helst utifrån färgens RGB-värde (vi väljer Kjell & Companys profilblå färg som har RGB-värdet 0, 118, 189). Med show-metoden uppdaterar vi sedan värdet på den aktuella pixeln.

Del 4/4 av NeopixelSecond.ino

Anledningen till att vi valde en fördröjning på 42 millisekunder är att looparna körs 24 gånger. Det blir drygt en sekund (1008 ms) per tändning eller släckning.

Här följer en översikt över andra vackra färger (Kjell & Companys profilfärger). 

Förbättra tärningen

Tärningen från Bygg en tärning kan göras ännu häftigare med hjälp av en Neopixel-ring. Vi vill att Neopixel-ringen "roterar" medan spelaren håller knappen intryckt och att servot visar kastutfallet när spelaren släpper knappen. 

Längst upp i vår sketch gör vi följande saker:

  • inkluderar biblioteken för Neopixel, servo och knapp
  • bestämmer GPIO-pin för Neopixel-ringen
  • bestämmer antalet pixlar i Neopixel-ringen
  • bestämmer ljusstyrkan på pixlarna i Neopixel-ringen
  • skapar en Neopixel-ring, en knapp och ett servo.

Lägg märke till att vi använder ett annat servo-bibliotek än i Styr ett servo. Det beror på att det IDE-inbyggda servo-biblioteket störs av Neopixel-ringen. Som tur är har Adafruit gjort ett bibliotek vid namn Ticoservo som fungerar på samma sätt men inte störs av Neopixel (biblioteket måste installeras innan det kan användas).

Del 1/5 av RollDice3.ino

I setup-funktionen startar vi Neopixel-ringen och knappen. Vi kopplar servot till GPIO-stift 9 och fyller på med resten av setup-koden från det första tärningsbygget.

Del 2/5 av RollDice3.ino

Loop-funktionen skriver vi om helt. Vi inleder med en if-sats som startas när någon trycker på knappen. Det första som då sker är att ljusstyrkan ställs upp och Neopixeln uppdateras. Sedan körs en while-loop så länge som knappen inte har släppts upp. Den while-loopen anropar funktionen rainbowCycle. När knappen väl släpps upp körs en for-loop som successivt dimrar ned Neopixelns lysdioder. När lysdioderna har släckts anropas funktionerna upDown och setDice

Del 3/5 av RollDice3.ino

UpDown- och setDice-funktionerna gör samma sak som tidigare.

Del 4/5 av RollDice3.ino

RainbowCycle och wheel är två nya funktioner. De gör att färgerna blandas och snurrar på ett mycket elegant vis. Grundkoden är ett konstverk i sig och är skriven av Adafruit som ett av deras exempel. Fler vackra exempel finns under Exempel på Fil-menyn. 

Del 5/5 av RollDice3.ino

Senast ändrad: 2017-02-27