Introducció a la robòtica en trenta-una classes/Tretzè dia: LEDs adreçables individualment

Tiraleds

Avui hem après a fer servir un tipus de leds que permeten ser controlats de manera individual, mitjançant un sol pin de l’Arduino.

El model concret que hem emprat, és segons la documentació el WS2812B. Se’n poden posar tants com es vulgui, un darrera l’altre. L’Arduino envia totes seguides les consignes de color de tots els leds, i cada un dels leds té un circuït de control propi, que fa que es quedi la primera consigna de color per ell, i transmeti la resta als que té al darrera. Quan l’Arduino fa una pausa, tots saben que torna a donar una nova tanda d’ordres.

Nosaltres en tenim dotze.

La connexió és molt senzilla. La tira de leds té una connexió Din en un dels extrems. Aquest el connectem al pin 6 de l’arduino. Qualsevol dels punts GND de la tira el connectem al GND de l’Arduino. Llavors ens queda una connexió, que és l’alimentació. La nostra tira diu +5V, i es pot

connectar al 5V de l’Arduino, si en posem pocs. Si passem de 15, ja es recomana fer servir una font d’alimentació a part. També hi ha tires que van a 12V, i aquestes, per força s’han d’alimentar a part.

Una vegada connectat, hem fet un petit programa que els encén en seqüència, i els va canviant de color amunt i avall. A veure quines seqüències feu... Segur que en teniu moltes de fascinants.

Igual que vam fer per al motor servo, no hem picat tot el codi de control, sino que hem agafat una biblioteca que es diu FastLED, i que s’encarrega de la feina d’anar enviant els colors que volguem cap als leds.

Després de demanar la biblioteca, es crea la taula, que tindrà les posicions necessàries per a desar cadascun dels colors bàsics, RGB per a cada led. En el setup, es defineix des de quin pin es comanda la tira de leds, el tipus de leds, i quants n’hi ha. Si posem el model WS2812B, ens quedencanviats el verd pel vermell. Això és perquè no tots els fabricants ordenen els colors de la mateixa manera. Per als nostres, hem posat NEOPIXEL, que fa que els colors siguin correctes.

En el programa anem emplenant la taula amb els diferents colors, i quan volguem que tinguin efecte els canvis, hem d’ordenar la transmissió, amb l’ordre FastLED.show().

Abans de fer el programa, ens caldrà instal.lar la biblioteca. A la carpets on tenim els sketches, hi hem de trobar una carpeta anomenada libraries. A dins, hem de fer-ne una que es digui FastLED, i copiar-hi tot el que trobareu en l’ enllaç, i que podeu baixar en un zip:

https://www.dropbox.com/sh/ucr7rthgzjsdtk0/AABDW5hY_cyBgdcLaxBtBNn1a?dl=0 

El programari:

#include “FastLED.h”
CRGB leds[12]; // fem una taula, que es digui leds, on desar les ordres per a 12 leds
void setup() {
    FastLED.addLeds<NEOPIXEL, 6>(leds, 0, 12); // model, pin, taula, primera adreça, nombre de leds.
}

void loop() {
    for(int posicio =0; posicio<13; posicio ++){
        leds[posicio].r = 0; // vermell
        leds[posicio].g = 0; // verd
        leds[posicio].b = 255; // blau
        FastLED.show();
        delay(100);
    }
    for(int posicio =12; posicio>=0; posicio=posicio-1){
        leds[posicio].r = 0; // vermell
        leds[posicio].g = 255; // verd
        leds[posicio].b = 0; // blau
        FastLED.show();
        delay(100);
    }
    for(int posicio =0; posicio<13; posicio ++){
        leds[posicio].r = 255; // vermell
        leds[posicio].g = 0; // verd
        leds[posicio].b = 0; // blau
        FastLED.show();
        delay(100);
    }
    for(int posicio =12; posicio>=0; posicio=posicio-1){
        leds[posicio].r = 155; // vermell
        leds[posicio].g = 255; // verd
        leds[posicio].b = 0; // blau
        FastLED.show();
        delay(100);
    }
}