Crear música con Arduino y Buzzer o zumbador

En esta ocasión te mostraré qué es y cómo puedes utilizar un buzzer (zumbador) con tu placa Arduino e incluso crear música con él.

¿Qué es un buzzer o zumbador?

Como su propio nombre nos lo indica, un zumbador es un dispositivo que creará un sonido al alimentarlo con la señal adecuada. Estos tipos de bocinitas se basan en el efecto piezoeléctrico. Los piezoeléctricos son materiales que al recibir una señal adecuada de voltaje producen pequeños movimientos. Para aprovechar este principio, los buzzer incluyen dos pequeñas placas una metálica y una cerámica, para que cuando se le imprima un voltaje las placas se muevan y cuando se quite el voltaje, las placas regresen a su posición original. Bien, y ¿cómo se produce el sonido?

Para producir sonido, es necesario que el voltaje se inserte y se quite de manera continua, a una determinada frecuencia, esto hará que las placas se muevan y regresen tantas veces por segundo como sea la frecuencia de la señal de voltaje. Entonces, el sonido que emite depende de la frecuencia de la señal que insertamos.

Si por ejemplo, insertamos una señal de 1 kHz, obtendremos una vibración de 1000 veces por segundo, obteniendo un sonido de frecuencia de 1 kHz como se muestra en la imagen a continuación:

Señal de 1 kHz con ciclo útil del 50%.
Señal de 1 kHz con ciclo útil del 50%.

Si variamos el ciclo útil de esta señal; es decir, el tiempo que la señal está en alto, la frecuencia de la señal no la cambiaremos, por lo tanto el sonido emitido sería el mismo.

Señal de 1 kHz con ciclo útil del 20%.
Señal de 1 kHz con ciclo útil del 20%.

Entonces realmente no importa el ciclo útil de la señal, sino la frecuencia. Por lo que más adelante te muestro cómo variar la señal a insertar en el buzzer para producir distintos sonidos. Puedes echarle un vistazo al artículo donde aprendimos más sobre señales PWM.

Tipos de buzzer

Existen dos tipos de zumbadores:

  1. Pasivos
  2. Activos

Los pasivos son aquellos que requieren tanto de la señal de voltaje como de la frecuencia de oscilación para producir el sonido. Entonces tenemos que tener en cuenta que nosotros elegimos la frecuencia de la señal para elegir el sonido que queremos que emita.

Los activos, ya incluyen un circuito oscilador, que es un circuito que genera la señal a una frecuencia determinada. Por esto, nosotros solamente tenemos que alimentar la pequeña bocina con el voltaje adecuado y listo, el buzzer ya está listo para emitir un sonido. Está fácil no?, la única cuestión es que el sonido no lo podremos cambiar, ya está definido por el oscilador interno.

Para diferenciarlos tenemos que alimentar al buzzer con el voltaje indicado, normalmente es de 5 VCD, si emite un sonido es activo, si no emite sonido es pasivo.

Buzzers pasivos.
Buzzers pasivos.

¿Cómo utilizamos el buzzer?

Los buzzer simplemente requieren una señal como las que te mostré anteriormente, esta señal deberá de ser de la amplitud (magnitud) indicada y a la frecuencia que nosotros necesitemos emitir el sonido, para el caso de los pasivos (que son los que utilizaremos). Normalmente la señal requerida es de 5 VCD, por lo que podremos emitirla desde nuestra placa Arduino.

Si bien estaremos utilizando una señal directamente de nuestra placa, es importante mencionar que la bocinita realmente se puede analizar como una pequeña resistencia, por lo que es importante limitar la corriente que le llegará, para así no dañarla. Para esto considera añadir una resistencia en serie con la bocina. También recuerda verificar la polaridad, al utilizar un voltaje de corriente directa, el buzzer tiene una terminal positiva y una negativa.

Al agregar una resistencia, el voltaje que le llegará al buzzer será menor de 5V por lo que el sonido emitido probablemente tenga poca intensidad o incluso puede llegar a no escucharse.

Yo te recomiendo utilizar un transistor como interruptor para alimentar tu buzzer y así no tienes que preocuparte por esta cuestión.

Si quieres aprender más sobre temas de electrónica como transistores, diodos, etcétera, déjame un comentario y prepararé material sobre ellos.

Es aquí donde los módulos comerciales entran en juego, ya que en su pequeña plaquita traen incorporado un transistor para asegurar que el voltaje que le llega al buzzer siempre sea de 5 V. Además, el transistor actúa muy rápido, por lo que podremos aplicar señales de alta frecuencia sin ningún problema.

Cómo utilizar un buzzer con Arduino

Para utilizarlo con tu placa Arduino es muy muy simple, solamente tienes que utilizar alguna salida digital con PWM, son las que tienen una tilde (~) en los pines, esto indica que la salida puede producir señales digitales de una frecuencia fija, pero con un ancho de pulso variable (recuerda visitar este artículo).

La conexión simplemente es la salida del pin al positivo de la bocina. Si estás utilizando un módulo buzzer como yo, simplemente necesitas conectar la salida del Arduino al pin I/O, y el GND del Arduino al GND del buzzer.

Módulo buzzer para Arduino.
Módulo buzzer para Arduino.

Para el primer ejemplo implementaremos el siguiente código:

Utilizaremos el pin digital 6 como salida para el buzzer, por lo que declaramos la variable pinBuzzer=6;

Simplemente tenemos que escribir con la función analogWrite(pinBuzzer,10); donde el 10 es el ciclo útil de la señal que necesitamos generar, este valor puede ir desde 0 a 255.

Si le enviamos una señal con un ciclo útil de 0 o 255, el buzzer no generará sonido, ya que la señal que le llegará será continua, 0 V o 5 V.

Las placas Arduino traen por defecto una frecuencia base para sus salidas PWM. De acuerdo con la información oficial, para la placa Arduino UNO, el pin 6 genera una señal de 980 Hz.

¿Cómo generar distintos sonidos con el buzzer?

Si la frecuencia de la placa es fija, cómo la cambiamos 🤨? Arduino trae por defecto una función que podemos utilizar para esto, se llama tone.

Esta función genera una señal cuadrada a una frecuencia específica con un ciclo útil del 50% (referencia). Para utilizarla tenemos la siguiente sintaxis: tone(pin, frecuencia, duración), ¿fácil no?

Para mostrarte como funciona te dejo el código:

Creamos variables para modificar los parámetros de manera muy sencilla. Si te fijas en la función loop, mandamos llamar a la función tone con una frecuencia de 850 Hz con duración de 300 ms, luego detenemos la ejecución por 3 segundos con el delay. Si bien la señal solamente dura 300 ms, si tu ejecutas este código, escucharás de manera constante el pitido, no se detendrá. Para detener el zumbido, tenemos que utilizar la función noTone(pin);

Fácil fácil no?

Crear notas musicales con Arduino y el buzzer

Ahora vamos a lo interesante, si ya sé cómo cambiar la frecuencia, ¿puedo insertar cualquier frecuencia? ¡Claro que sí!!

Fíjate en este pequeño ejemplo, vamos a investigar cuáles son las frecuencias de las notas musicales básicas: do, re, mi, fa, sol, la y si.

Claro ya te las tengo listas:

Do = 261 Re = 293 Mi = 329 Fa = 349 Sol = 392 La = 440 Si = 493

Las frecuencias que utilizaré están redondeadas, ya que la frecuencia exacta lleva décimas, pero esta diferencia no es perceptible al oído humano, a menos que tengas oído absoluto, pero eso lo dejamos para otro día 😎

Entonces, modificamos nuestro código:

He creado las variables de acuerdo con el nombre de la nota y su frecuencia. Con esto, simplemente mando llamar a la función tone, enviándole el pin, la nota y la duración, creando un retardo después de cada función para posteriormente cambiar el tono.

Al ejecutar este programa, escucharás las notas musicales básicas, tu puedes agregar todas las que quieras.

Crear una canción con buzzer y Arduino

Ya te estarás imaginando lo que podemos lograr, vamos a hacer música 🎼🎶

Simplemente tenemos que acomodar las notas y su duración para que tengan una congruencia o cadencia para finalmente formar una canción. Yo te recomiendo que le hagas como te muestro a continuación.

He creado variables llamadas negra y blanca, con duraciones de 100 y 200 ms cada una. Si no tienes nociones sobre música y notas musicales, no te preocupes, simplemente tienen que tener el doble de la duración para crear las pausas y duraciones de acuerdo con la canción que vamos a probar, en mi caso es la de «estrellita ⭐️»

Woo está muy largo este código? Ahorita te muestro como comprimirlo. Pero antes, pon atención a la duración de cada nota y al delay después de ella, a mí me funciona mejor cuando inserto un delay de la misma duración de la nota, para asegurarme de que se va a reproducir exactamente durante ese tiempo, posteriormente mediante la función de noTone detengo la ejecución de la nota por la misma duración. Fíjate que al final de cada bloque la duración de la última nota es blanca, del doble que la negra.

Comprimir el programa con una función

Para no hacer tan largo el código, podemos integrar en una función personalizada todas las partes que se repiten:

Básicamente estamos creando una función que no retorna nada llamada nota, donde tiene que llevar dos datos de entrada, uno para indicarle la nota y otra para indicarle la duración. Ya dentro de la función simplemente sustituimos los valores para reproducir la nota con esa duración, hacer el retardo, detener la reproducción, otro retardo y listo.

¿Te está gustando este artículo?

Te invito a descargar totalmente gratis la Guía de Inicio en Arduino

Encontrarás mucha información extra, conceptos y sobre todo podrás llevarla contigo en todo momento


¿Qué te ha parecido el tutorial de hoy, te gustó, en qué lo vas a utilizar?

¡Déjame todos los comentarios que quieras, compárteme tus proyectos y todas las dudas que resulten!

¡Hasta la próxima!

Recuerda visitar nuestras redes sociales

Etiquetas:

Deja un comentario