Icono del sitio Home Assistant Fácil

Zumbador o buzzer con Arduino y librería EasyBuzzer

Efectos de sonido con Arduino buzzer y la librería EasyBuzzer

A estas alturas entiendo que ya habrás utilizado un zumbador o buzzer con Arduino. Incluso puede que hayas utilizado la librería Tone para hacer sonar algún que otro pitido.

Yo creo que fue de las primeras cosas que hice después de encender un LED. Sin embargo, no había encontrado una librería que realmente sacara todo el jugo a un zumbador o buzzer con Arduino.

En este tutorial te voy a enseñar una de las mejores librerías que he encontrado para utilizar con un zumbador o buzzer con Arduino. Esta librería se llama EasyBuzzer.

Pero antes de meternos de lleno en ver qué posibilidades nos ofrece, déjame que hable de qué es un zumbador y cómo podemos trabajar con un buzzer con Arduino.

¿Qué es un zumbador o buzzer?

Un buzzer o zumbador es un dispositivo que es capaz de enviar avisos a través del sonido. Puede ser mecánico, electromecánico o piezoeléctrico.

Los zumbadores típicos son los piezoeléctricos vamos, los que vienen en cualquier kit de Arduino.

El zumbador piezoeléctrico se llama así porque en el centro del componente hay un elemento piezoeléctrico. Estos elementos sufren un fenómeno conocido como piezoelectricidad que ocurre en determinados cristales.

Consiste en que determinados materiales (cristales), al ser sometidos a tensiones mecánicas, producen una diferencia de potencial.

Esto también ocurre a la inversa, al someterse a un campo eléctrico, se deforman.

Imagen obtenida de la Wikipedia

En resumen, si se aplica una señal eléctrica al material este se deforma y al deformarse produce un sonido. Esta es la base del zumbador o buzzer.

Ahora bien, si desde un pin de Arduino conseguimos suministrar una tensión que varíe con el tiempo como una señal PWM, podremos reproducir diferentes sonidos.

A su vez, los zumbadores o buzzer piezoeléctricos se dividen en dos grandes grupos: activos y pasivos.

La diferencia entre estos dos tipos de zumbadores o buzzers es su funcionamiento interno. Veamos un poco por encima cómo funciona cada uno de ellos.

Zumbador o buzzer activo

Un zumbador activo tiene un circuito adicional que lo hace más fácil de usar. Este circuito es un oscilador que hace que el zumbador suene tan pronto como se conecte a la alimentación.

Los zumbadores activos se utilizan en muchos dispositivos como ordenadores, impresoras, copiadoras, alarmas, juguetes eléctricos o teléfonos.

Zumbador o buzzer pasivo

Por el contrario, el zumbador pasivo el oscilador interno desaparece y su funcionamiento depende de la una señal externa. Esta señal debe ser una señal cuadrada.

Además, es necesario que esta señal tenga diferentes frecuencias.

Es como el altavoz que tienes en casa y que utiliza el electromagnetismo. Este tipo de dispositivos necesitan una señal que cambie en el tiempo para poder emitir un sonido.

¿Cómo saber si un zumbador o buzzer es activo o pasivo?

Pues la manera más simple de distinguir un zumbador activo de uno pasivo es conectarlos al pin de 5V de Arduino.

Los zumbadores tienen polaridad es decir, tienen un terminal positivo y otro negativo. Normalmente, el terminal positivo es más largo que el negativo al igual que ocurre con los LEDs. Además, suelen llevar una inscripción que indica cual es el terminal positivo.

Si al conectar el zumbador o buzzer suena es que es activo. Si no suena o hace un chasquido, es que es un zumbador o buzzer pasivo.

El típico buzzer que viene en los kit de Arduino suele ser pasivo. Son más pequeños en tamaño (esto no es determinante), son más baratos y pueden emitir diferentes tonos dependiendo de la frecuencia de la señal de entrada.

En cualquier tienda de Internet como Amazon, lo puedes encontrar por unos cuantos céntimos. Son realmente económicos.

Todo esto está bien pero ¿cómo conectar un zumbador o buzzer con Arduino?

Cómo conectar un zumbador o buzzer con Arduino

La conexión de un zumbador o buzzer con Arduino no puede ser más simple. Sólo tienes que conectar el positivo a un pin digital PWM y el negativo a GND.

En ocasiones, se pone una resistencia entre el pin digital y el zumbador o buzzer. Esto se hace debido a que la intensidad máxima que puede suministrar un Arduino UNO, un Arduino MEGA o un Arduino Nano por cada uno de sus pines es de 40 mA.

Por esta razón necesitamos limitar la corriente que pasa a través del zumbador, para no sobrecargar el microcontrolador. Imagínate todos los pines digitales de Arduino suministrando el máximo, 40 mA.

Un zumbador típico de 16 Ω puede utilizar directamente una resistencia en serie de 100 Ω o 200 Ω. Esto se traduce en una intensidad media de entre 10-20 mA con picos de 20-40 mA lo cual es menos que el máximo de 40 mA.

Por contra, al utilizar una resistencia además de reducir la intensidad, también reduce el volumen del sonido. Por lo tanto, cuanto más alta sea la resistencia más bajo se escuchará el sonido.

Debes hacer coincidir la resistencia con el volumen deseado. Aún así, esta resistencia es opcional.

Por otro lado también se recomienda utilizar un transistor. Su función es la de interruptor. La gran parte del tiempo el zumbador o buzzer no emitirá ningún sonido.

Sin embargo, aunque no emita ningún sonido la corriente sigue fluyendo por el zumbador o el buzzer con el consecuente desperdicio de energía.

Además, se puede producir un sobrecalentamiento del propio zumbador o buzzer ya que funciona como una resistencia.

Para evitar esto se utiliza un transistor NPN o un transistor PNP.

Como todo en la vida, hay un camino fácil. Puedes adquirir un módulo donde viene integrada toda la electrónica: resistencia, transistor y buzzer.

Al igual que pasa con la resistencia, si conectas el zumbador sin el transistor funcionará igual pero ten en cuenta que estará gastando energía. Algo muy importante en proyectos que requieren bajo consumo como con el ESP8266.

A partir de aquí y teniendo en cuenta las posibles opciones que no son obligatorias como la resistencia y el transistor, vamos a suponer que tenemos un buzzer sin módulo.

Las conexiones del zumbador o buzzer con Arduino serían como se muestra en el siguiente esquema.

El terminal positivo se conecta al pin digital PWM 5 y el terminal negativo al pin de GND.

Más sencillo imposible.

Ahora bien, si lo dejamos así sería un poco complicado que el zumbador o buzzer con Arduino reproduzca algún sonido por sí solo. Para que eso ocurra hay que programarlo.

Lo más sencillo y completo es hacerlo con una librería. La que recomiendo es EasyBuzzer. Sin embargo, puedes utilizar una señal PWM básica para que reproduzca un sonido.

Prueba a cargar el siguiente código y escucha un sonido infernal :)

Ahora, cambia el valor de la variable salida y pon otro número entre el 0 y el 255. A qué suena diferente.

Es lo que he comentado antes, un zumbador o buzzer pasivo necesita una señal cuadrada. Si varías el voltaje, varía la frecuencia que reproduce.

Pero si realmente quieres conseguir efectos de sonido chulos con tu zumbador o buzzer con Arduino, lo mejor es utilizar la librería EasyBuzzer.

Librería EasyBuzzer para buzzer con Arduino

La típica librería que se utiliza para hacer sonar un zumbador o buzzer con Arduino es la librería Tone. No está mal pero da poco juego.

Buscando alternativas dí con una librería que está muy bien. Se llama EasyBuzzer y, como no, es de código abierto. La puedes encontrar en GitHub.

La librería EasyBuzzer permite programar beeps (sonido que parpadea) totalmente configurables. Puedes configurar la duración del sonido, del silencio, cuantas veces se repite, etc…

Una de las funciones más interesantes de la librería EasyBuzzer es que reproduce los sonidos de forma asíncrona es decir, que no bloquea el código.

Más adelante veremos todas las posibilidades.

Vamos a empezar por el principio, instalando la librería en el IDE de Arduino. Abre el Administrador Bibliotecas que se encuentra en Programa/Incluir Librería/Administrar Bibliotecas.

En el Administrador Blibliotecas busca EasyBuzzer e instala la librería.

Esto instala el código necesario y los ejemplos. Suficiente para empezar a crear nuestros propios efectos de sonido con el zumbador o buzzer con Arduino. Pero antes, veamos las funciones principales de EasyBuzzer.

Funciones principales de EasyBuzzer

EasyBuzzer es una clase estática lo que quiere decir que no hace falta crear una instancia u objeto de la clase. Es como la librería Serial.

Directamente escribes la clase (EasyBuzzer) y luego llamas a la función correspondiente. Veamos alguna de estas funciones.

EasyBuzzer.setPin()

Esta función configura el pin digital donde está conectado el zumbador o buzzer con Arduino. Utilizar esta función es opcional ya que por defecto tiene configurado el pin 4.

En nuestro caso, hemos conectado el zumbador o buzzer con Arduino en el pin 5 por lo tanto, sí que necesitaremos utilizar la función para configurar el pin.

Más adelante veremos dónde se guarda la configuración por defecto de la librería.

Donde:

EasyBuzzer.beep()

Si quieres que el zumbador o buzzer con Arduino emita un pitido (beep), debes utilizar esta función. Se puede llamar de cinco maneras diferentes dependiendo del número de parámetros que admita.

Una función que puede ser llamada de diferentes maneras dependiendo el número de parámetros, en el argot de los programadores se dice que es una función o un método sobrecargado.

La primera sobrecarga del método admite un único parámetro.

Donde:

Esta función emite un pitido continuo hasta que se ejecute la función EasyBuzzer.stopBeep() que luego veremos.

La siguiente sobrecarga del método admite dos parámetros.

Donde:

Esta función ejecuta un pitido a una frecuencia específica un número de veces especificado por el parámetro beeps. La duración del pitido y el silencio está configurado por defecto.

Un beep corresponde a un pitido y a un silencio. Como verás luego, tanto el pitido como el silencio se pueden configurar.

La siguiente sobrecarga del método admite tres parámetros.

Donde:

Esta función hace sonar una serie de beeps a una frecuencia determinada como en el caso anterior. La novedad es que con esta función podemos hacer que cuando terminen de sonar la serie de beeps configurados, ejecute una función.

Esto es muy útil si quieres que se ejecute algo justos después de reproducir los sonidos con el zumbador o buzzer con Arduino.

La siguiente sobrecarga del método admite seis parámetros.

Donde:

Esta función hace sonar una serie de beeps a una frecuencia determinada. Hasta aquí no hay nada nuevo. La novedad es que se puede configurar el tiempo de sonido y de pausa del beep.

Además, se puede repetir la secuencia dejando una pausa entre cada secuencia.

La última sobrecarga del método admite siete parámetros.

Donde:

Esta función hace exactamente lo mismo que la función anterior pero además, ejecuta una función callback cuando terminan de sonar todas las secuencias.

EasyBuzzer.singleBeep()

La función EasyBuzzer.singleBeep() hace sonar un beep simple y, como ocurría con el método anterior, está sobrecargado. Hay dos formas de llamar a este método.

Si llamas al método con dos parámetros.

Donde:

Hace sonar un pitido (no es un beep ya que no tiene pausa) a una frecuencia y durante un tiempo determinado.

Y si llamas al método con tres parámetros.

Donde:

Igual que la función anterior pero además ejecuta una función callback cuando termina el sonido.

EasyBuzzer.stopBeep()

La función EasyBuzzer.stopBeep() para cualquier sonido que se esté reproduciendo por el zumbador.

Esta función no admite ningún parámetro.

EasyBuzzer.update()

La función EasyBuzzer.update() hace que la librería esté en funcionamiento constantemente. Se debe llamar en cada iteración del bucle loop() como veremos luego.

Ojo, si no llamas a esta función en el bucle loop() no sonará ningún sonido por el zumbador o buzzer con Arduino.

Y estas son las funciones más importantes de esta librería. Te animo a que sigas investigando el resto de funciones que no son tan importantes.

Ahora, vamos a ver un archivo que se instala con la librería y donde vienen las configuraciones por defecto.

Archivo Config.h librería EasyBuzzer

Muchas librerías suelen tener un archivo que se llama Config.h. Incluso nosotros mismos podemos hacer que nuestro programa tenga este archivo. Aquí suelen estar las configuraciones y parámetros por defecto que utiliza un programa o librería.

El nombre Config.h es una convención y significa configuración (en inglés configuration), pero puedes llamar a este archivo de configuración como quieras.

La librería Esasy Buzzer trae un archivo Config.h. Se incluye junto con el archivo de cabecera EasyBuzzer.h y el archivo de implementación EasyBuzzer.cpp.

Estos archivos están en la carpeta configurada por defecto en el IDE de Arduino en la carpeta libararies. Allí encontrarás una carpeta que se llama EasyBuzzer.

Si entras dentro verás la típica estructura de una librería. Los archivos que te he mencionado antes están dentro de la carpeta src.

El archivo que nos interesa es el que se llama Config.h.

Lo puedes editar con el Bloc de notas o con cualquier otro editor de texto. Yo te recomiendo Sublime Text y si quieres ir un poco más allá, PlatformIO.

Sea como sea, si abres el archivo encontrás el siguiente código.

Código obtenido de GitHub.

Estos son los valores por defecto que utiliza la librería EasyBuzzer. Sirve para que de una forma sencilla puedas reproducir un sonido con un zumbador o buzzer con Arduino.

Sin embargo, lo puedes modificar. Por ejemplo la constante DEFAULT_PIN tiene un valor de 4 lo que viene a decir que el pin que utiliza por defecto es el pin 4. Si quieres que sea el 5 lo único que debes hacer es cambiar el 4 por el 5.

La próxima vez que compiles y subas el código del zumbador o buzzer con Arduino, el pin por defecto será el 5. Y así con el resto de parámetros la duración del silencio, de la pausa o del sonido.

Prueba a cambiar algunos parámetros. No te preocupes por si lo estropeas, siempre puedes recurrir al código original de EasyBuzzer.

Ejemplo zumbador o buzzer con Arduino y la librería EasyBuzzer

Hasta ahora lo único que hemos hecho es reproducir un sonido con un zumbador o buzzer con Arduino a través de una señal PWM, pero se pueden hacer cosas más chulas.

El siguiente ejemplo te muestro cómo utilizar la librería EasyBuzzer para reproducir dos beeps con un zumbador o buzzer con Arduino.

Es un código muy sencillo.

Lo primero es importar la librería EasyBuzzer.h.

En la función setup(), después de configurar el monitor serie, se configura el pin del zumbador o buzzer llamando a la función EasyBuzzer.setPin(5).

Esto no haría falta si en el archivo Config.h has cambiado el pin por defecto de 4 a 5.

Lo siguiente es configurar el beep con una de las funciones que hemos visto anteriormente, EasyBuzzer.beep(…). En concreto utilizo la función que admite siete parámetros.

Donde:

Si te fijas en la función callback lo único que hay que hacer es poner void (porque no devuelve ningún valor) seguido del nombre de la función.

Este nombre tiene que coincidir con el nombre de la función que se ha dado al configurar el beep con EasyBuzzer.beep(…). La función callback no admite ningún parámetro.

Dentro de la función lo único que hago es mostrar por el monitor serie un mensaje indicando que el sonido ha terminado.

Por último, en la función loop() se hace la llamada a la función EasyBuzzer.update() que es la encargada de hacer las comprobaciones pertinentes para que la librería funcione.

Un error típico es no poner la llamada a esta función. Te darás cuenta porque no se sonará ningún sonido en el zumbador o buzzer con Arduino.

Ahora solo queda cargar el código a la placa y afinar bien el oído. Abre también el monitor serie para ver que cuando termine de hacer el beep, por el monitor serie sale el mensaje Sonido terminado.

Prueba a cambiar las configuraciones por ejemplo, cambia el número de ciclos de 1 a 5 ¿qué sucede?

Prueba el resto de configuraciones con tu zumbador o buzzer con Arduino y deja tus resultados y dudas en los comentarios de aquí abajo.

Salir de la versión móvil