Klasické RGB LED diódy majú štyri vývody. V zapojení so spoločnou katódou je na jednom z nich katóda a na zvyšných troch jednotlivé farebné zložky R (red), G (green) a B (blue). Spoločná katóda je najdlhší vývod. Ak je LED dióda zapojená so spoločnou anódou, tak najdlhší vývod je táto spoločná anóda. Ak sa na diódu pozeráte tak, že najdlhší vývod je druhý zľava, tak úplne vľavo je druhý najdlhší vývod a to je R, čiže červená zložka. Vpravo od najdlhšieho vývodu je vývod G, čiže zelená zložka. Tento vývod je rovnako dlhý ako R. Úplne vpravo je najkratší vývod B, čiže modrá zložka.
Nastavením úrovní napätia na jednotlivých farebných zložkách získate výslednú farbu. Pri riadení mikrokontrolérom sa napäťové úrovne nastavujú pomocou PWM, čiže pulzne šírkovej modulácie. Prúd LED diódou nesmie prekročiť hodnotu udávanú v katalógu, spravidla je to 20 mA na jeden segment, čiže maximálne 60 mA na celú LED diódu.
int red = 11; int green = 10; int blue = 9; void setup() { pinMode(red, OUTPUT); pinMode(green, OUTPUT); pinMode(blue, OUTPUT); } void RGB_color(int r, int g, int b) { analogWrite(red, r); analogWrite(green, g); analogWrite(blue, b); } void loop() { RGB_color(255, 0, 0); delay(1000); // Red RGB_color(0, 255, 0); delay(1000); // Green RGB_color(0, 0, 255); delay(1000); // Blue RGB_color(255, 255, 255); delay(1000); // White RGB_color(0, 0, 0); delay(1000); // Zhasnute RGB_color(0, 255, 255); delay(1000); // Cyan RGB_color(255, 0, 255); delay(1000); // Magenta RGB_color(255, 255, 0); delay(1000); // Yellow RGB_color(0, 0, 0); delay(1000); // Zhasnute }
V príkladoch používame vývojovú dosku TotemDuino, ktorá je súčasťou jednej zo zostáv stavebnice Totem. Je 100 % kompatibilná a Arduinom UNO.
NeoPixel
LEDky, alebo pásiky, ktoré sú známe aj pod označením NeoPixel využívajú radič WS2812, ktorý je umiestnený priamo na polovodičovom substráte LED diódy. V prípade konštrukčného riešenia typu pásik, prstenec, prípadne matica diód je tento čip na každej LED dióde. Na pripojenie samostatnej LED NEopixel, pásika, alebo prstenca obsahujúcich viac diód stačia tri vodiče: napájacie napätie, GND, čiže elektrická zem a dátový vodič.
Iný konštrukčný formát NeoPixel diód (pohľad zhora a zospodu)
Každá z diód má štyri piny, okrem troch spomínaných signálov má aj výstupný dátový pin, ktorý umožňuje zreťazenie diód. Tento výstup je pripojený na dátový vstup ďalšej diódy. Zreťazené farebné LED diódy môžu tvoriť nielen pásiky, či prstence, ale aj matice znakov, napríklad na veľkoplošnej obrazovke.
Príklad prstenca s ôsmimi diódami
Aby v tom bol čo najväčší zmätok, tak Neopixel diódy sa vyrábajú aj v podobnom konštrukčnom formáte ako RGB LED diódy, Takže si treba dať pozor aké diódy kupujete, či objednávate
Diódy NeoPixel sa napájajú napätím 5 V, niektoré typy fungujú aj na 3.3 V. Prúdový odber jednotlivých diód je 60 mA, takže podľa počtu diód je potrebné dimenzovať napájací zdroj. Pre 20 diód je potrebný prúd 1.2 A. Pri dlhších LED pásikoch je potrebné priviesť napájanie externým vodičom zhruba každé 1 až 2 metre, inak dochádza k úbytku napätia, čo má za následok skreslenie farieb.
Integrovaný radič WS2812 nastavuje napätie na jednotlivých segmentoch. Na reguláciu napätia využíva PWM. Adresované LED sú v pásikoch, ale aj maticiach spravidla zapojené ako jeden reťazec. Riadiaci signál vstupuje do prvého radiča, ktorý si z dát načíta vlastné nastavenie a replikuje signál do ďalšieho radiča. Údaje sú kódované pomocou dĺžky pulzov.
V prvom príklade budeme v pol sekundových intervaloch nastavovať farby jednej diódy NEOPIXEL v poradí červená, zelená a modrá. Najskôr je potrebné pripojiť knižnicu Adafruit_NeoPixel.h a definovať niekoľko konštánt:
PIN – pin Arduina ku ktorému máme pripojený dátový signál pre diódu, prípadne diódy NeoPixel
NUM_LEDS – počet zreťazených diód
Následne vytvoríme inštanciu objektu na ovládanie NEOPIXEL diód. Konštruktor vyžaduje parametre počet pixelov, pin dátového signálu a konštantu udávajúcu typ NeoPixel diód. Pre diódy s radičom WS2812 je to konštanta NEO_GRB + NEO_KHZ800. Príkazom pixel.Colors(R,G,B) nastavujeme hodnoty jednotlivých farebných zložiek, ktoré tvoria výslednú farbu.
#include #define PIN 9 //pin na ovládanid diód Neopixel #define NUMPIXELS 1 //pocet zretazených diod Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); // inicializacia knižnice NeoPixel } void loop() { pixels.setPixelColor(0, pixels.Color(150,0,0)); //red pixels.show(); delay(500); pixels.setPixelColor(0, pixels.Color(0,150,0)); //green pixels.show(); delay(500); pixels.setPixelColor(0, pixels.Color(0,0,150)); //blue pixels.show(); delay(500); }
V ďalšom príklade zreťazíme dve diódy tak, že výstup prvej z nich bude pripojený na vstup druhej. Parameter NUMPIXELS nastavíme na hodnotu 2. Pre jednoduchosť nebudeme diódami blikať takže hlavná slučka programu bude prázdna. Na prvej dióde nastavíme červenú a na druhej zelenú farbu.
#include #define PIN 9 //pin na ovládani diód Neopixel #define NUMPIXELS 2 //pocet zretazených diod Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); // inicializacia knižnice NeoPixel. pixels.setPixelColor(0, pixels.Color(150,0,0)); //red pixels.setPixelColor(1, pixels.Color(0,150,0)); //green pixels.show(); } void loop() { }
V ďalšom príklade použijeme prstenec (alebo pásik), ktorý má 8 zreťazených diód NEOPIXEL. Na každej dióde nastavíme inú farbu. Na prvých troch budú základné farby RGB, čiže červená, zelená a modrá. Na štvrtej dióde nastavíme bielu farbu, ktorú dosiahneme ako kombináciu základných zložiek R, G a B.
#include #define PIN 9 //pin na ovládanid diód Neopixel #define NUMPIXELS 8 //pocet zretazených diod Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); // inicializacia knižnice NeoPixel pixels.setPixelColor(0, pixels.Color(150,0,0)); //red pixels.setPixelColor(1, pixels.Color(0,150,0)); //green pixels.setPixelColor(2, pixels.Color(0,0,150)); //blue pixels.setPixelColor(3, pixels.Color(150,150,150)); //white pixels.setPixelColor(4, pixels.Color(0,150,150)); //cyan pixels.setPixelColor(5, pixels.Color(150,0,150)); //magenta pixels.setPixelColor(6, pixels.Color(150,150,0)); //yellow pixels.setPixelColor(7, pixels.Color(0,0,255)); //blue pixels.show(); } void loop() { }
V pokračovaní ukážeme obsluhu RGB a NeoPixel diód pomocou mikropočítačovej dosky BBC Micro:bit.
Článek je převzat z webu Nextech se souhlasem autora.