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.
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 😉
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.
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:
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 } }