- Hardware requerido:
- Comprender la función Tone () de Arduino:
- El archivo de encabezado pitches.h :
- Tocando notas musicales en Arduino:
- Esquema y hardware:
- Explicación del programa Arduino:
- Funcionamiento de este circuito Arduino Melody Player:
Arduino es una excelente manera de simplificar y acelerar sus proyectos de microcontroladores, gracias a su comunidad de desarrolladores que han hecho que casi todo parezca simple. Hay muchos proyectos Arduino aquí para que pruebes y te diviertas. Algunos de sus proyectos pueden necesitar alguna acción sonora para notificar algo o simplemente para impresionar a los espectadores. ¿Qué pasaría si te dijera que casi cualquier tema musical que se pueda tocar en un piano se puede imitar en tu Arduino con la ayuda de un programa simple y un altavoz Piezo económico?
En este tutorial aprenderemos lo simple y fácil que es Reproducir Melodía en Piezo Buzzer o Altavoz usando la función Arduino tone (). Al final de este tutorial podrás jugar algunos tonos famosos de Pirates of Caribbean, Crazy Frog, Super Mario y Titanic. También aprenderá a tocar cualquier pieza de música de piano con Arduino. Mira el video al final.
Hardware requerido:
- Arduino (cualquier versión - UNO se usa aquí)
- Piezo Speaker / Buzzer o cualquier otro altavoz de 8ohm.
- Tablero de circuitos
- Conexión de cables
- Apretar botones
- Resistencia de 1k (opcional)
Comprender la función Tone () de Arduino:
Antes de que podamos entender cómo funciona un tono () , debemos saber cómo funciona un zumbador piezoeléctrico. Podríamos haber aprendido sobre los cristales piezoeléctricos en nuestra escuela, no es más que un cristal que convierte las vibraciones mecánicas en electricidad o viceversa. Aquí aplicamos una corriente variable (frecuencia) por la cual el cristal vibra produciendo sonido. Por lo tanto, para hacer que el zumbador piezoeléctrico haga algo de ruido, tenemos que hacer que el cristal piezoeléctrico vibre, el tono y el tono del ruido dependen de qué tan rápido vibre el cristal. Por tanto, el tono y el tono pueden controlarse variando la frecuencia de la corriente.
Bien, entonces, ¿cómo obtenemos una frecuencia variable de Arduino ? Aquí es donde entra en juego la función tone (). El tono () puede generar una frecuencia particular en un pin específico. La duración del tiempo también se puede mencionar si es necesario. La sintaxis de tone () es
Sintaxis tono (pin, frecuencia) tono (pin, frecuencia, duración) Parámetros pin: el pin en el que generar el tono frecuencia: la frecuencia del tono en hercios - unsigned int duration: la duración del tono en milisegundos (opcional) - sin firmar largo
Los valores de pin pueden ser cualquiera de su pin digital. He usado el pin número 8 aquí. La frecuencia que se puede generar depende del tamaño del temporizador en su placa Arduino. Para UNO y la mayoría de las otras placas comunes, la frecuencia mínima que se puede producir es 31Hz y la frecuencia máxima que se puede producir es 65535Hz. Sin embargo, los humanos solo podemos escuchar frecuencias entre 2000 Hz y 5000 Hz.
El archivo de encabezado pitches.h :
Ahora, sabemos cómo producir algo de ruido usando la función arduino tone () . Pero, ¿cómo sabemos qué tipo de tono se generará para cada frecuencia?
Arduino nos ha proporcionado una tabla de notas que equipara cada frecuencia a un tipo de nota musical específico. Esta tabla de notas fue escrita originalmente por Brett Hagman, en cuyo trabajo se basó el comando tone () . Usaremos esta tabla de notas para reproducir nuestros temas. Si eres alguien familiarizado con las partituras, deberías poder darle algún sentido a esta tabla, para otros como yo, estos son solo otro bloque de código.
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define # NOTE_G1 49 #define NOTE_GS1 NOTE_define #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_2define # 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 247 #define_3 NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define #define NOTE_D5 587 #define NOTE_fine # 695 NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_Fine #define #define NOTE_D6 1175 #define NOTA_45E NOTA_DS680 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define_define #define NOTE_DS7 2489 #define760 #define NOTE_DS7 2489 #define760 NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
El código anterior se proporciona en el archivo de encabezado pitches.h en este archivo zip , solo necesita descargar e incluir este archivo en nuestro código Arduino como se indica al final de este tutorial o usar el código proporcionado en el archivo zip.
Tocando notas musicales en Arduino:
Para tocar una melodía decente usando Arduino, debemos saber qué constituyen estas melodías. Los tres factores principales necesarios para reproducir un tema son
- Valor de nota
- Duración de la nota
- Tempo
Tenemos el archivo de encabezado pitches.h para reproducir cualquier valor de nota, ahora debemos averiguar la duración específica de la nota para reproducirlo. El tempo no es más que la rapidez con la que se debe tocar la melodía. Una vez que conozca el valor de la nota y la duración de la nota, puede usarlos con el tono () como
tono (nombre de pin, valor de nota, duración de nota);
Para los tonos reproducidos en este tutorial, le he dado el valor de la nota y la duración de la nota dentro del archivo de encabezado "themes.h" con el que puede reproducirlos en sus proyectos. Pero si tienes un tono específico en tu mina y quieres reproducirlo en tu proyecto, sigue leyendo… De lo contrario, omite este tema y pasa al siguiente.
Para reproducir cualquier tono específico, debe obtener la partitura de esa música en particular y convertir la partitura al boceto de Arduino leyendo el valor y la duración de la nota. Si eres un estudiante de música sería pan comido para ti, de lo contrario dedicar un tiempo y romperte la cabeza como lo hice yo. Pero al final del día, cuando su tono suene en el zumbador piezoeléctrico, encontrará que su esfuerzo vale la pena.
Una vez que tenga el valor de la nota y la duración de la nota, cárguelos en el programa dentro del archivo de encabezado "themes.h" como se muestra a continuación
// ############## ** "ÉL ES UN PIRATA" Tema principal de Pirates of caribbean ** ############## // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4D4, NOTA_D4, NOTE_D4D4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_F4F, NOTA_D4F, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_4A4, NOTE_A4, NOTE_A4, NOTE_4A4, NOTE_ 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### End of He is a Pirate song ############# //
El bloque de código anterior muestra el valor de la nota y la duración de la nota del tema "Él es un pirata" de la película Piratas del Caribe. Puede agregar su tema de manera similar a esta.
Esquema y hardware:
El esquema de este proyecto del proyecto del generador de tonos Arduino se muestra en la siguiente figura:
La conexión es bastante simple, tenemos un altavoz piezoeléctrico que está conectado al pin 8 y a la tierra del Arduino a través de una resistencia de 1K. Esta resistencia de 1k es una resistencia limitadora de corriente, que se utiliza para mantener la corriente dentro de los límites seguros. También tenemos cuatro interruptores para seleccionar la melodía requerida. Un extremo del interruptor está conectado a tierra y el otro extremo está conectado a los pines 2, 3, 4 y 5 respectivamente. Los interruptores tendrán resistencias pull up habilitadas internamente mediante el software. Dado que el circuito es bastante simple, se puede conectar usando una placa de prueba como se muestra a continuación:
Explicación del programa Arduino:
Una vez que haya entendido el concepto, el programa Arduino es bastante sencillo. El código completo se proporciona al final del tutorial. Si no está familiarizado con la adición de archivos de encabezado, puede descargar el código como un archivo ZIP desde aquí y cargarlo directamente en su Arduino.
Los dos anteriores son los archivos de encabezado que deben agregarse. “Pitches.h” se usa para equiparar cada nota musical a una frecuencia particular y “themes.h” contiene el valor y la duración de la nota de los cuatro tonos.
#include "pitches.h" #include "themes.h"
Se crea una función para reproducir cada tono cuando sea necesario. Aquí, cuando se llama a la función Play_Pirates () , se reproducirá el tono "Él es un pirata". Esta función consiste en la función de tono que produce la frecuencia en el pin número 8. Se llama noTone (8) para detener la música una vez que se reproduce. Si quieres tocar tu propio tono, cambia Pirates_note y Pirates_duration a los nuevos valores de nota y duración que has guardado en el valor "themes.h"
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // convertir la duración al tono de retardo de tiempo (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Aquí 1.05 es el tempo, aumente para reproducirlo más lento delay (pauseBetweenNotes); noTone (8); }}
Los pines 2, 3, 4 y 5 se utilizan para seleccionar el tono particular que se reproducirá. Estos pines se mantienen altos de forma predeterminada utilizando las resistencias de extracción internas utilizando la línea de código anterior. Cuando se presiona el botón, se tira al suelo.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
El siguiente bloque de código se usa para reproducir la canción cuando se presiona un botón. Lee el valor digital de cada botón y cuando baja (cero) asume que el botón está presionado y reproduce el tono respectivo llamando a la función requerida.
if (digitalRead (2) == 0) {Serial.println ("Seleccionado -> 'Él es un pirata'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Seleccionado -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Seleccionado -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Seleccionado -> 'Él es un pirata'"); Play_Pirates (); }
Funcionamiento de este circuito Arduino Melody Player:
Una vez que su Código y Hardware estén listos, simplemente grabe el programa en su Arduino y debería poder reproducir el tono simplemente presionando los botones. Si tiene algún problema, eche un vistazo a su monitor en serie para depurarlo o use la sección de comentarios para informar el problema y estaré encantado de ayudarlo.
El funcionamiento completo del proyecto se muestra en el video a continuación. Espero que haya disfrutado del proyecto y lo use en algunos de sus proyectos o cree un nuevo tono para el proyecto Si es así, no dude en compartir su trabajo en la sección de comentarios.