WS2812B: η μαγική λωρίδα LED RGB

WS2812B RGB LED ταινία

Σίγουρα πρέπει να προσθέσετε ένα άγγιγμα χρώματος στα έργα DIY. Για αυτό, πολλοί κατασκευαστές χρησιμοποιούν το περίφημο Λωρίδες LED WS2812B RGB, με τα οποία μπορείτε να επιτύχετε ποικίλο έλεγχο χρωμάτων και αρκετά ελκυστικά εφέ φωτισμού για τα έργα σας. Φυσικά είναι ταινίες πλήρως συμβατές με τις πλακέτες Arduino, οπότε δεν θα έχετε κανένα πρόβλημα όταν προσπαθείτε να τις ενσωματώσετε.

Μπορείτε να τα βρείτε μήκη 1 μέτρου, για παράδειγμα, αν και μπορεί να ποικίλλει ανάλογα με τον τύπο πυκνότητας των LED για κάθε μετρητή που έχει. Για παράδειγμα, υπάρχουν από 30 LED έως 144 LED. Ωστόσο, εάν χρειάζεστε μεγαλύτερα μήκη για να αποκτήσετε μεγαλύτερη επιφάνεια, έχετε επίσης άλλες επιλογές στην αγορά, όπως πάνελ LED RGB ή μπορείτε πάντα να χρησιμοποιείτε πολλές ταινίες ...

Αυτές οι λωρίδες δεν είναι τίποτα περισσότερο από μια σειρά συναρμολογημένων LED RGB και τοποθετήθηκαν σε μια κοινή υποστήριξη για να τα ομαδοποιήσουν σε ταινίες. Αλλά η λειτουργία του είναι ίδια με τα ξεχωριστά LED RGB.

Τι είναι το WS2812B;

Φωτιζόμενη λωρίδα LED RGB WS2812B

Στην πραγματικότητα το WS2812B δεν είναι το ίδιο το λουρί, αλλά το καθένα από αυτά τα κύτταρα ή μικρές πλάκες LED RGB που περιλαμβάνουν. Μπορούν να ομαδοποιηθούν σε μορφή λωρίδας ή πίνακα, ώστε να μπορείτε να κάνετε διάφορες διαμορφώσεις ως προς τον αριθμό και το σχήμα τους. Οι λωρίδες που συνθέτουν είναι εύκαμπτες ταινίες, αλλά μπορείτε επίσης να βρείτε το WS2812B σε πάνελ PCB που δεν είναι.

Εάν θέλετε, μπορείτε να βρείτε τις συσκευές WS2812B ξεχωριστά για να δημιουργήσετε τα σχήματα που χρειάζεστε εσείς. Για παράδειγμα, περίπου 100 μονάδες από αυτές κοστίζουν συνήθως λίγο περισσότερο από 10 €.

κοπή λωρίδων LED rgb

Πρέπει επίσης να γνωρίζετε ότι τα πετάτε μπορείτε να τα κόψετε με ψαλίδι οπουδήποτε χρειάζεστε, αυτό δεν σημαίνει ότι σταματούν να λειτουργούν. Έτσι, μπορείτε να έχετε μόνο τα RGB LED που χρειάζεστε. Στην πραγματικότητα, έχει μερικά σημάδια (τρία χάλκινα μαξιλάρια) που μπορείτε να κόψετε. Εάν κόψετε αυτά τα τακάκια, θα έχετε τρία κομμάτια στη μία πλευρά της ταινίας και στην άλλη σε περίπτωση που θέλετε να επαναχρησιμοποιήσετε τα άλλα κομμάτια, μπορείτε να τα κολλήσετε σε αυτά για εύκολη σύνδεση.

Pinout και φύλλο δεδομένων

WS2812B σε ένα απλό κελί

Είναι ένα ανεξάρτητο κελί WS2812B με τις εισόδους και τις εξόδους του

Για περισσότερες πληροφορίες σχετικά με το δικό σας Λωρίδα LED RGB WS2812B Μπορείς να διαβάσεις το φύλλο δεδομένων προσφέρεται από κάθε κατασκευαστή, εκεί μπορείτε να συμβουλευτείτε όλες τις λεπτομέρειες των διαστάσεων και των τεχνικών χαρακτηριστικών για να μάθετε πώς να τα χρησιμοποιείτε σωστά, εκτός από το να γνωρίζετε όλα τα εύρη και τα όρια λειτουργίας.

Ως προς καρφίτσαΔεν είναι ούτε ένα μεγάλο πρόβλημα, αυτές οι ταινίες έχουν μια απλή σύνδεση που μπορείτε να κυριαρχήσετε από την αρχή χωρίς υπερβολική γνώση. Υπάρχουν μόνο τρία διαθέσιμα, αν και κάθε κελί WS2812B έχει στην πραγματικότητα περισσότερες συνδέσεις ...

Απλά πρέπει συνδεθείτε σε κάθε ταινία, ο πείρος Vcc που τροφοδοτεί τη λωρίδα στο 5V από το Arduino ή από διαφορετικό τροφοδοτικό, το GND στη γείωση, φυσικά, και τελικά το DI που είναι το άλλο που θα μεταβεί σε οποιαδήποτε έξοδο του μικροελεγκτή για να ενεργοποιήσει το LED RGB στη λωρίδα.

Αν κοιτάξετε ένα κελί WS2812B Θα δείτε ότι έχει την είσοδο Data In ή DI και την τροφοδοσία Vcc και GND. Τότε θα έχει τρεις άλλες εξόδους, αυτές θα συνδεθούν με το επόμενο κελί της ταινίας και το επόμενο κελί θα έχει τις εξόδους του συνδεδεμένες με την είσοδο της επόμενης και ούτω καθεξής έως ότου ολοκληρωθεί ολόκληρη η ταινία ...

Είναι ακριβώς αυτό DI ή εισαγωγή δεδομένων αυτό που είναι ενδιαφέρον για τη διαμόρφωση των RGB LED και το ίδιο θα συνδεθεί με το Data Out ή το DO που θα μεταφέρει τις ίδιες πληροφορίες στον επόμενο σύνδεσμο της ταινίας. Και έτσι εξαπλώνεται σε όλη τη λωρίδα.

Αγοράστε ταινίες LED WS2812B RGB

Ρολό λωρίδας LED RGB

Μπορείς αγοράστε σε όχι πολύ υψηλή τιμή σε διάφορα εξειδικευμένα καταστήματα. Τους έχετε επίσης στο Amazon σε διαφορετικές μορφές. Μερικά παραδείγματα είναι:

Δοκιμή με Arduino και WS2812B

Arduino UNO με σχήμα WS2812B

Όπως μπορείτε να φανταστείτε, με μόνο τρεις καρφίτσες είναι πολύ εύκολο συνδεθείτε στο arduino όπως μπορείτε να δείτε στο παραπάνω διάγραμμα. Απλά πρέπει να συνδέσετε 5v και GND στη λωρίδα WS2812B και το DI σε μια έξοδο που θέλετε στο Arduino. Θυμηθείτε ότι εάν αλλάξετε την καρφίτσα πρέπει επίσης να τροποποιήσετε τον πηγαίο κώδικα έτσι ώστε το πρόγραμμα να λειτουργεί σωστά.

Η βιβλιοθήκη έχει χρησιμοποιηθεί Master FAST-LED για να διευκολύνετε τα πράγματα και να έχετε απλές λειτουργίες για την οδήγηση LED RGB. Για να το κατεβάσετε και να το ενσωματώσετε σωστά στο Arduino IDE, απλώς κατεβάστε τη βιβλιοθήκη από αυτόν τον σύνδεσμο, στη συνέχεια αποσυμπιέστε το ZIP και μετονομάστε τον κατάλογο ή τον φάκελο που δεν έχει φερμουάρ ως FastLED και, στη συνέχεια, μετακινήστε αυτόν το φάκελο στον τόπο όπου είναι εγκατεστημένες οι βιβλιοθήκες του Arduino IDE στην εγκατάστασή σας. Στη συνέχεια, ανοίξτε ξανά το Arduino IDE και θα είναι έτοιμο ...

Ως προς κωδικός σκίτσου, μπορεί να είναι αρκετά απλό, όπως ο ακόλουθος κωδικός. Εάν δεν θέλετε να αντιγράψετε και να επικολλήσετε, μπορείτε να το βρείτε ανάμεσα στα παραδείγματα που υπάρχουν ήδη. Μεταβείτε λοιπόν στο Αρχείο> Παραδείγματα> FastLED> ColorPalette.

Θυμηθείτε να αλλάξετε τον ακροδέκτη 14 από το παράδειγμα σε 5 που είναι αυτός που χρησιμοποίησα στο διάγραμμα. Ή μπορείτε να συνδεθείτε στον ακροδέκτη 14 και να αποφύγετε την τροποποίηση του κωδικού. Οπως επιθυμείς.
#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.



Γίνε ο πρώτος που θα σχολιάσει

Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.