Styr NeoPixels (WS2812B RGB-lsydioder)

WS2812b är en väldigt vanlig modell på RGB-lysdioder som oftast används i långa ljuslister, eller matris-moduler. De kallas populärt även för ”NeoPixel”. Varje lysdiod innehåller styrelektronik och styrs med hjälp av ett enkelt seriellt dataprotokoll. Detta gör det väldigt lätt att kontrollera många (tusentals) med ett enda Arduino-kort. I den här guiden visar vi hur man sätter alla lysdioderna i en kedja till samma färg.

Kopplingen

VIKTIGT! Lysdioder drar mycket ström och det behövs inte många för att de ska dra mer än vad ett Arduino-kort kan ge ut. I exemplet använder vi 8 lysdioder vilket ska anses som abslut max för hur många man kan koppla in direkt till ett Arduino-kort. Vill du koppla in fler måste du ansluta lysdioderna direkt till ett 5-volts nätaggregat enligt bilden nedan. Med denna koppling så får Arduino-kortet ström från strömadaptern via 5-Volt-pinnen och du behöver inte ha någon annan strömförsörjning till det.

Kodbibliotek

Det finns många kodbibliotek för att styra RGB-lysdioder. I vårt exempel använder vi oss av ett som heter ”Adafruit_NeoPixel”. Installera det genom bibliotekshanteraren i Arduino IDE-prorgammet.

Koden

#include <Adafruit_NeoPixel.h>

// Konstant som berättar för koden vilken anslutning som är kopplad till
// den första lysdiodens data-ingång.
const int pixel_data_pin = 2;

// Här sätter vi hur många lysdioder vi har i vår kedja. Ändra detta så att
// det matchar din uppkoppling.
const int pixel_count = 8;

// Sätt upp kodbiblbioteket med våra inställningar - antalet lysdioder och
// datapinne som används. De sista värdena säger till biblioteket hur det ska
// prata med lysdioderna, i det här fallet att vi använder WS2812B-lysdioder.
Adafruit_NeoPixel pixels(pixel_count, pixel_data_pin, NEO_GRB + NEO_KHZ800);

// Setu()p körs en gång vid uppstart.
void setup() {
  // Säg till kodbiblioteket att ställa in allt så att det kan börja prata
  // med lysdioderna.
  pixels.begin();

  // Släck alla lysdioder.
  pixels.clear();
}

// Den här variabeln använder vi för att hålla koll på ljusintensiteten (rött).
int led_r = 0;

// Loop() körs om och om igen.
void loop() {
  // Gå igenom alla lysdioder i kedjan
  for (int i = 0; i < pixel_count; i++) {
    // Sätt lysdioden till rött. Vi använder variabeln led_r för att
    // variera ljusintensiteten. Färgen anges med tre värden, ett vardera
    // för rött, grönt och blått. Alla regnbågens färger går att skapa
    // genom att blanda dessa tre grundfärger. Intensiteten anges från 0 (helt svart)
    // till 255 (max ljusstyrka).
    pixels.setPixelColor(i, pixels.Color(led_r, 0, 0));

    // Skicka ut datan till lysdioderna.
    pixels.show();
  }

  // Öka ljusintensitet med ett steg
  led_r++;

  // Om ljusintensiteten är mer än 255, vilket är max för lysdioderna
  // så börjar vi om från 0 igen.
  if (led_r > 255) {
    led_r = 0;
  }

  // Vänta 10ms innan nästa ändring så att lysdioderna inte blinkar för snabbt.
  delay(10);
}

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *