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
| Componente | Conexión | Nota |
|---|---|---|
| Buzzer (+) | Pin 10 | Salida de la señal |
| Buzzer (−) | GND | — |
SWITCH1 | A2 y GND | Con 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
// 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:
| Frecuencia | Suena | Nota aproximada |
|---|---|---|
262 Hz | Grave | Do (C4) |
440 Hz | Media | La (A4), tono de afinación |
500 Hz | Media | — |
1000 Hz | Agudo | El del ejemplo |
2000 Hz | Muy agudo | Tipo 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.