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.
Tabla de Contenidos
¿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:

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.

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:
- Pasivos
- 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.
¿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.
Para el primer ejemplo implementaremos el siguiente código:
1 2 3 4 5 6 7 8 9 10 |
int pinBuzzer = 6; void setup() { } void loop() { analogWrite(pinBuzzer, 10); } |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
int pinBuzzer = 6; int frecuencia = 850; int duracion = 300; void setup() { } void loop() { tone(pinBuzzer,frecuencia, duracion); delay(3000); } |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
int pinBuzzer = 6; int Do = 261; int Re = 293; int Mi = 329; int Fa = 349; int Sol = 392; int La = 440; int Si = 493; int duracion = 500; int retardo = 1000; void setup() { } void loop() { tone(pinBuzzer,Do, duracion); delay(retardo); tone(pinBuzzer,Re, duracion); delay(retardo); tone(pinBuzzer,Mi, duracion); delay(retardo); tone(pinBuzzer,Fa, duracion); delay(retardo); tone(pinBuzzer,Sol, duracion); delay(retardo); tone(pinBuzzer,La, duracion); delay(retardo); tone(pinBuzzer,Si, duracion); delay(retardo); } |
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 ⭐️»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
int pinBuzzer = 6; int Do = 261; int Re = 293; int Mi = 329; int Fa = 349; int Sol = 392; int La = 440; int Si = 493; int negra = 100; int blanca = 200; int retardo = 3000; void setup() { } void loop() { tone(pinBuzzer,Do, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Do, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Sol, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Sol, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,La, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,La, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Sol, blanca); delay(blanca); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Fa, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Fa, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Mi, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Mi, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Re, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Re, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Do, blanca); delay(blanca); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Sol, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Sol, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Fa, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Fa, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Mi, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Mi, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Re, blanca); delay(blanca); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Sol, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Sol, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Fa, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Fa, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Mi, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Mi, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Re, blanca); delay(blanca); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Do, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Do, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Sol, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Sol, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,La, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,La, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Sol, blanca); delay(blanca); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Fa, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Fa, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Mi, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Mi, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Re, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Re, negra); delay(negra); noTone(pinBuzzer); delay(negra); tone(pinBuzzer,Do, blanca); delay(blanca); noTone(pinBuzzer); delay(negra); delay(retardo); } |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
int pinBuzzer = 6; int Do = 261; int Re = 293; int Mi = 329; int Fa = 349; int Sol = 392; int La = 440; int Si = 493; int negra = 250; int blanca = 500; int retardo = 3000; void nota(int nota, int duracion){ tone(pinBuzzer,nota, duracion); delay(duracion); noTone(pinBuzzer); delay(duracion); } void setup() { } void loop() { nota(Do, negra); nota(Do, negra); nota(Sol, negra); nota(Sol, negra); nota(La, negra); nota(La, negra); nota(Sol, blanca); nota(Fa, negra); nota(Fa, negra); nota(Mi, negra); nota(Mi, negra); nota(Re, negra); nota(Re, negra); nota(Do, blanca); nota(Sol, negra); nota(Sol, negra); nota(Fa, negra); nota(Fa, negra); nota(Mi, negra); nota(Mi, negra); nota(Re, blanca); nota(Sol, negra); nota(Sol, negra); nota(Fa, negra); nota(Fa, negra); nota(Mi, negra); nota(Mi, negra); nota(Re, blanca); nota(Do, negra); nota(Do, negra); nota(Sol, negra); nota(Sol, negra); nota(La, negra); nota(La, negra); nota(Sol, blanca); nota(Fa, negra); nota(Fa, negra); nota(Mi, negra); nota(Mi, negra); nota(Re, negra); nota(Re, negra); nota(Do, blanca); delay(retardo); } |
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.
1 2 3 4 5 6 7 |
void nota(int nota, int duracion){ tone(pinBuzzer,nota, duracion); delay(duracion); noTone(pinBuzzer); delay(duracion); } |

¿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