Tecnologia vestible

Per començar Elements d'entrada Programació CircuitPython   Recursos CITCEA
Elements no electrònics Elements de sortida Programació Arduino    
Projectes Elements de control Dades pràctiques   Inici

DotStar strip

Les DotStar strip són conjunts de LED RGB connectats en cadena i muntats dins una funda. El control de cada un dels LED és individual però es fa des de dues sortides digitals del microcontrolador (una de comunicació de dades i una de polsos de rellotge) de manera que deixa totes les altres potes lliures per a altres funcions.

Són més fàcils de controlar que els NeoPixel però, en canvi, necessiten una alimentació de 5 V, fet que complica alimentar-los des de bateries.

Tira de LED  [AF]

Es fabriquen DotStar strip RGB en tires de 30 LED per metre en blanc i en negre, tires de 60 LED per metre també en blanc i en negre. Aquests es fabriquen en rotlles però es venen a metres.

També hi ha tires de 144 LED per metre que es venen en peces d'un metre en blanc i en negre o de mig metre en blanc i en negre.

Per fer servir els DotStar en l'entorn Arduino ens caldrà la DotStar library. Un cop ja tinguem la biblioteca, podem fer els nostres programes. A la part inicial, hem de carregar la biblioteca corresponent:

#include <Adafruit_DotStar.h>
#include <SPI.h>

També hem de carregar la biblioteca SPI.

A la part de declaració de variables, hem de crear un objecte Adafruit_DotStar per a cada cadena de LED. Considerem que formen una cadena tots els que estan connectats un després de l'altra a la mateixa parella de sortides del microcontrolador.

Adafruit_DotStar cadena = Adafruit_DotStar(10, 12, 6, DOTSTAR_BRG);

En aquest cas l'objecte s'anomena cadena i correspon a un conjunt de 10 DotStar (primer valor dins el parèntesi) connectats a les pota 12 (dades) i 6 (rellotge) del microcontrolador. El quart paràmetre (DOTSTAR_BRG) indica quin tipus de DotStar fem servir. Els que estan actualment disponibles es corresponen amb els indicats en el programa d'exemple. Si no dóna el resultat esperat podem provar de canviar l'ordre de les lletres B, R i G.

Encara que no és imprescindible, es recomana inicialitzar els DotStar de la cadena. Això ho podem fer a la inicialització (setup) del programa amb les següents instruccions:

void setup() {
	cadena.begin();  // Inicialitza els DotStar				
	cadena.show();
}

També podem controlar la brillantor del conjunt amb la instrucció següent, indicant un valor entre 0 (apagat) i 255.

	cadena.setBrightness(64);

El nostre programa s'encarregarà d'anar encenent els DotStar amb els colors desitjats. Per exemple les instruccions:

void loop() {
	cadena.setPixelColor(0, 255, 0, 0);  // LED 0 vermell
	cadena.setPixelColor(1, 0, 255, 0);  // LED 1 verd
	cadena.show(); // Actualitza
	delay(1000);  // Espera un segon
	cadena.setPixelColor(0, 0, 255, 0);  // LED 0 verd
	cadena.setPixelColor(1, 0, 0, 255);  // LED 1 blau
	cadena.show(); // Actualitza
	delay(1000);  // Espera un segon
	cadena.setPixelColor(0, 0, 0, 255);  // LED 0 blau
	cadena.setPixelColor(1, 255, 0, 0);  // LED 1 vermell
	cadena.show(); // Actualitza
	delay(1000);  // Espera un segon
}

Les dues primeres instruccions serveixen per indicar el color d'un LED concret. El primer paràmetre és el número de LED (0 és el més proper al microcontrolador, 1 el segon, etc.) i els altres tres són la codificació RGB del color, és a dir les quantitats de vermell, verd i blau desitjades (valors entre 0, apagat, i 255). La tercera instrucció transfereix de cop tots els canvis; d'aquesta manera, tots els LED canviaran simultàniament. Després d'un segon, es modifiquen els colors seguint una seqüència.

Aquest mètode és senzill però implica anar definint els colors cada cop a base de tres nombres. Hi ha una altra manera més compacta que consisteix en definir una variable d'un tipus específic que guardi un color concret.

#include <Adafruit_DotStar.h>
#define NUMLED 30
#define DATA 12
#define CLOCK 6
Adafruit_DotStar cadena = Adafruit_DotStar(NUMLED, DATA, CLOCK, DOTSTAR_BRG);
uint32_t groc = cadena.Color(255, 255, 0);  // Defineix el color groc
void setup() {
	cadena.setBrightness(64);
	cadena.begin();  // Inicialitza els DotStar				
	cadena.show();
}
void loop() {
	cadena.setPixelColor(0, 255, 0, 0);  // Pixel 0 vermell
	cadena.setPixelColor(1, 0, 255, 0);  // Pixel 1 verd
	cadena.show(); // Actualitza
	delay(1000);  // Espera un segon
	cadena.setPixelColor(0, 0, 255, 0);  // Pixel 0 verd
	cadena.setPixelColor(1, 0, 0, 255);  // Pixel 1 blau
	cadena.show(); // Actualitza
	delay(1000);  // Espera un segon
	cadena.setPixelColor(0, 0, 0, 255);  // Pixel 0 blau
	cadena.setPixelColor(1, groc);  // Pixel 1 groc
	cadena.show(); // Actualitza
	delay(1000);  // Espera un segon
	cadena.setPixelColor(0, groc);  // Pixel 0 groc
	cadena.setPixelColor(1, 255, 0, 0);  // Pixel 1 vermell
	cadena.show(); // Actualitza
	delay(1000);  // Espera un segon
}

El següent programa per a CircuitPython encén primer els quatre primers LED d'una tira amb color blanc. La instrucció fill dóna color a tots els LED de la tira (que s'han definit). Després els posa amb els colors vermell, verd, blau i groc i seguidament torna a començar. Per al color groc hem creat una variable i, en canvi, els altres els entrem directament.

La tira té el born CI (rellotge) connectat a la pota A4 i el DI (dades) a la pota A5.

import time
import adafruit_dotstar
import board
num_leds = 4            # Nombre de LED que fem servir
groc = (255, 150, 0)    # Color groc
leds = adafruit_dotstar.DotStar(board.A4, board.A5, num_leds, brightness=0.1, auto_write=False)
while True:
    leds.fill((255, 255, 255))    # Tots de color blanc
    leds.show()                   # Envia el color als LED
    time.sleep(0.5)               # Retard
    leds[0] = (255, 0, 0)         # Vermell
    leds[1] = (0, 255, 0)         # Verd
    leds[2] = (0, 0, 255)         # Blau
    leds[3] = groc                # Groc
    leds.show()                   # Envia el color als LED
    time.sleep(0.5)               # Retard

 

 

 

En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.