top of page
image.png

¡TONOS Y MELODÍAS MONOFÓNICAS EN ARDUINO!

  • Foto del escritor: Mr T
    Mr T
  • 28 jul 2024
  • 4 Min. de lectura

Actualizado: 10 ago 2024

¡Hola a todos! El día de hoy les explicaré cómo crear sus propias melodías monofonicas con ayuda de nuestros Arduinos de una manera simple.


Para eso necesitaremos los siguientes materiales:


  1. Altavoz pequeño

  2. Arduino junto a la protoboard


El altavoz ideal sería un piezoeléctrico o Buzzer, cómo los que se pueden encontrar dentro de las tarjetas de navidad o cumpleaños musicales.


Sin embargo, en caso de que no cuenten con dicho altavoz piezoeléctrico, pueden intentar utilizar uno de membrana.


Pero es importante asegurarse de que tenga un consumo energético bajo, que puede ser hasta máximo 0.25 Watts. Cómo los que se encuentran dentro de juguetes, en especial los que tienen un precio bajo.


Si nuestro Arduino en promedio por pin puede entregar máximo 5v a 50 mA, podemos calcular la máxima cantidad de watts que puede proporcionar:


Watts = V * A


Watts = 5v * 0.05 A (convertimos los mA en A)


Watts = 0.25 W


Por lo que esos parlantes son lo máximo que podría en teoría soportar el Arduino


Aquí les pongo la imagen de cuáles me refiero:



¡Recuerden pelar bien los cables del altavoz para poder colocarlos en el protoboard!


¡¡¡IMPORTANTE!!!


Recuerden si deciden usar un parlante más potente, el sonido resultante será menor, dependiendo de la potencia, agregando además de que el Arduino no está construido para suministrar mucha potencia por pin, por lo que se podría dañar


En caso de que requieran utilizar un altavoz más potente u obtener más volumen es recomendable utilizar o construir un circuito amplificador de Audio conectado a una fuente de energía externa.


Pero para este experimento dirigido al uso de altavoces pequeños no superiores a 0.25 W y sonidos monofónicos, no será necesario un amplificador.


DIAGRAMA DE CONEXIONES


Aquí les dejo el diagrama, utilizaremos el pin 5, pero de la misma manera que con el LED, pueden usar cualquier pin:


ree

Aquí tienen una imagen de ejemplo dentro de la protoboard:


ree

CÓDIGO PARA EL ARDUINO


Muy bien, ahora que ya están las conexiones, podemos proceder a la parte de programación, donde utilizaremos la función: tone(), la cual funciona en cualquier pin digital del Arduino.


A continuación, voy a presentar un código base que pueden utilizar dentro de sus proyectos musicales, es recomendable definir variables para que sea más fácil trabajar al programar, pero eso ya depende de ustedes:

//c++

int parlante = 5; //usaremos el pin 5 y creamos una variable para identificar más facil el pin, con el nombre: parlante, o el que les guste.


void setup() {

pinMode(parlante, OUTPUT);

}


void loop() { //hará que la melodía se repita siempre

tone(parlante, 92, 500);

delay(500);

tone(parlante, 523, 500);

delay(500);

}

EXPLICACIÓN FUNCIÓN TONE


para dominar la función tone() debemos conocer sus partes:


"tone(pin, xx, yy)"


dentro de esta función:


pin es el nombre de la variable o número de pin donde conectarás el altavoz.


xx representa el tono o nota musical en frecuencia (hz), dejaré más abajo el número de frecuencia de las notas musicales en la octava 4.


yy representa el tiempo de duración en milisegundos de la reproducción de la nota que especificaste, pero no se confundan, no es lo mismo ni remplaza a la función delay().


CASOS


Caso 1

Si pones una menor duración en el delay() en comparación con la que pusiste en tone(), el Arduino le dará prioridad al delay(), cortando el sonido en el momento que especificaste el delay(), ya que, al pasar al siguiente tono, el anterior se bloqueará.

  tone(parlante, 92, 1000);

  delay(500); //el Arduino esperará a que pase este tiempo y pasará a la siguiente nota,

  tone(parlante, 523, 1000); //aunque faltaban 500ms más del anterior tono, al venir este, reemplazará inmediatamente al tono anterior.

  delay(1000);

Caso 2

Si no incluyes delay() en el código y directamente pones por ejemplo 2 funciones tone() seguidas, el Arduino reproducirá solo la segunda línea de tone(). por lo cual no tiene sentido hacer eso.

tone(parlante, 92, 1000);

  tone(parlante, 523, 1000); //esta reemplazará inmediatamente al primer tono

  delay(1000)

Si quieres un sonido polifónico, la mejor opción es utilizar 2 altavoces conectados a diferentes pines.


Caso 3

Si pones una menor duración en tone() en comparación con delay(), el Arduino contará el tiempo de ambas funciones simultáneamente, cuando se acabe el tiempo de tone(), el altavoz dejará de sonar, y el Arduino esperará lo que falta en delay() para seguir a la siguiente línea.


Por ejemplo, si el altavoz tiene programado en tone() sonar 500 ms y el delay() de la línea siguiente tiene una duración de 1000ms (1 sec), cuando pasen 500ms el altavoz dejará de sonar, pero el Arduino esperará 500 ms restantes para seguir a la siguiente línea.

  tone(parlante, 92, 500); //durante los primeros 500 ms el parlante o altavoz sonará

  delay(1000); //pasados los 500 ms anteriores, el altavoz dejará de sonar y el Arduino esperará los 500 ms restantes para la siguiente línea.

  tone(parlante, 523, 1000);

  delay(1000);


NÚMERO DE FRECUENCIAS PARA CADA NOTA - OCTAVA 4


Do (C4): 261,63 Hz ---> 262

Re (D4): 293,66 Hz ---> 294

Mi (E4): 329,63 Hz ---> 330

Fa (F4): 349,23 Hz ---> 349

Sol (G4): 392,00 Hz ---> 392

La (A4): 440,00 Hz ---> 440

Si (B4): 493,88 Hz ---> 494


Si quieren otras octavas o notas, puedes encontrar las frecuencias en esta página:


CÓDIGO DE CANCIÓN DE EJEMPLO


Este es un ejemplo de una melodía de navidad que cree, se repite en loop infinito, podría incluso mejorar los tiempos, pero bueno, por si alguien quiere probarla.


int speakerPin = 5; //solo cambié el nombre


void setup() {

  pinMode(speakerPin, OUTPUT);

}


void loop() {

tone(speakerPin, 330, 500); // Mi (E)

delay(500);

tone(speakerPin, 330, 500); // Mi (E)

delay(500);

tone(speakerPin, 330, 500); // Mi (E)

delay(1000);


tone(speakerPin, 330, 500); // Mi (E)

delay(500);

tone(speakerPin, 330, 500); // Mi (E)

delay(500);

tone(speakerPin, 330, 500); // Mi (E)

delay(1000);


tone(speakerPin, 330, 500); // Mi (E)

delay(500);

tone(speakerPin, 392, 500); // Sol (G)

delay(500);

tone(speakerPin, 262, 500); // Do (C)

delay(500);

tone(speakerPin, 294, 500); // Re (D)

delay(500);

tone(speakerPin, 330, 500); // Mi (E)

delay(500);

tone(speakerPin, 330, 500); // Mi (E)

delay(500);

tone(speakerPin, 330, 500); // Mi (E)

delay(1000);

}


VIDEO DEMOSTRATIVO


Aquí hay un video demostrativo, mirenlo: https://youtube.com/shorts/zkJGVZoTLqc?feature=share


[publicar enlace]


Este ha sido Mr T para Power_to_the_buzzer. Si tienen alguna duda, no olviden preguntar. Hasta luego.

Comentarios


POWER TO THE BUZZER

bottom of page