tira led controlada con arduino

Tutorial tira LED RGB controlada con Arduino que reacciona a palmadas

Bienvenidos a un nuevo proyecto con Arduino. En este proyecto veremos como podemos programar y controlar una tira de LEDs RGB usando un controlador Arduino. Esta tira LED además reacciona al sonido como el de una palmada, generando un fantastico efecto visual.

Además, hablaremos de los diferentes materiales empleados en su construcción, se mostrará un esquema de conexiones y finalmente podréis encontrar el código para contruir tu propia tira LED.

Materiales empleados para controlar la tira LED

A continuación se describen los materiales empleados en la realización de este proyecto y para que sirve cada uno de ellos.

Arduino UNO y nano: Es el cerebro de nuestro proyecto, encargada de controlar todos los procesos del mismo mediante el código que encontrarás más adelante.

Protoboard: Tabla con orificios (pines) la cual está conectada internamente y usaremos para realizar nuestras conexiones para el proyecto.

Tira de LEDs RGB: La parte más visible del proyecto, usada para iluminar y generar fantasticos efectos visuales.

RobotUno PCB: PCB Diseñada por el equipo de Robot UNO. El proyecto puede realizarse sin la PCB pero su uso te facilitará mucho todas las conexiones.

Explicación, Objetivo y Funcionamiento del proyecto

Este proyecto consiste en la programación de una tira LED RGB que reacciona con el sonido. Un proyecto que quedará genial en la pared de tu dormitorio. Para ello, emplearemos una placa Arduino nano para poder controlar el encendido y apagado de todos los LEDs.

Componentes necesarios para el proyecto de la tira LED

Si estás interesado en realizar este proyecto, a continuación os dejamos una lista con los links a amazon España (ES) y amazon de Estados Unidos (US).

Kit iniciación ArduinoKit iniciación ArduinoESUS
Placa Arduino UnoPlaca Arduino UnoESUS
Tira LED RGBTira LED RGBESUS
Arduino NANOArduino NANOESUS
Cables Macho HembraCables Macho HembraESUS

Video explicación proyecto tira led con Arduino

Si lo que buscas es ver de una forma mucho más detallada de como realizar este proyecto desde el inicio hasta el final y una explicación del código, a continuación se muestra el video con dicho contenido, mucho mas visual y fácil de comprender. Y recuerda, si te gusta esta clase de contenido, no olvides suscribirte 😉

Esquema de conexiones Arduino para controlar la tira LED rgb

Una de las partes más importantes a la hora de realizar el montaje y conexión de los leds pasa por conectar correctamente los diferentes elementos. Con el fin de evitar errores en el montaje o conexiones erróneas, a continuación te dejamos el esquema de conexiones empleado para este proyecto.

Con este esquema de conexiones podrás usar directamente el código que puedes encontrar al final del post sin necesidad de hacer ninguna modificación.

Esquema de conexiones tira led Arduino

Archivos para fabricar tu propia PCB y controlar la tira LED

Si deseas tener tu propia PCB como la que se muestra en el video del proyecto. A continuación tedejamos los archivos necesarios y cuales son los pasos a seguir.

Si tienes alguna duda, en el video se muestran paso a paso todos los procedimientos para que puedas hacerlo tú mismo.

Descarga los gerbers para imprimir la PCB a continuación:

Descarga el CSV con las posiciones y orientaciones de cada componente:

Descarga el excel con la información de cada componente presente en la PCB:

Código de Arduino para la programación de la tira de leds RGB

A continuación se muestra el código de programación empleado específicamente para el proyecto de la tira led mostrado en el video de youtube. Los pines que vas a encontrar en el código son los mismos que encontrarás en el esquema de conexiones previamente mostrado.

Si todavía no tienes instalado Arduino y tienes dudas sobre cómo usar o instalar el entorno de programación empleado para Arduino, te dejamos un link de comó descargar el IDE de Arduino

//Tiral led programada by @RobotUNO

#include <Adafruit_NeoPixel.h>

int longitudCohete=20; //Cuantos pixeles de largo tiene cada cohete

int tiraLed=6;
int numLeds=180; //Numero total de leds que tiene tu tira led

int microfono=5; //Pin Microfono
int ldr=A5; //Pin Fotorresistencia

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(numLeds, tiraLed, NEO_GRB + NEO_KHZ800);

void setup() {
  pixels.begin();
  pixels.show();

  Serial.begin(115200);
  Serial.println("Proyecto tira led by RobotUNO");

  pinMode(microfono,INPUT);
  pinMode(ldr,INPUT);
}

int cohete1=200; //pixel fuera de la tira led
int cohete2=200;
int cohete3=200;
int cohete4=200;
int cohete5=200;
int cohete6=200;

int coheteNuevo=0;

void loop() {
  //Serial.println(digitalRead(microfono));
  //Serial.println(analogRead(ldr));

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }

  if (coheteNuevo==1){ //Si hay un cohete pendiente lo lanzo
    coheteNuevo=0; //Reinicio la variable cohete pendiente
    if(cohete1==200) cohete1=0;
    else if(cohete2==200) cohete2=0; 
    else if(cohete3==200) cohete3=0; 
    else if(cohete4==200) cohete4=0; 
    else if(cohete5==200) cohete5=0; 
    else if(cohete6==200) cohete6=0; 
    Serial.println("nuevo cohete detectado");
  }

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }

  pixels.clear();

  for(int largo=-longitudCohete ; largo<0 ; largo++){ //DIBUJO COHETE1 (Empieza desde -longitudCohete para que se vean salir los cohetes poco a poco por la base)
      pixels.setPixelColor(cohete1+largo,255,0,0); //(nºled,R,G,B) rojo  
  }

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }

  for(int largo=-longitudCohete ; largo<0 ; largo++){ //DIBUJO COHETE2
      pixels.setPixelColor(cohete2+largo,0,0,255); //(nºled,R,G,B) azul   
  }

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }

  for(int largo=-longitudCohete ; largo<0 ; largo++){ //DIBUJO COHETE3
      pixels.setPixelColor(cohete3+largo,0,255,0); //(nºled,R,G,B) verde  
  }

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }

  for(int largo=-longitudCohete ; largo<0 ; largo++){ //DIBUJO COHETE4
      pixels.setPixelColor(cohete4+largo,255,255,255); //(nºled,R,G,B) blanco
  }

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }

  for(int largo=-longitudCohete ; largo<0 ; largo++){ //DIBUJO COHETE5
      pixels.setPixelColor(cohete5+largo,0,0,255); //(nºled,R,G,B) rojo
  }

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }

  for(int largo=-longitudCohete ; largo<0 ; largo++){ //DIBUJO COHETE6
      pixels.setPixelColor(cohete6+largo,0,255,0); //(nºled,R,G,B) verde
  }

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }
  
  pixels.show();

  cohete1++;
  cohete2++;
  cohete3++;
  cohete4++;
  cohete5++;
  cohete6++;

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }

  if(cohete1>200) cohete1=200;
  if(cohete2>200) cohete2=200;
  if(cohete3>200) cohete3=200;
  if(cohete4>200) cohete4=200;
  if(cohete5>200) cohete5=200;
  if(cohete6>200) cohete6=200;

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }

  delay(1); //Velocidad de los cohetes

  if(digitalRead(microfono) == HIGH && cohete1>(longitudCohete+3) && cohete2>longitudCohete+3 && cohete3>longitudCohete+3 && cohete4>longitudCohete+3 && cohete5>longitudCohete+3 && cohete6>longitudCohete+3){ //Si se activa el microfono y no hay ningun cohete saliendo (para evitar que salga mas de uno a la vez)
    coheteNuevo=1; //Se pone un cohete pendiente
  }
}
Publicado en Otros.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *