WS2812B: magiczna taśma LED RGB

Taśma LED WS2812B RGB

Z pewnością musisz dodać odrobinę koloru do swoich projektów DIY. W tym celu wielu producentów używa słynnego Taśmy LED WS2812B RGB, za pomocą którego można uzyskać zróżnicowaną kontrolę kolorów i całkiem atrakcyjne efekty świetlne dla swoich projektów. Oczywiście są to listwy w pełni kompatybilne z płytkami Arduino, więc nie będziesz miał problemu przy próbie ich integracji.

Można je znaleźć w długości 1 metrana przykład, chociaż mogą się one różnić w zależności od rodzaju gęstości diod LED dla każdego posiadanego licznika. Na przykład jest od 30 diod LED do 144 diod LED. Jeśli jednak potrzebujesz dłuższych odcinków, aby uzyskać większą powierzchnię, na rynku masz również inne opcje takie jak panele RGB LED lub zawsze możesz zastosować kilka pasków ...

Te paski to nic innego jak seria zmontowanych diod LED RGB i zamontowane na wspólnej podstawie, aby zgrupować je w paski. Ale jego działanie jest identyczne jak w przypadku oddzielnych diod LED RGB.

Co to jest WS2812B?

Podświetlana taśma LED RGB WS2812B

Właściwie WS2812B to nie sam pasek, ale każdy z nich komórki lub małe płytki LED RGB, które zawierają. Można je pogrupować w formie listwy lub panelu, dzięki czemu można tworzyć różne konfiguracje pod względem ich liczby i kształtu. Paski tworzące są elastyczne, ale WS2812B można również znaleźć na panelach PCB, które nie są.

Jeśli chcesz, możesz znaleźć urządzenia WS2812B oddzielnie aby samodzielnie tworzyć kształty, których potrzebujesz. Na przykład około 100 sztuk z nich kosztuje zwykle nieco więcej niż 10 euro.

cięcie taśm led rgb

Powinieneś także wiedzieć, że je rzucasz możesz je wyciąć nożyczkami, gdziekolwiek potrzebujesz, nie oznacza to, że przestają działać. Możesz więc mieć tylko te diody LED RGB, których potrzebujesz. W rzeczywistości ma kilka oznaczeń (trzy miedziane podkładki), które można przeciąć. Jeśli przetniesz te pady, będziesz miał trzy ścieżki po jednej stronie paska, a po drugiej, jeśli chcesz ponownie użyć innych elementów, możesz przylutować na nich szpilki, aby ułatwić połączenie.

Pinout i arkusz danych

WS2812B w prostej komórce

Jest to niezależna komórka WS2812B z wejściami i wyjściami

Aby uzyskać więcej informacji na temat Twojego Taśma LED RGB WS2812B Możesz czytać arkusz danych oferowane przez każdego producenta, można tam zapoznać się ze wszystkimi szczegółami wymiarów i właściwościami technicznymi, aby dowiedzieć się, jak z nich korzystać, oprócz poznania wszystkich zakresów roboczych i ograniczeń.

Jeśli chodzi pinoutNie jest to też poważny problem, te listwy mają proste połączenie, które można opanować od samego początku bez zbytniej wiedzy. Dostępne są tylko trzy, chociaż każda komórka WS2812B ma w rzeczywistości więcej połączeń ...

Po prostu musisz połączyć na każdym pasku pin Vcc, który zasila pasek do 5V z Arduino lub z innego zasilacza, GND do masy, oczywiście, a na końcu DI, które jest drugim, które przejdzie do dowolnego wyjścia mikrokontrolera, aby aktywować Na pasku diody RGB.

Jeśli spojrzysz na ogniwo WS2812B Zobaczysz, że ma wejście Data In lub DI oraz zasilanie Vcc i GND. Wtedy będzie miał trzy inne wyjścia, które zostaną podłączone do następnej komórki paska, a następne ogniwo będzie miało wyjścia podłączone do wejścia następnego i tak dalej, aż cały pasek zostanie ukończony ...

Właśnie o to chodzi DI lub wejście danych ten, który jest interesujący do skonfigurowania diod LED RGB, i ten sam zostanie podłączony do wyjścia danych lub DO, który przeniesie tę samą informację do następnego łącza paska. I tak rozprzestrzenia się po całym pasku.

Kup Taśmy LED WS2812B RGB

Taśma LED RGB w rolce

Możesz kup po niezbyt wysokiej cenie w różnych wyspecjalizowanych sklepach. Masz je również w Amazon w różnych formatach. Oto kilka przykładów:

Testowanie z Arduino i WS2812B

Arduino UNO ze schematem WS2812B

Jak możesz sobie wyobrazić, mając tylko trzy szpilki, jest to bardzo łatwe Połącz się z arduino jak widać na powyższym schemacie. Wystarczy podłączyć 5v i GND do paska WS2812B, a DI do wyjścia, które chcesz na Arduino. Pamiętaj, że jeśli zmienisz kod PIN, musisz również zmodyfikować kod źródłowy, aby program działał poprawnie.

Biblioteka została wykorzystana Mistrz FAST-LED aby ułatwić i uzyskać proste funkcje do sterowania diodami LED RGB. Aby go pobrać i poprawnie zintegrować z Arduino IDE, po prostu pobierz bibliotekę z tego linku, następnie rozpakuj ZIP i zmień nazwę rozpakowanego katalogu lub folderu na FastLED, a następnie przenieś ten folder do miejsca, w którym biblioteki Arduino IDE są zainstalowane w twojej instalacji . Następnie ponownie otwórz Arduino IDE i będzie gotowe ...

Jeśli chodzi kod szkicu, może być całkiem proste, jak poniższy kod. Jeśli nie chcesz kopiować i wklejać, możesz go znaleźć wśród przykładów, które już się pojawiły. Przejdź do Plik> Przykłady> FastLED> ColorPalette.

Pamiętaj, żeby zmienić pin 14 z przykładu na 5 czyli ten, którego użyłem na schemacie. Lub możesz połączyć się z pinem 14 i uniknąć modyfikowania kodu. Jak wolisz.
#include <FastLED.h>

#define LED_PIN     5
#define NUM_LEDS    14
#define BRIGHTNESS  64
#define LED_TYPE    WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];

#define UPDATES_PER_SECOND 100

// This example shows several ways to set up and use 'palettes' of colors
// with FastLED.
//
// These compact palettes provide an easy way to re-colorize your
// animation on the fly, quickly, easily, and with low overhead.
//
// USING palettes is MUCH simpler in practice than in theory, so first just
// run this sketch, and watch the pretty lights as you then read through
// the code.  Although this sketch has eight (or more) different color schemes,
// the entire sketch compiles down to about 6.5K on AVR.
//
// FastLED provides a few pre-configured color palettes, and makes it
// extremely easy to make up your own color schemes with palettes.
//
// Some notes on the more abstract 'theory and practice' of
// FastLED compact palettes are at the bottom of this file.



CRGBPalette16 currentPalette;
TBlendType    currentBlending;

extern CRGBPalette16 myRedWhiteBluePalette;
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;


void setup() {
    delay( 3000 ); // power-up safety delay
    FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
    FastLED.setBrightness(  BRIGHTNESS );
    
    currentPalette = RainbowColors_p;
    currentBlending = LINEARBLEND;
}


void loop()
{
    ChangePalettePeriodically();
    
    static uint8_t startIndex = 0;
    startIndex = startIndex + 1; /* motion speed */
    
    FillLEDsFromPaletteColors( startIndex);
    
    FastLED.show();
    FastLED.delay(1000 / UPDATES_PER_SECOND);
}

void FillLEDsFromPaletteColors( uint8_t colorIndex)
{
    uint8_t brightness = 255;
    
    for( int i = 0; i < NUM_LEDS; i++) {
        leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
        colorIndex += 3;
    }
}


// There are several different palettes of colors demonstrated here.
//
// FastLED provides several 'preset' palettes: RainbowColors_p, RainbowStripeColors_p,
// OceanColors_p, CloudColors_p, LavaColors_p, ForestColors_p, and PartyColors_p.
//
// Additionally, you can manually define your own color palettes, or you can write
// code that creates color palettes on the fly.  All are shown here.

void ChangePalettePeriodically()
{
    uint8_t secondHand = (millis() / 1000) % 60;
    static uint8_t lastSecond = 99;
    
    if( lastSecond != secondHand) {
        lastSecond = secondHand;
        if( secondHand ==  0)  { currentPalette = RainbowColors_p;         currentBlending = LINEARBLEND; }
        if( secondHand == 10)  { currentPalette = RainbowStripeColors_p;   currentBlending = NOBLEND;  }
        if( secondHand == 15)  { currentPalette = RainbowStripeColors_p;   currentBlending = LINEARBLEND; }
        if( secondHand == 20)  { SetupPurpleAndGreenPalette();             currentBlending = LINEARBLEND; }
        if( secondHand == 25)  { SetupTotallyRandomPalette();              currentBlending = LINEARBLEND; }
        if( secondHand == 30)  { SetupBlackAndWhiteStripedPalette();       currentBlending = NOBLEND; }
        if( secondHand == 35)  { SetupBlackAndWhiteStripedPalette();       currentBlending = LINEARBLEND; }
        if( secondHand == 40)  { currentPalette = CloudColors_p;           currentBlending = LINEARBLEND; }
        if( secondHand == 45)  { currentPalette = PartyColors_p;           currentBlending = LINEARBLEND; }
        if( secondHand == 50)  { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND;  }
        if( secondHand == 55)  { currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; }
    }
}

// This function fills the palette with totally random colors.
void SetupTotallyRandomPalette()
{
    for( int i = 0; i < 16; i++) {
        currentPalette[i] = CHSV( random8(), 255, random8());
    }
}

// This function sets up a palette of black and white stripes,
// using code.  Since the palette is effectively an array of
// sixteen CRGB colors, the various fill_* functions can be used
// to set them up.
void SetupBlackAndWhiteStripedPalette()
{
    // 'black out' all 16 palette entries...
    fill_solid( currentPalette, 16, CRGB::Black);
    // and set every fourth one to white.
    currentPalette[0] = CRGB::White;
    currentPalette[4] = CRGB::White;
    currentPalette[8] = CRGB::White;
    currentPalette[12] = CRGB::White;
    
}

// This function sets up a palette of purple and green stripes.
void SetupPurpleAndGreenPalette()
{
    CRGB purple = CHSV( HUE_PURPLE, 255, 255);
    CRGB green  = CHSV( HUE_GREEN, 255, 255);
    CRGB black  = CRGB::Black;
    
    currentPalette = CRGBPalette16(
                                   green,  green,  black,  black,
                                   purple, purple, black,  black,
                                   green,  green,  black,  black,
                                   purple, purple, black,  black );
}


// This example shows how to set up a static color palette
// which is stored in PROGMEM (flash), which is almost always more
// plentiful than RAM.  A static PROGMEM palette like this
// takes up 64 bytes of flash.
const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM =
{
    CRGB::Red,
    CRGB::Gray, // 'white' is too bright compared to red and blue
    CRGB::Blue,
    CRGB::Black,
    
    CRGB::Red,
    CRGB::Gray,
    CRGB::Blue,
    CRGB::Black,
    
    CRGB::Red,
    CRGB::Red,
    CRGB::Gray,
    CRGB::Gray,
    CRGB::Blue,
    CRGB::Blue,
    CRGB::Black,
    CRGB::Black
};



// Additionl notes on FastLED compact palettes:
//
// Normally, in computer graphics, the palette (or "color lookup table")
// has 256 entries, each containing a specific 24-bit RGB color.  You can then
// index into the color palette using a simple 8-bit (one byte) value.
// A 256-entry color palette takes up 768 bytes of RAM, which on Arduino
// is quite possibly "too many" bytes.
//
// FastLED does offer traditional 256-element palettes, for setups that
// can afford the 768-byte cost in RAM.
//
// However, FastLED also offers a compact alternative.  FastLED offers
// palettes that store 16 distinct entries, but can be accessed AS IF
// they actually have 256 entries; this is accomplished by interpolating
// between the 16 explicit entries to create fifteen intermediate palette
// entries between each pair.
//
// So for example, if you set the first two explicit entries of a compact 
// palette to Green (0,255,0) and Blue (0,0,255), and then retrieved 
// the first sixteen entries from the virtual palette (of 256), you'd get
// Green, followed by a smooth gradient from green-to-blue, and then Blue.



Bądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.