iotdata, by Data Frontieriot
data
Programación por bloques

Buzzer activo y pasivo: cómo hacer que el robot pite y toque notas

La diferencia entre buzzer activo y pasivo, cómo saber cuál tiene, cómo tocar notas con tone() en Arduino y con PWM en el ESP32, el cuidado con la corriente del pin y el efecto de tone() en los pines 3 y 11 del Nano.

Ingeniería Data Frontier· Publicado el 22 de octubre de 2026

El buzzer es la voz del robot. Parece la pieza más simple del kit, pero hay dos tipos que se ven iguales por fuera y funcionan de manera distinta, y confundir uno con otro es el motivo número uno de "el buzzer no suena".

Activo y pasivo

El buzzer activo tiene un oscilador adentro. Basta con alimentarlo y pita, siempre en el mismo tono, normalmente entre 2 kHz y 3 kHz. Para el programa, es como un LED: pin en nivel alto, pita; en nivel bajo, se calla.

El buzzer pasivo es solo el elemento que vibra. Con tensión continua, da un chasquido y se queda en silencio. Para sonar, necesita recibir una onda cuadrada, y la frecuencia de esa onda es la nota. A cambio del trabajo, toca melodías.

Cómo saber cuál es el suyo

  • La prueba definitiva: conecte el buzzer a 5 V (o 3,3 V) por un instante. Si pita de forma continua: activo. Si solo hace un chasquido: pasivo.
  • Pista visual: muchos activos tienen el fondo sellado y una etiqueta encima; muchos pasivos dejan ver la placa de circuito por debajo. No es regla, solo una pista.
  • Polaridad: el activo tiene polaridad; la pata más larga o la marca "+" va al pin.

En el IDE de bloques, la tarjeta de buzzer pregunta el tipo. Para el activo, enciende y apaga el pin; para el pasivo, genera la frecuencia.

Tocar notas

Algunas frecuencias de referencia (afinación con el La en 440 Hz):

NotaFrecuencia
Do 5523 Hz
Re 5587 Hz
Mi 5659 Hz
Sol 5784 Hz
La 5880 Hz

Para un aviso, los sonidos agudos y cortos funcionan mejor: 2.000 Hz durante 100 ms llaman la atención sin molestar. Dos notas que suben suenan a "salió bien"; dos que bajan, a "error".

En el Arduino Nano

La función tone(pin, frecuencia, duración) genera la onda cuadrada en cualquier pin, y noTone(pin) la silencia. Dos cuidados:

  • Un solo tono a la vez. Mientras un tone() suena en un pin, llamar a tone() en otro pin no tiene efecto.
  • tone() usa el timer 2, y por eso interfiere con el PWM (analogWrite) de los pines 3 y 11 mientras suena. Los servos con la biblioteca Servo no se ven afectados, porque esa biblioteca usa otro timer.

En el ESP32 con MicroPython

El PWM del ESP32 cumple el papel de tone: la frecuencia es la nota, y el ciclo de trabajo al 50 % da la onda cuadrada.

from machine import Pin, PWM
import time

buzzer = PWM(Pin(23), freq=2000, duty_u16=32768)
time.sleep_ms(100)
buzzer.duty_u16(0)   # silencio

Corriente del pin

Los buzzers pequeños de kit consumen algunas decenas de miliamperios, cerca del límite recomendado para un pin de microcontrolador (unos 20 mA en el ATmega328P del Nano). Para un buzzer más potente, use un transistor como llave: el pin comanda el transistor, y el transistor enciende el buzzer.

En el brazo robótico

El buzzer del brazo confirma lo que hizo el operador: un pitido corto cuando se graba una posición, dos pitidos al final de la repetición, un sonido continuo mientras haya un objeto cerca del sensor. En el IDE de bloques, la tarjeta "Pitido en el buzzer" pide el pin, el tipo y la duración, y la tarjeta "Tocar nota" acepta la nota por su nombre.