1

Adresovatelné LED pásky a řetězy – WS2811, WS2812…

Adresovatelné LED pásky umožňují (na rozdíl od obyčejných) individuální řízení jednotlivých LED. Zde si ukážeme, jak fungují a jak je zprovoznit.

Popis:

Tyto pásky/řetězy většinou mívají kromě napájecích kontaktů ještě jeden datový. Pásky se nejčastěji vyrábí s LED se zabudovanými řadiči (např. WS2812, WS2812B, SK6812 apod. – řadič je ve stejném pouzdře jako LED čipy), u řetězů se setkáme spíše s tím, že LED a řadič nesdílí stejné pouzdro – zde je typicky použitý čip WS2811 a externí RGB LED. S tímto se lze setkat i na páscích, ale první varianta (WS2812 – řadič i LED v jednom pouzdře) je častější. Různé typy LED pásků a další věci (Arduino…) můžete koupit zde. Vyrábí se i LED pásky, které mají více datových vodičů (např. s čipy APA102, HL1606) – typicky mají kromě datového signálu ještě hodinový signál (clock), ale těm se zde nebudu věnovat.

Adresování všech LED přes jediný vodič má výhodu v tom, že stačí jediný pin na použitém mikrořadiči. Velká nevýhoda je naopak potřeba velmi přesného časování. Většína řídících knihoven tedy zakáže veškerá přerušení procesoru po dobu „nahrávání“ dat do pásku a zabere veškerý výkon mikrořadiče (během této doby nemůže dělat nic jiného), což na Arduinu vede například k nepřesnostem funkcí millis() a micros(). Tato doba trvá cca 30 us na pixel (9 ms na 300-LED pásek).

Pokud by si někdo chtěl napsat vlastní knihovnu, tak je protokol pro přenos dat popsaný v datasheetu pro WS2812B. Zde budu používat knihovnu Adafruit NeoPixel (pro import knihovny do Arduino IDE klikněte na Download or clone -> Download as ZIP a v Arduino IDE zvolte Sketch -> Include library -> Add .ZIP library). Existují i jiné knihovny, například FastLED.

Ukázkový kód – komentovaný (pro knihovnu NeoPixel – testovaný na Arduinu Nano, měl by fungovat i na dalších):

// inkluze knihovny
#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel pasek;

// nastaveni poctu LED, pinu Arduina a parametru efektu (rychlost zobrazovani (zpozdeni) a rychlost opakovani barev)
#define pocet 60
#define pin 6
#define dly 10
#define n 4

// funkce na prevod hodnoty/"uhlu" 0-255 na jednotlive barevne slozky (0 = cervena, 85 = zelena, 170 = modra)
uint8_t cr(uint8_t a) { return a<85?(255-a*3):(a>170?3*(a-170):0);}
uint8_t cg(uint8_t a) { return a<170?(a<85?3*(a-85):(3*(170-a))):0;}
uint8_t cb(uint8_t a) { return a>=85?(a<170?3*(a-85):(3*(255-a))):0;}

void setup() {
  // typ pasku (sled barev, rychlost komunikace)
  // u retezu se osvedcil NEO_RGB
  // u WS2812 to bude NEO_GRB
 
  pasek = Adafruit_NeoPixel(pocet, pin, NEO_RGB + NEO_KHZ800);
  pasek.begin();
  pasek.show();

  // zobrazeni barev R, G, B - kazda na 1 sekundu
  int i;
  for(i=0;i<pocet;i++) pasek.setPixelColor(i, pasek.Color(255,0,0));
  pasek.show();
 
  delay(1000);
  for(i=0;i<pocet;i++) pasek.setPixelColor(i, pasek.Color(0,255,0));
  pasek.show();
 
  delay(1000);
  for(i=0;i<pocet;i++) pasek.setPixelColor(i, pasek.Color(0,0,255));
  pasek.show();
  delay(1000);
}

int pozice;

void loop() {
  // zobrazeni prislusne barvy na jednotlivych LED
  int i;
  for(i=0;i<pocet;i++) pasek.setPixelColor(i, pasek.Color(cr((pozice+i*n)%255), cg((pozice+i*n)%255), cb((pozice+i*n)%255)));
  pasek.show();
  pozice++;
  if (pozice==256) pozice=0;

  // pauza mezi pruchody hlavni smyckou
  delay(dly);
}

Zapojení:

Datový vstup (DIN) LED pásku připojíme na pin 6 Arduina. (Pozor, nelze zaměnit datový vstup a výstup)
Zem (GND) LED pásku připojíme na GND Arduina.
5V (napájení) LED pásku připojíme na +5V (v případě použití externího zdroje musíme spojit i GND zdroje a Arduina). Pro velmi krátké LED pásky a řetězce můžeme použít i 5V z Arduina, ale nedoporučuji přesahovat proud cca 500 mA, případně 100 mA při jiném napájení Arduina než 5 V.
Jeden plně rozsvícený (255, 255, 255) pixel bude mít spotřebu okolo 60 mA. Klidová spotřeba (všechny LED zhasnuté) je řádově menší. Jednotlivé barvy mají spotřebu okolo 20 mA. Je dobré si nechat nějakou rezervu (třeba +25%) a počítat třeba se 75 mA na LED. 60 LED pásek bude při 100% rozsvícení všech barev odebírat cca 3,6 A, ale neuškodí použít trochu silnější zdroj, např. 4,5 A (napětí 5 V je třeba dodržet, proud může být i trochu menší). Pokud zajistíme, že nebudou svítit všechny najednou/naplno, tak bude průměrný odebíraný proud menší (téměř úměrně % jejich max. jasu).

LED jsou řízeny pomocí PWM, to znamená rychle zhasínány a rozsvěceny – to může vést i k nějakému rušení a odběru ve špičkách, takže připojení rozumně zvoleného kondenzátoru (např. 470 uF, >=6.3 V na metr pásku) paralelně k napájení pásku by nemělo ničemu ublížit. Pokud je pásek dlouhý, tak LED daleko od přívodu mohou svítit méně a je vhodné napájecí cesty propojit tlustším drátem.

Ukázka:

Řetěž s WS2811:

web1

Pásek:

web2

Zde je video z provozu.

 

Arduino Uno, Mega, Senzory, Moduly za

VÝHODNOU CENU

František Štefanec

Jeden komentář

  1. Earn on the Internet from $ 5000 per day, do not strain, the details are here: http://pagebin.com/ooZHo68r

    online casino free bonus codes, make money off poker online, way to make money online fast, fastest way to make money in gran turismo 5 offline, how to make money from sport betting in nigeria, make money sell online, how to make extra money fast from home, make fast money online no investment
    , make money online on amazon, how to play online poker tournaments, how to make money online with email marketing, how to make money taking paid surveys, how to make money online in my spare time, credit card with no fee for balance transfers, 10 ways to make extra money for christmas, easy ways of making money from home, how can i make money taking surveys, how to make money fast as a tween, anyone make money sports betting
    , moneygram money transfer logo, earn money online mobile recharge, online gambling that accepts paypal, legit way of making money online, how to earn money online data entry work, real make money from home, royal gclub casino online, how to make your music online

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *