Inicio / Arduino

Placa de desarrollo Arduino UNO - Buzzer

Un buzzer es un dispositivo electrónico que genera un zumbido o pitido cuando se le aplica corriente. En este ejemplo suena mientras mantienes pulsado un botón y se calla al soltarlo.

Conexiones

ComponenteConexiónNota
Buzzer (+)Pin 10Salida de la señal
Buzzer (−)GND
SWITCH1A2 y GNDCon INPUT_PULLUP

Buzzer pasivo o activo

Este código usa tone(), que solo tiene sentido con un buzzer pasivo. El pasivo no genera sonido por sí mismo: necesita que el Arduino le mande una frecuencia, y por eso puedes cambiar el tono.

Un buzzer activo lleva su propio oscilador interno y suena a una frecuencia fija en cuanto le llega tensión. Con uno de esos, tone() no te dejará variar el tono: basta con digitalWrite(BUZZER, HIGH) para que suene y LOW para callarlo.

Código del programa

Arduino / C++
// Definición de pines según el diagrama
const int BUZZER  = 10;
const int SWITCH1 = A2;

void setup() {
  pinMode(BUZZER, OUTPUT);
  pinMode(SWITCH1, INPUT_PULLUP);
  digitalWrite(BUZZER, LOW);   // Buzzer apagado al inicio
}

void loop() {
  if (digitalRead(SWITCH1) == LOW) {
    // Botón pulsado -> el buzzer suena
    tone(BUZZER, 1000);        // Tono de 1000 Hz
  } else {
    // Botón suelto -> el buzzer se calla
    noTone(BUZZER);
  }
}

Cómo funciona

tone(pin, frecuencia) genera en el pin una señal cuadrada con la frecuencia indicada en hercios. Los 1000 Hz del ejemplo dan el pitido agudo clásico.

noTone(pin) detiene esa señal. Hace falta llamarlo al soltar el botón: tone() sigue sonando por su cuenta hasta que se lo pide parar, no se apaga solo.

Como el pulsador usa INPUT_PULLUP, el pin está en HIGH en reposo y pasa a LOW al pulsarlo. De ahí que la condición compare contra LOW.

Frecuencias de referencia

Cambiando el segundo parámetro de tone() obtienes tonos distintos:

FrecuenciaSuenaNota aproximada
262 HzGraveDo (C4)
440 HzMediaLa (A4), tono de afinación
500 HzMedia
1000 HzAgudoEl del ejemplo
2000 HzMuy agudoTipo alarma

Posibles mejoras

Con un tercer parámetro, tone(BUZZER, 1000, 200), el sonido dura 200 ms y se corta solo, sin necesidad de noTone(). Encadenando varias llamadas con pausas se pueden tocar melodías sencillas.

Un detalle a tener en cuenta si amplías el montaje: en el Arduino UNO tone() ocupa el temporizador 2, así que mientras suena no se puede usar analogWrite en los pines 3 y 11. Si combinas este ejemplo con el del LED RGB, que usa el pin 11, es justo el conflicto que te vas a encontrar.