Controla la Reproducción de Música con tu Mando a Distancia: Un Proyecto Simple con Arduino
Componentes y Suministros
- Arduino UNO × 1
- Mando a distancia (genérico) × 1
- Receptor IR (genérico) × 1
- Zumbador (buzzer) × 1
- Pantalla LCD Estándar Adafruit 16x2 Blanco sobre Azul × 1
- Potenciómetro rotativo (genérico) × 1
- Resistencia 221 ohm × 1
Aplicaciones y Servicios Online
- Arduino IDE
Sobre este Proyecto
¡Hola comunidad de Hackster! Soy Simone Adobs y este es mi segundo proyecto publicado en este sitio.
La Lógica del Proyecto
El funcionamiento es muy sencillo:
- Toma tu mando a distancia y selecciona la melodía que quieres reproducir;
- Arduino con el zumbador reproducirá la melodía;
- En la pantalla LCD podrás ver la nota musical que se está reproduciendo.
Explicación del Código
Este es un ejemplo de melodía, todas las melodías están escritas de esta forma:
void melody_example() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Título de la canción");
delay(1000);
lcd.clear();
nota_mi(duracion,pausa); //nota musical
nota_do(duracion,pausa); //nota musical
lcd.clear();
delay(100);
Reset_AVR(); //Este comando reinicia el Arduino sin pulsar ningún botón
}
Para usar el comando "Reset_AVR()", debes incluir este código al principio del sketch:
#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
Así es como Arduino entiende qué melodía debe reproducirse:
if (result==12495) { //12495 es el código que mi mando envía al pulsar el botón 1
melody_1();
} else if (result==6375) { //6375 es el código del botón 2
melody_2();
} else if (result==31365) { //31365 es el código del botón 3
melody_3();
} else if (result==4335) { //4335 es el código del botón 4
melody_4();
}
Esta es la función para reproducir una nota individual:
void nota_ejemplo(int duracion, int pausa) {
shut(); //Llama a una función que explicaré abajo
lcd.setCursor(0, 0);
lcd.print("Ejemplo "); //Imprime el nombre de la nota musical
NewTone(11,262,duracion); //11->Pin del zumbador - 262->código de la nota
delay(pausa); //espera algunos milisegundos
}
¿Quieres detener la melodía mientras se reproduce?
No hay problema, gracias a la función "shut()" puedes detener la melodía en cualquier momento.
Esta es la función "shut()":
void shut() {
if (irrecv.decode(&results)) { //Recibe el código del botón pulsado
result=results.value, HEX; //Guarda el código recibido
Serial.println(result);
if (result==-23971) { //-23971 en mi mando representa el botón de apagado
Reset_AVR(); //Reinicia Arduino
}
}
irrecv.resume(); //Permite a Arduino recibir un nuevo código del mando
}
Espero que os guste este proyecto y, si es así, echad un vistazo a mi proyecto anterior.
¡Que tengáis un buen día!
Simone desde Italia <3
Código
Reproducir Melodía (C/C++)
Copia este código en el Arduino IDE:
#include <LiquidCrystal.h>
#include <IRremote.h>
#include <NewTone.h>
#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
#define buzzer 11
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
int result;
int RECV_PIN=2;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("-----Elige-----");
lcd.setCursor(0,1);
lcd.print("----Una Canción!!----");
pinMode(buzzer, OUTPUT);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
result=results.value, HEX;
Serial.println(result);
if (result==12495) { ode(); }
else if (result==6375) { london(); }
else if (result==31365) { fur(); }
else if (result==4335) { pirate(); }
irrecv.resume();
}
delay(100);
}
// Funciones para las melodías: Fur Elise, London Bridge, Ode to Joy, He's a Pirate
// ... (código completo disponible en el proyecto original)
void shut() {
if (irrecv.decode(&results)) {
result=results.value, HEX;
Serial.println(result);
if (result==-23971) { Reset_AVR(); }
}
irrecv.resume();
}
// Funciones para cada nota musical (Do, Do#, Re, Re#, Mi, Fa, Fa#, Sol, Sol#, La, La#, Si)
void nota_do(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("Do "); NewTone(11,262,duracion); delay(pausa); }
void nota_doz(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("Do # "); NewTone(11,277,duracion); delay(pausa); }
void nota_re(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("Re "); NewTone(11,294,duracion); delay(pausa); }
void nota_rez(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("Re # "); NewTone(11,311,duracion); delay(pausa); }
void nota_mi(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("Mi "); NewTone(11,330,duracion); delay(pausa); }
void nota_fa(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("Fa "); NewTone(11,349,duracion); delay(pausa); }
void nota_faz(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("Fa # "); NewTone(11,370,duracion); delay(pausa); }
void nota_sol(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("Sol "); NewTone(11,392,duracion); delay(pausa); }
void nota_solz(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("Sol # "); NewTone(11,415,duracion); delay(pausa); }
void nota_la(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("La "); NewTone(11,440,duracion); delay(pausa); }
void nota_laz(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("La # "); NewTone(11,466,duracion); delay(pausa); }
void nota_si(int duracion, int pausa) { shut(); lcd.setCursor(0, 0); lcd.print("Si "); NewTone(11,494,duracion); delay(pausa); }
Esquemáticos
Diagrama de conexiones disponible en el proyecto original (archivo .fzz y imagen PNG).
Proceso de manufactura
- Capturar comandos de mando IR en Raspberry Pi sin LIRC: enfoque Python UART
- Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
- Cámara de Seguridad con Detección de Movimiento ESP32 para Discord
- Proyecto Dados Digitales Arduino: Construye tu Propio Generador de Números Aleatorios con LCD
- Construye tu Propio Juego de Ruleta de 37 LEDs con Arduino Nano
- Mando a Distancia TV Personalizado con Arduino UNO: Alimentado por Batería, Carcasa Impresa en 3D
- Monitoriza la Temperatura de tu Hogar desde Cualquier Lugar con Integración Arduino Cloud
- ATtiny85 Mini Arcade: Snake – Construye una Consola Portátil OLED
- Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D
- Controlar un LED de Arduino con Cortana vía Bluetooth en Windows 10
- Robot pinza controlado remotamente para manipulación de precisión