WS2812B: shiriti magjik RGB LED

Rrip LED WS2812B RGB

Me siguri ju duhet të shtoni një ngjyrim të ngjyrave në projektet tuaja DIY. Për këtë, shumë prodhues përdorin të famshmen Shirita LED WS2812B RGB, me të cilin do të arrini kontroll të larmishëm të ngjyrave dhe efekte mjaft tërheqëse të ndriçimit për projektet tuaja. Sigurisht që ato janë shirita plotësisht të përputhshme me bordet Arduino, kështu që nuk do të keni ndonjë problem kur përpiqeni t'i integroni ato.

Ju mund t'i gjeni në gjatësi prej 1 metër, për shembull, megjithëse ato mund të ndryshojnë në varësi të llojit të densitetit të LED-ve për secilin matës që kanë. Për shembull, ka nga 30 LED në 144 LED. Sidoqoftë, nëse keni nevojë për gjatësi më të gjatë për të marrë një sipërfaqe më të madhe, ju gjithashtu keni mundësi të tjera në treg të tilla si panele RGB LED ose gjithmonë mund të përdorni disa shirita ...

Këto shirita nuk janë asgjë më shumë se një seri LED të mbledhura RGB dhe montuar në një mbështetje të përbashkët për t'i grupuar ato në shirita. Por funksionimi i tij është identik me LEDs të veçantë RGB.

Çfarë është WS2812B?

Rrip LED i ndriçuar RGB WS2812B

Në të vërtetë WS2812B nuk është shiriti vetë, por secila prej tyre qelizat ose pllaka të vogla LED RGB që përfshijnë. Ato mund të grupohen në formën e një shiriti ose një paneli, kështu që ju mund të bëni konfigurime të ndryshme për sa i përket numrit dhe formës së tyre. Shiritat që përbëjnë janë shirita fleksibël, por gjithashtu mund të gjeni WS2812B në panelet PCB që nuk janë.

Nëse dëshironi, mund t'i gjeni pajisjet WS2812B veç e veç për të krijuar vetë format që ju nevojiten. Për shembull, rreth 100 njësi prej tyre zakonisht kushtojnë pak më shumë se 10 €.

RGB prerja e shiritave të udhëhequr

Duhet ta dini gjithashtu që i hidhni mund t’i prisni me një gërshërë kudo që keni nevojë, kjo nuk nënkupton që ata të ndalojnë së punuari. Kështu që ju mund të keni vetëm LED RGB që ju nevojiten. Në fakt, ajo ka disa shenja (tre jastëk bakri) që mund të prisni. Nëse i prisni këto jastëkë, do të keni tre këngë në njërën anë të shiritit dhe në tjetrën në rast se doni të ripërdorni pjesët e tjera, mund t'i bashkoni kunjat në to për t'u lidhur lehtë.

Pinout dhe fletë të dhënash

WS2812B në një qelizë të thjeshtë

Shtë një qelizë e pavarur WS2812B me hyrjet dhe daljet e saj

Për më shumë informacion në lidhje me tuajin Rrip LED RGB WS2812B Ju mund të lexoni fleta e të dhënave të ofruara nga secili prodhues, atje mund të konsultoheni me të gjitha detajet e dimensioneve dhe karakteristikave teknike për të ditur t'i përdorni si duhet, përveç njohjes së të gjitha diapazoneve dhe kufijve të funksionimit.

Për të fiksojAs ky nuk është një problem i madh, këto shirita kanë një lidhje të thjeshtë që ju mund ta zotëroni që nga fillimi pa shumë njohuri. Ka vetëm tre të disponueshme, megjithëse secila qelizë WS2812B në të vërtetë ka më shumë lidhje ...

Thjesht duhet lidh në secilën shirit kunji Vcc që ushqen shiritin në 5V nga Arduino ose nga një furnizim tjetër i energjisë, GND në tokë, natyrisht, dhe në fund DI që është tjetri që do të shkojë në çdo dalje të mikrokontrolluesit për të aktivizuar LED RGB në shirit.

Nëse shikon një qelizë WS2812B Do të shihni që ka hyrjen Data In ose DI dhe furnizimin me energji Vcc dhe GND. Pastaj do të ketë tre dalje të tjera, këto do të lidhen me qelizën tjetër të shiritit dhe qeliza tjetër do të ketë rezultatet e saj të lidhura me hyrjen e tjetrës dhe kështu me radhë derisa të përfundojë e gjithë rripi ...

Preciselyshtë pikërisht kjo DI ose futja e të dhënave ai që është interesant për të konfiguruar LEDs RGB, dhe i njëjti do të lidhet me Data Out ose DO që do të çojë të njëjtin informacion në lidhjen tjetër në shirit. Dhe kështu ajo përhapet në të gjithë shiritin.

Bleni shirita LED WS2812B RGB

Roll shirit LED LED

Ti mundesh blej me një çmim jo shumë të lartë në dyqane të ndryshme të specializuara. Ju gjithashtu i keni ato në Amazon në formate të ndryshme. Disa shembuj janë:

Testimi me Arduino dhe WS2812B

Arduino UNO me skemë WS2812B

Siç mund ta imagjinoni, me vetëm tre kunja është shumë e lehtë lidhu me arduino siç mund ta shihni në diagramin e mësipërm. Thjesht duhet të lidhni 5v dhe GND me shiritin WS2812B dhe DI me një dalje që dëshironi në Arduino. Mos harroni se nëse ndryshoni pinin duhet të modifikoni edhe kodin burimor në mënyrë që programi të funksionojë siç duhet.

Biblioteka është përdorur Master i FAST-LED për t'i bërë gjërat më të lehta dhe për të marrë funksione të thjeshta për të drejtuar LED RGB. Për ta shkarkuar dhe integruar atë si duhet në Arduino IDE, thjesht shkarkoni bibliotekën nga ajo lidhje, pastaj zhzgjidhni ZIP dhe riemërtoni direktorinë ose dosjen e zbërthyer si FastLED, dhe më pas zhvendoseni atë dosje atje ku janë instaluar bibliotekat Arduino IDE në instalimin tuaj. Pastaj rihapni Arduino IDE dhe do të jetë gati ...

Për të kodi i skicës, mund të jetë mjaft e thjeshtë si kodi i mëposhtëm. Nëse nuk doni të kopjoni dhe ngjisni, mund ta gjeni në mesin e shembujve që vijnë tashmë. Kështu që shkoni te File> Shembuj> FastLED> ColorPalette.

Mos harroni të ndryshoni kunjin 14 nga shembulli në 5 i cili është ai që kam përdorur në diagram. Ose mund të lidheni me pin 14 dhe të shmangni modifikimin e kodit. Si ju preferoni.
#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ëhu i pari që komenton

Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.