Ledy adresowane - co to takiego?

Ledy adresowane - co to takiego?
Ledy adresowe to taśmy (paski) diod RGB, w których możemy dowolnie ustawiać, które diody lub dioda ma się zapalić i dodatkowo możemy wybrać jej barwę. Nic zatem nie stoi na przeszkodzie, żeby część świeciła się na zielono, część na niebiesko, a reszta żeby migała na czerwono. Najprościej mówiąc - nie ma ograniczeń, nie to co w przypadku innych "zwykłych" ledów.

Co będzie potrzebne:

  • pasek adresowany LED WS2812b,
  • zasilacz 5V/10A/50W,
  • Arduino UNO (może być dowolne),
  • rezystor 220Ω (może być 470Ω)
  • 4 przewody męsko-męskie (jeśli nie chcemy lutować),
  • płytka prototypowa,
  • przewód zakończony wtyczką (do podłączenia zasilacza do gniazdka),
  • śrubokręt.
 

 

Po zgromadzeniu części łączymy cały układ. Poniżej zdjęcie, schemat i opis podłączenia:

 

 

Wtyczkę podłączamy do wejścia zasilacza (L- brązowy, N- niebieski i PE- żółty), a wyjście (5V i GND) podłączamy do dłuższych przewodów w ledach (czerwony- '+', biały- '-').

Z kolei trzy przewody połączone wychodzące z ledów podłączamy do Arduino (czerwony- '5V', biały- 'GND', zielony- 'DIN' (łączymy poprzez rezystor!))

Po zmontowaniu układu nie pozostało nic innego jak wgranie programu i podziwianie efektu końcowego.

Niezbędnym elementem jest też pobranie biblioteki Adafruit_Neopixel ze strony www: https://github.com/adafruit/Adafruit_NeoPixel. Tak pobraną bibliotekę umieszczamy w folderze /libraries w Arduino i możemy działać dalej!

 

 

Poniżej zamieszczam kod:

  1. #include <Adafruit_NeoPixel.h>
  2. #ifdef __AVR__
  3. #include <avr/power.h>  
  4. #endif
  5. #define PIN            5    //tutaj podajemy numer cyfrowego pinu pod który podłaczamy ledy
  6. #define NUMPIXELS  150    //tutaj podajemy ilość ledów jakie chcemy obsłużyć
  7. Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);  
  8. intdelayval = 10; // delay na 10ms  
  9. intdelayval2 = 25; // delay na 20ms  
  10. voidsetup() {  
  11. pixels.begin(); // This initializes the NeoPixel library.  
  12. }  
  13. voidloop() {  
  14. //kazdy piksel ma swój indywidualny numer. Indeksowanie zaczyna się od 0 i kończy na liczbie ledów-1
  15. for(int i=0;i<NUMPIXELS;i++){  
  16. // pixels.Color - tutaj podajemy wartości z zakresu 0-255 dla (G,R,B)  
  17. pixels.setPixelColor(i, pixels.Color(0,150,0));   
  18. pixels.show(); // To nam wykonuje instrukcje, czyli dany piksel zaczyna swiecic tak jak okreslilismy to wyżej  
  19. delay(delayval); // opóźnienie dla uzyskania lepszego efektu  
  20. }  
  21. for(int i=NUMPIXELS;i>0;i--){  
  22. // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255  
  23. pixels.setPixelColor(i, pixels.Color(0,0,150));   
  24. pixels.show();   
  25. delay(delayval);   
  26. }  
  27. for(int i=0;i<NUMPIXELS;i++){  
  28. pixels.setPixelColor(i, pixels.Color(150,0,0));   
  29. pixels.show();   
  30. delay(delayval);   
  31. }  
  32. for(int i=NUMPIXELS;i>=0;i--){  
  33. pixels.setPixelColor(i, pixels.Color(150,150,150));   
  34. pixels.show();   
  35. delay(delayval);   
  36. }  
  37. for(inti=NUMPIXELS;i>0;i--){  
  38. pixels.setPixelColor(i, pixels.Color(0,0,0));   
  39. pixels.show();   
  40. delay(delayval);   
  41. }  
  42. //kilka diod
  43. for(inti=0;i<NUMPIXELS;i++){  
  44. pixels.setPixelColor(i, pixels.Color(0,150,0));   
  45. pixels.setPixelColor(i-3, pixels.Color(0,0,0));   
  46. pixels.show();   
  47. delay(delayval);   
  48. }  
  49. for(int i=NUMPIXELS;i>0;i--){  
  50. pixels.setPixelColor(i, pixels.Color(0,0,150));   
  51. pixels.setPixelColor(i+3, pixels.Color(0,0,0));  
  52. pixels.show();   
  53. delay(delayval);   
  54. }  
  55. for(int i=0;i<NUMPIXELS;i++){  
  56. pixels.setPixelColor(i, pixels.Color(150,0,0));   
  57. pixels.setPixelColor(i-3, pixels.Color(0,0,0));  
  58. pixels.show();   
  59. delay(delayval);   
  60. }  
  61. for(int i=NUMPIXELS;i>0;i--){  
  62. pixels.setPixelColor(i, pixels.Color(150,150,150));   
  63. pixels.setPixelColor(i+3, pixels.Color(0,0,0));  
  64. pixels.show();   
  65. delay(delayval);   
  66. }  
  67. //funkcja random(max) wybiera losowe wartości z zakresu 0 do max
  68. for(int i=0;i<300;i++){  
  69. pixels.setPixelColor(random(NUMPIXELS), pixels.Color(random(255),random(255),random(255)));   
  70. pixels.show();   
  71. delay(delayval2);   
  72. }  

  90. }  

Ledy adresowane mają nieograniczone zastosowania - od wykorzystania ich jako zegar po wskaźnik temperatury otoczenia. Dodatkowo idealnie sprawdzą się jako ozdoba pokoju lub propozycja dla graczy - przyklejenie ich za monitorem. Na bank wywołacie efekt "WOW!" u każdego kto do Was przyjdzie. Próbujcie, do dzieła!

Michał Błaszak