NeoPixel modul s 8 RGB LED WS2812

RGB LED modul je výstupní modul pro Arduino. Tento modul obsahuje 8x RGB LED diodu WS2812, kterou můžete nalézt také pod označením NeoPixel. Díky kontroléru ve WS diodách ale můžeme všechny diody řídit pouze pomocí jednoho datového pinu a dvěma napájecími piny.
Pro napájení celého LED pásku můžeme použít napětí v rozsahu 4-7 Voltů. Avšak pro datový pin můžeme použít jak 5V, tak i 3,3V. Proudový odběr se liší dle nastavení barev na RGB LED diodě a jejich svítivosti, přičemž při plném nastavení barev i jasu odebere jedna dioda až 50 miliAmpér, což znamená až 400 mA na tento modul. Je s tím nutné počítat a u větších počtů diod k tomu přizpůsobit napájecí zdroj.

Pro úspěšné propojení RGB LED modulu a Arduino desky propojíme celkem 3 vodiče. Připojíme 5V na +5V Arduina, DI na pin D6 a GND na zem Arduina. Pro digitální pin lze použít také jiný volný pin. Změnu je ale nutné provést také na začátku programu. Pokud budeme chtít zapojit více modulů do řetězce, stačí za sebou propojovat DIN a DOUT piny na modulech a do Arduina připojit pouze pin DIN na prvním modulu jako v tomto návodu.

Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu Adafruit_NeoPixel, návod, jak na to je uveden zde.
Ukázkový kód obsahuje na svém začátku připojení potřebné knihovny, nastavení čísla propojovacího pinu a nastavení počtu LED diod propojených za sebou. Poté provedeme inicializaci LED modulů z knihovny.
Ve funkci setup provedeme v prvním kroku zahájení komunikace s WS LED moduly. Poté si na ukázku nastavíme postupně na první 3 LED diody barvy červená, zelená a modrá s půlsekundovými pauzami. A v posledním kroku tyto 3 LED diody zhasneme pomocí nastavení samých nul.
Nekonečná smyčka loop slouží pro průběžné nastavování náhodných barev na všechny dostupné LED diody. Nejprve tedy do lokálních proměnných vygenerujeme náhodná čísla pomocí funkce random, v které specifikujeme rozsah 0-256 pro barvu a 1-9 pro počet LED diod. Toto je nutné, protože vygenerované číslo bude vždy v rozsahu (x, y-1). Po vygenerování náhodných hodnot pro všechny proměnné pak tyto čísla použijeme pro zavolání podprogramu nastavRGB, který za nás nastaví barvy a po krátké pauze se smyčka opakuje.
Pro zjednodušení čitelnosti kódu při nastavování barev LED diod jsem nutné 4 příkazy zabalil do funkce nastavRGB. V této funkci vidíte, že na vstupu vezmeme všechny 3 zadané barevné složky, zkombinujeme je do jedné proměnné a poté tuto proměnnou použijeme pro nastavení barvy na vybrané LED diodě. Přičemž aktivace nové hodnoty ještě vyžaduje zavolání specifické funkce knihovny show().

// NeoPixel modul s 8 RGB LED WS2812
// navody.dratek.cz

// připojení potřebné knihovny
#include <Adafruit_NeoPixel.h>
// nastavení propojovacího pinu
#define pinDIN 6
// nastavení počtu LED modulů
#define pocetLED 8
// inicializace LED modulu z knihovny
Adafruit_NeoPixel rgbWS = Adafruit_NeoPixel(pocetLED, pinDIN, NEO_GRB + NEO_KHZ800);

void setup() {
  // zahájení komunikace s LED modulem
  rgbWS.begin();
  // nastavení červené barvy na první LED diodu
  nastavRGB(255, 0  , 0  , 1);
  delay(500);
  // nastavení zelené barvy na druhou LED diodu
  nastavRGB(0  , 255, 0  , 2);
  delay(500);
  // nastavení modré barvy na třetí LED diodu
  nastavRGB(0  , 0  , 255, 3);
  delay(500);
  // nastavení černé barvy na první 3 LED diody = vypnutí
  nastavRGB(0  , 0  , 0  , 1);
  nastavRGB(0  , 0  , 0  , 2);
  nastavRGB(0  , 0  , 0  , 3);
  delay(500);
}
void loop() {
  // pomocí funkce nastavRGB vytvoř náhodnou kombinaci barev
  // a pro každý běh smyčky vyber náhodnou LED diodu,
  // funkce random vytvoří náhodné číslo
  // z rozsahu v závorkách random(min, max-1)
  byte cervena = random(0, 256);
  byte zelena  = random(0, 256);
  byte modra   = random(0, 256);
  byte dioda   = random(1, (pocetLED + 1));
  nastavRGB(cervena, zelena, modra, dioda);
  delay(200);
}
// funkce pro nastavení zadané barvy na zvolenou diodu
void nastavRGB (byte r, byte g, byte b, int cislo) {
  // vytvoření proměnné pro ukládání barev
  uint32_t barva;
  // načtení barvy do proměnné
  barva = rgbWS.Color(r, g, b);
  // nastavení barvy pro danou LED diodu,
  // číslo má pořadí od nuly
  rgbWS.setPixelColor(cislo - 1, barva);
  // aktualizace barev na všech modulech
  rgbWS.show();
}

Po nahrání ukázkového kódu do Arduino desky s připojeným NeoPixel RGB LED modulem dostaneme například tento výsledek:

NeoPixel modul s 8 RGB LED WS2812 je pěkný modul, který slouží jako ukázka možností NeoPixel modulů. U nich můžeme za sebou zapojovat velká množství LED diod, které pak ovládáme pouze přes jediný datový pin. Tyto moduly tedy můžeme použít například pro indikaci různých stavů na našich zařízeních, tak i ve větším počtu pro různé herní přístroje či například slovní hodiny.
Je však důležité vždy myslet na dostatečné přizpůsobení napájení, protože při plném svitu mají diody poměrně velký proudový odběr.

Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/7718-rgb-led-modul-7-x-neopixel-ws2812.html
V nabídce najdete i jiné velikosti modulů:
https://dratek.cz/hledani.php?q=neopixel&n_q=

Další podobné články