Hola a todos,
hace unas semanas compré esta tira de led programable. Está basada en el chip WS2812 y lo que quiero hacer con ella es simular un cuenta revoluciones que posteriormente usaré en un dashboard que estoy diseñando para mis simuladores de coches.
Espero poder mostraros en breve una prueba de la tira de led funcionando con un juego.
La tira de led funciona a 5 Voltios y la hace perfecta para trabajar con arduino, a no ser, que usemos una tira de led demasiado larga que necesitaría una alimentación externa. Con esta tira podemos iluminar y cambiar de color cada led individualmente.
Para este ejemplo necesitamos:
- Tira de led W2812
- Arduino Uno
- Potenciometro
- Cables varios
Vamos a simular que nuestro potenciometro es el acelerador del coche y a medida que aceleramos se iluminan leds y cambian de color, este "programita" también nos sirve para aprender a manejar está tira de led.
Este es el esquema de conexiones que he utilizado:
Y este es el código, antes deciros que necesitáis descargar la librería Adafruit NeoPixel y añadirla a vuestro editor de arduino y os aconsejo que os leáis la documentación asociada ya que es bastante clara y nos ayuda a usar esta tira de led
#include <Adafruit_NeoPixel.h>
#include <avr/power.h>
//Designamos nuestro pin de datos
#define PIN 6
//Designamos cuantos pixeles tenemos en nuestra cinta led RGB
#define NUMPIXELS 10
//Definimos el número de pixeles de la cinta y el pin de datos
// Parámetro 1 = número de pixeles de la cinta
// Parámetro 2 = número de pin de datos del Arduino
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
const byte Pot = A0;
int val=0;
// IMPORTANTE: Para reducir el riesgo de dañar los pixeles de la cinta, añada un condensador de 1000 uF a través de
// los cables de alimentación de la cinta, agregue una resistencia de 300-500 Ohm en la entrada de datos del primer pixel
// Y reduzca la distancia entre Arduino y el primera pixel.
// Evite realizar conexiones en el circuito vivo si lo va a hacer, conecte GND primero.
void setup() {
// Inicializamos nuestra cinta led RGB
pinMode(Pot, INPUT); //Marcamos el pin como entrada
pixels.begin(); //inicializamos la tira de led
}
void loop() {
//Definimos nuestras variables de tipo uint32 para cada color que utilizaremos
// pixels.Color toma valores en RGB, desde 0,0,0 hasta 255,255,255
uint32_t rojo = pixels.Color(150,0,0); //declaramos los colores que queremos usar en varaiables
uint32_t verde = pixels.Color(0,150,0);
uint32_t azul = pixels.Color(0,0,150);
int delayval = 5; // Pausa de cincuenta milisegundos
int a;
int i;
int control=0;
val=analogRead(Pot);
i=map(val, 0,1023 ,0,9);
if(control<=i){
switch(i){
case 0: pixels.setPixelColor(i, verde); break;
case 1: pixels.setPixelColor(i, verde); break;
case 2: pixels.setPixelColor(i, verde); break;
case 3: pixels.setPixelColor(i, verde); break;
case 4: pixels.setPixelColor(i, azul); break;
case 5: pixels.setPixelColor(i, azul); break;
case 6: pixels.setPixelColor(i, azul); break;
case 7: pixels.setPixelColor(i, rojo); break;
case 8: pixels.setPixelColor(i, rojo);pixels.setPixelColor(i+1, rojo); break;
case 9: for(int a=0;a<NUMPIXELS;a++){
pixels.setPixelColor(a, rojo); // Brillo moderado en rojo
//pixels.show(); // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
}
for(int a=0;a<NUMPIXELS;a++){
pixels.setPixelColor(a, azul); // Brillo moderado en azul
pixels.show(); // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
}break;
}
pixels.show(); // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
control=i;
}
if(control>=i){
pixels.setPixelColor(i+1, 0,0,0);
control=i;
}
}
y aquí os dejo un vídeo de como funciona.