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.
Tabla de contenidos
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.
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 ArduinoESUS |
Placa Arduino UnoESUS |
Tira LED RGBESUS |
Arduino NANOESUS |
Cables Macho HembraESUS |
¿Necesitas ayuda con algún proyecto?
- Prototipado y MVPs
- Arduino y ESP32
- Diseño de PCBs
- Diseño de piezas 3D
- Conexión Bluetooth
- Estudio de Viabilidad
- Optimización de costes
- Asesoría Técnica
- Internet de las Cosas
- Gestión de Patentes
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.
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.
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 } }