01 · Punto de partida
Del nivel lógico al sonido
Un pin digital solo vale 0 o 1. Un sonido, en cambio, es una variación de la presión del aire, así que para que un pin «suene» hay que hacerlo oscilar y que algo —un disco piezoeléctrico, un diafragma con bobina— convierta esa oscilación eléctrica en movimiento del aire. Tres magnitudes del programa se traducen en tres características del sonido:
- Frecuencia de la oscilación → tono (grave o agudo): 440 Hz es un La.
- Amplitud de la oscilación (tensión, ciclo de trabajo) → volumen.
- Patrón en el tiempo (cuánto dura cada sonido y cada silencio) → significado: un pitido corto confirma, uno largo y grave avisa de un error.
Dos hechos físicos condicionan todo el tema. El primero: los zumbadores baratos son resonadores; suenan fuerte en una banda estrecha (de 2 a 4 kHz) y débil fuera de ella, de modo que no sirven de altavoz. El segundo: el oído es muy sensible justo en esa zona (de 2 a 5 kHz), lo que hace a los pitidos tan eficaces para llamar la atención.
02 · Componentes
Zumbadores: tipos, activo y pasivo
Hay dos clasificaciones que se cruzan. Según el principio físico:
- Piezoeléctrico: un disco de cerámica pegado a uno de latón se deforma al aplicarle una tensión y vibra. Eléctricamente es un capacitor de algunas decenas de nanofaradios: casi no consume corriente (pocos miliamperios) y se maneja con tensiones de 3 a 30 V. Frecuencia de resonancia típica: 2 a 4 kHz. Suena agudo y penetrante.
- Electromagnético (o magnético): una bobina con un imán que mueve un diafragma metálico. Eléctricamente es un inductor con una resistencia de decenas de ohmios (por ejemplo, 16 a 42 Ω): a 5 V circulan decenas o cientos de miliamperios, de modo que necesita un transistor. Suena algo más grave y redondeado (resonancia típica de 2 a 3 kHz).
Y según tengan o no un oscilador interno:
| Aspecto | Activo | Pasivo |
|---|---|---|
| Oscilador | Incluido: con corriente continua suena | No: hay que entregarle una señal alterna (onda cuadrada) |
| Tono | Fijo, el del fabricante (típicamente 2 a 4 kHz) | El que genere el programa: cualquier frecuencia |
| Control desde el programa | Encendido y apagado (digitalWrite) | Frecuencia, duración y ciclo de trabajo (tone, PWM) |
| Melodías | No (solo ritmo de pitidos) | Sí |
| Volumen | No regulable | Regulable (sección 7) |
| Polaridad | Sí: terminal «+» marcado | Los piezoeléctricos no la tienen; los magnéticos pueden traerla |
| Uso típico | Alarmas, confirmaciones, avisos simples | Melodías, tonos de distinta altura, efectos |
Cómo distinguirlos cuando no hay etiqueta (los dos pueden parecer idénticos): conectar uno a una fuente de 5 V continua. El activo emite un tono continuo; el pasivo solo produce un chasquido al conectarlo y otro al desconectarlo. A simple vista, el activo suele tener la cara inferior sellada con resina y una marca «+», y es algo más alto; el pasivo deja ver la plaqueta verde sin componentes. Con el tester, un magnético pasivo mide unas decenas de ohmios, mientras que el activo mide valores distintos o no da lectura; la prueba con 5 V es la más confiable.
Y un tercer actor, el altavoz (parlante) de 8 Ω: reproduce un rango amplio (de unos 100 Hz a 15 kHz) y cualquier forma de onda, pero necesita un amplificador, porque 5 V sobre 8 Ω son 625 mA y ningún pin los da. Se usa cuando hay que reproducir voz o sonido grabado.
03 · Cableado
Conexión y corriente
- Piezoeléctrico pasivo: directo entre un pin y masa, con una resistencia de 100 a 470 Ω en serie que limita el pico de corriente de carga del capacitor. Para más volumen, se manejan sus dos terminales con dos pines complementarios (excitación en puente, sección 7).
- Magnético, activo o pasivo: la corriente (hasta decenas de miliamperios o más) excede lo recomendable para un pin (20 mA). Se usa un transistor NPN o un MOSFET como llave, con una resistencia en la base y un diodo de rebote en antiparalelo con la bobina (tema 27): sin él, cada apagado genera un pico de tensión inversa que daña al transistor y mete ruido en la placa.
- Activo pequeño (5 V, 10 a 15 mA): puede ir directo a un pin; con 30 mA o más, transistor.
- Altavoz: amplificador (un LM386, un módulo de clase D como el PAM8403) y un capacitor de acoplamiento de 100 a 470 µF en serie, para que no circule corriente continua por la bobina. Para audio de calidad, un DAC o un periférico I2S.
- Ruido hacia los sensores: un buzzer magnético conmuta decenas de miliamperios a miles de veces por segundo y ensucia la alimentación; si en el mismo riel hay un sensor analógico (temas 4 y 5), la lectura se contamina. Se desacopla (capacitor de 100 nF y uno electrolítico cerca del buzzer), se usa una alimentación separada o se leen los sensores cuando el buzzer está en silencio.
- Un piezo es también un sensor: si se golpea, genera tensión. Un pin que lo comparta puede recibir picos de varios voltios; un diodo o una resistencia en serie lo protegen. El mismo disco sirve como sensor de golpes (tema 22).
04 · Frecuencia
Generar un tono
Un tono de frecuencia f es una onda cuadrada de período T = 1/f, es decir que el pin cambia de nivel cada T/2 = 1/(2f). Para 440 Hz (La4): T/2 = 1136 µs. Hay cuatro maneras de producirla, ordenadas de menos a más recomendable:
- Cambiar el pin a mano con
delayMicroseconds: sencillo, pero bloquea el programa mientras suena, y cualquier otra tarea desafina el tono. - Cambiar el pin desde el lazo con
micros(): no bloquea, pero el tono tiembla en cuanto el lazo se retrasa (el mismo problema del barrido del tema 37). - Un temporizador de hardware (
tone(pin, frecuencia, duración)de Arduino,ledcWriteTonedel ESP32, un PWM del RP2040): el timer cambia el pin por su cuenta, con exactitud, y el programa sigue. Es la forma normal. - Un DAC o I2S para ondas que no sean cuadradas (audio muestreado, sinusoides): fuera del alcance de un buzzer pero necesario para un altavoz.
Detalles de tone() en un Arduino Uno que dan sorpresas:
- Usa el Timer 2: mientras está activo, se pierde el PWM de los pines 3 y 11, y choca con otras bibliotecas que usan ese timer (como IRremote). Es el mismo tipo de conflicto de temporizadores de la nota del tema 34 sobre el servo.
- Genera un solo tono a la vez; una segunda llamada en otro pin no tiene efecto hasta llamar a
noTone(). - La frecuencia mínima es de unos 31 Hz, y se pasa como entero: se redondea a Hz enteros (sección 5).
- Con duración,
tone()vuelve inmediatamente y el timer lo detiene solo; si se llama de nuevo antes de que termine, se reprograma. - Al terminar, el pin queda en nivel bajo. Conviene: un pin en alto sostenido hace pasar corriente continua por un buzzer magnético y lo calienta sin dar sonido.
La onda cuadrada tiene armónicos impares (3f, 5f…): suena áspera, el timbre «electrónico» típico de los pitidos. El buzzer, por ser resonante, filtra parte de ellos y la nota suena más pura cerca de su resonancia.
05 · Música
Notas y escala musical
En la escala temperada de doce semitonos, cada semitono multiplica la frecuencia por 21/12 ≈ 1,0595 y la octava la duplica. Numerando las notas como en MIDI (La4 = 69), la frecuencia de la nota n es:
| Nota | MIDI | Frecuencia | Entero | Error (cents) | Semiperíodo |
|---|---|---|---|---|---|
| Do4 | 60 | 261,63 Hz | 262 | +2,5 | 1908 µs |
| Re4 | 62 | 293,66 Hz | 294 | +2,0 | 1701 µs |
| Mi4 | 64 | 329,63 Hz | 330 | +2,0 | 1515 µs |
| Fa4 | 65 | 349,23 Hz | 349 | −1,1 | 1433 µs |
| Sol4 | 67 | 392,00 Hz | 392 | 0,0 | 1276 µs |
| La4 | 69 | 440,00 Hz | 440 | 0,0 | 1136 µs |
Dos cuestiones prácticas. La primera es el error de redondeo: tone() recibe Hz enteros. Un cent es una centésima de semitono, y por debajo de unos 5 cents el oído no distingue la desafinación. En las notas medias y agudas el redondeo cuesta menos de 3 cents; en las graves es mucho mayor: el Do2 (65,41 Hz) pasa a 65 Hz, −10,8 cents, y se oye desafinado. La segunda es la zona útil del buzzer: por debajo de unos 500 Hz suena muy débil, de modo que las melodías se escriben una o dos octavas por encima de lo habitual (el Do6 son 1047 Hz).
Las tablas de notas suelen escribirse como constantes (NOTE_C6 = 1047, como en el archivo pitches.h de los ejemplos de Arduino) o se calculan con la fórmula; en este último caso, hay que redondear con + 0.5 antes de convertir a entero, y no truncar.
06 · Tiempo
Melodías y ritmo
Una melodía es una lista de pares (frecuencia, duración), con la frecuencia 0 como silencio. Las duraciones se expresan como fracciones de la redonda, y el ritmo lo fija el tempo en pulsos (negras) por minuto:
A 120 BPM, la negra dura 500 ms, la corchea 250 ms y la redonda 2000 ms; con puntillo, la duración se multiplica por 1,5. La primera frase de la «Oda a la alegría» (15 notas, 16 negras) dura 8,00 s a 120 BPM, 12,00 s a 80 BPM y 6,00 s a 160 BPM. Guardada con 2 bytes de frecuencia y 1 de duración por nota, ocupa 45 bytes, que van en la memoria de programa.
Dos reglas de buena música para un zumbador:
- Articulación: la nota no debe llenar toda su ranura. Si dos notas iguales seguidas se tocan sin silencio, suenan como una sola larga. Se hace sonar el 90 % de la ranura y se deja el resto en silencio (a 120 BPM, 450 ms de sonido y 50 ms de silencio en una negra). El ejemplo clásico de Arduino hace lo mismo con la regla de «duración × 1,30» entre notas: 150 ms de silencio en una negra de 500 ms.
- No bloquear: con
delay()entre notas, el programa se detiene durante toda la melodía (8 s es mucho para ignorar un sensor o un botón). Se usa un reproductor con una máquina de estados ymillis()(tema 41), llamado en cada vuelta del lazo; el tiempo se acumula sobre el inicio de cada ranura para que los errores no se sumen y el tempo no se «arrastre».
Con un solo timer, solo hay una voz. Para acordes se puede alternar muy rápido entre dos notas (arpegio), con un resultado tosco, o usar dos buzzers con dos timers. Para música de verdad, un chip de sonido o un altavoz con I2S.
07 · Intensidad
Volumen y nivel sonoro
El nivel sonoro se mide en decibelios (dB SPL), una escala logarítmica: +10 dB suenan aproximadamente al doble de fuerte, y ±1 dB apenas se nota. Los fabricantes dan el nivel de un buzzer a 10 cm, con la tensión nominal y en su frecuencia de resonancia, por ejemplo «85 dB a 10 cm» (valor de referencia usado en este tema, no un dato de un modelo concreto). Un zumbador activo no tiene control de volumen; en uno pasivo hay cuatro palancas eléctricas, todas medidas respecto de una onda cuadrada de 50 % a 5 V en un solo pin:
| Palanca | Cómo | Efecto |
|---|---|---|
| Tensión | 20 log10(V / 5 V) | 3,3 V: −3,6 dB |
| Excitación en puente | Dos pines complementarios: la tensión sobre el buzzer se duplica | +6,0 dB |
| Ciclo de trabajo | La fundamental es proporcional a sin(π·D) | 25 %: −3,0 dB · 10 %: −10,2 dB · 5 %: −16,1 dB |
| Frecuencia | Acercarse a la resonancia | Hasta decenas de dB de diferencia (instrumento 4) |
El ciclo de trabajo es la palanca más cómoda por software: con el 50 % la fundamental es máxima, y bajar el ciclo a 10 % la reduce a un tercio de su amplitud (−10 dB, «la mitad de fuerte»). El resultado suena más fino, con más armónicos. La acústica también cuenta: el orificio de salida no debe taparse y una pequeña cavidad detrás del buzzer lo refuerza.
Y la distancia: en campo libre, el nivel cae 6 dB cada vez que se duplica. Con 85 dB a 10 cm, a 30 cm hay 75,5 dB, a 1 m, 65 dB, a 3 m, 55,5 dB y a 10 m, 45 dB, una sonoridad de apenas un 6 % de la inicial. Una alarma debe oírse unos 10 a 15 dB por encima del ruido ambiente (una habitación tranquila ronda los 35 a 40 dB, una oficina los 50 y una conversación los 60), y nadie debe ponerla cerca del oído: más de 85 dB sostenidos dañan la audición.
08 · Comunicar
Diseño de señales sonoras
Con un tono y un ritmo se puede decir bastante, si se diseña. Los sonidos breves que significan algo (earcons) siguen unas pocas convenciones:
| Significado | Patrón |
|---|---|
| Confirmación (tecla, orden aceptada) | Un pitido corto, agudo (50 a 100 ms) |
| Éxito | Dos tonos ascendentes |
| Error o rechazo | Un tono grave más largo, o dos descendentes |
| Advertencia | Pitidos intermitentes lentos (1 Hz) |
| Alarma crítica | Pitidos rápidos y repetidos (3 a 5 Hz), con aviso visual |
- Escalar la urgencia: el ritmo comunica la gravedad; un tono continuo, en cambio, se vuelve una molestia que la gente aprende a ignorar o a apagar.
- Limitar la duración y ofrecer silenciar: una alarma sin forma de reconocerla acaba desconectada.
- Combinar con una señal visual (tema 35): el sonido se pierde en un ambiente ruidoso o para quien no oye.
- Evitar el parloteo: si el valor de un sensor oscila alrededor del umbral, la alarma se enciende y se apaga sin parar. Se usa histéresis (tema 42).
- Calcular el consumo: el patrón de dos pitidos de 100 ms cada 2 s deja el buzzer sonando el 10 % del tiempo: con un activo de 30 mA, la corriente media es de 3 mA (importante en baterías).
- El zumbador también depura: una secuencia de pitidos («códigos de pitido») informa del estado de arranque de un equipo sin pantalla, como hacen las placas madre.
- Una alarma de seguridad real (incendio, gas, médica) debe cumplir normas y ser verificada: un zumbador de un kit es un aviso, no un dispositivo de seguridad certificado.
09 · Programación
Código para manejar un zumbador
Tres piezas: un reproductor de melodías no bloqueante con articulación, la conversión de una nota MIDI a frecuencia y una alarma de dos pitidos para un zumbador activo.
const uint8_t PIN_BUZZER = 8; // pasivo
const uint8_t PIN_ACTIVO = 7; // activo
// --- Notas en Hz (octava 6: la zona sonora de un buzzer) ---
const uint16_t C6 = 1047, D6 = 1175, E6 = 1319, F6 = 1397, G6 = 1568, SILENCIO = 0;
struct Nota { uint16_t hz; uint8_t figura; bool puntillo; }; // figura: 1 redonda, 2 blanca, 4 negra, 8 corchea
const Nota ODA[] PROGMEM = {
{E6,4,0},{E6,4,0},{F6,4,0},{G6,4,0},{G6,4,0},{F6,4,0},{E6,4,0},{D6,4,0},
{C6,4,0},{C6,4,0},{D6,4,0},{E6,4,0},{E6,4,1},{D6,8,0},{D6,2,0}
};
const uint8_t N_NOTAS = sizeof(ODA) / sizeof(Nota);
const uint16_t BPM = 120;
const uint32_t REDONDA_MS = 240000UL / BPM; // 2000 ms a 120 BPM
// --- Reproductor sin bloqueos: llamar en cada vuelta de loop() ---
bool activa = false, sonando = false;
uint8_t indice = 0;
uint32_t proximo, finRanura; // inicio de la ranura actual y fin de la nota sonando
void iniciarMelodia() { indice = 0; activa = true; sonando = false; proximo = millis(); }
void actualizarMelodia() {
if (!activa || (int32_t)(millis() - proximo) < 0) return;
if (sonando) { // terminó la parte sonora: queda el silencio
noTone(PIN_BUZZER);
sonando = false; proximo = finRanura; indice++;
return;
}
if (indice >= N_NOTAS) { activa = false; return; }
Nota n; memcpy_P(&n, &ODA[indice], sizeof n);
uint32_t ranura = REDONDA_MS / n.figura;
if (n.puntillo) ranura += ranura / 2;
uint32_t suena = ranura * 9 / 10; // articulación: 90 % sonando, 10 % silencio
if (n.hz) tone(PIN_BUZZER, n.hz); // sin duración: la detiene el reproductor
sonando = true;
finRanura = proximo + ranura; // se acumula sobre el inicio: el tempo no se arrastra
proximo += suena;
}
// --- Nota MIDI -> frecuencia entera (redondeada, no truncada) ---
uint16_t hzDeMidi(uint8_t midi) {
return (uint16_t)(440.0 * pow(2.0, (midi - 69) / 12.0) + 0.5);
}
// --- Alarma de dos pitidos cada 2 s con un zumbador activo, sin delay ---
void alarma() {
uint16_t t = millis() % 2000;
bool encendido = (t < 100) || (t >= 200 && t < 300);
digitalWrite(PIN_ACTIVO, encendido); // 10 % del tiempo sonando
}
void loop() {
actualizarMelodia(); // el resto del programa sigue vivo
// leer sensores, botones, etc.
}
La interfaz de un módulo de sonido sería iniciarMelodia(), actualizarMelodia(), pitido() y silenciar(): el resto de la aplicación pide «sonar la confirmación» y no sabe nada de timers, frecuencias ni pines. Cambiar de un buzzer pasivo a un altavoz con amplificador toca solo ese módulo.
10 · Verificación
Fallas y verificación
| Síntoma | Causa | Defensa |
|---|---|---|
| El pasivo solo hace «clic» | Se le aplica corriente continua: no tiene oscilador | Generar una onda cuadrada con tone() |
| El activo no suena | Polaridad invertida, tensión baja, es un pasivo | Revisar «+», probar con 5 V directos |
| Suena muy débil | Frecuencia lejos de la resonancia, 3,3 V, orificio tapado | Usar 2 a 4 kHz, puente, mejorar la acústica |
| El microcontrolador se reinicia al sonar | Buzzer magnético directo al pin o sobre el riel de alimentación | Transistor, diodo de rebote, capacitor de desacople |
| Lecturas de sensores con ruido cuando suena | Corriente conmutada en el mismo riel | Desacople, alimentación separada, leer en silencio |
| Se pierde el PWM de los pines 3 y 11, o falla IRremote | tone() usa el Timer 2 | Mover el PWM de pin, o generar el tono con otro timer |
| Las notas graves suenan desafinadas | Redondeo a Hz enteros (−10,8 cents en Do2) | Subir de octava o usar un timer de mayor resolución |
| Notas repetidas suenan como una sola | Sin silencio entre notas | Articulación del 90 % |
| El programa no responde mientras suena | delay() entre notas | Reproductor con millis() |
| El buzzer magnético se calienta sin sonar | El pin queda en nivel alto | Llamar a noTone() y dejar el pin en bajo |
- Probá cada zumbador con 5 V continuos para saber si es activo o pasivo.
- Hacé un barrido de frecuencias (de 500 Hz a 6 kHz) y anotá dónde suena más fuerte: ahí está la resonancia.
- Comprobá la afinación con una aplicación de afinador: el La4 debe dar 440 Hz con un error de pocos cents.
- Medí la corriente del buzzer sonando para decidir entre pin y transistor.
- Verificá con los sensores conectados que sus lecturas no cambian cuando el buzzer suena.
- Probá el tempo con un cronómetro: la melodía debe durar lo calculado (8 s a 120 BPM) sin arrastrarse.
11 · Analogía con programación
Frecuencias, ritmos, volumen y resonancia
Calculemos los seis elementos del tema: las frecuencias de las notas con su error de redondeo, la duración de una melodía según el tempo, el efecto del ciclo de trabajo, la tensión y la distancia en el nivel sonoro, la respuesta de un buzzer resonante, el tamaño del audio muestreado y la corriente media de una alarma intermitente.
Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.
import math
# ---- Notas de la escala temperada (MIDI: La4 = 69 = 440 Hz) ----
NOMBRES = ["Do", "Do#", "Re", "Re#", "Mi", "Fa", "Fa#", "Sol", "Sol#", "La", "La#", "Si"]
def frecuencia(midi, la4=440.0):
return la4 * 2 ** ((midi - 69) / 12)
def cents(f_real, f_ideal):
return 1200 * math.log2(f_real / f_ideal)
print("nota midi frecuencia entero error (cents) semiperíodo")
for midi in (36, 48, 60, 62, 64, 65, 67, 69, 72, 84, 96):
f = frecuencia(midi)
entero = round(f)
nombre = f"{NOMBRES[midi % 12]}{midi // 12 - 1}"
print(f"{nombre:6s} {midi:4d} {f:9.2f} {entero:6d} {cents(entero, f):+9.2f} {1e6 / (2 * entero):8.0f} µs")
# ---- Melodía: primera frase de la «Oda a la alegría» ----
frase = [("Mi", 1), ("Mi", 1), ("Fa", 1), ("Sol", 1), ("Sol", 1), ("Fa", 1), ("Mi", 1), ("Re", 1),
("Do", 1), ("Do", 1), ("Re", 1), ("Mi", 1), ("Mi", 1.5), ("Re", 0.5), ("Re", 2)]
for bpm in (80, 120, 160):
negra = 60000 / bpm
total = sum(d for _, d in frase) * negra
print(f"{bpm} BPM: negra {negra:.0f} ms, corchea {negra / 2:.0f} ms, redonda {negra * 4:.0f} ms; frase de {len(frase)} notas: {total / 1000:.2f} s")
print("memoria de la frase (2 B de frecuencia + 1 B de duración por nota):", 3 * len(frase), "B")
negra = 500
for art in (1.00, 0.90, 0.75):
print(f"articulación {art * 100:3.0f} %: suena {negra * art:.0f} ms y calla {negra * (1 - art):.0f} ms de una negra a 120 BPM")
print(f"regla de la pausa de Arduino (duración × 1,30): una negra de {negra} ms ocupa {negra * 1.30:.0f} ms ({negra * 0.30:.0f} ms de silencio)")
# ---- Volumen: ciclo de trabajo, tensión, excitación en puente y distancia ----
print()
for d in (0.50, 0.25, 0.10, 0.05):
amp = math.sin(math.pi * d)
print(f"ciclo {d * 100:3.0f} %: fundamental {amp:5.3f} del máximo = {20 * math.log10(amp):6.1f} dB")
print(f"3,3 V frente a 5 V: {20 * math.log10(3.3 / 5):+.1f} dB; excitación en puente (dos pines complementarios): {20 * math.log10(2):+.1f} dB")
base = 85.0
for d in (0.1, 0.3, 1.0, 3.0, 10.0):
nivel = base - 20 * math.log10(d / 0.1)
print(f"85 dB a 10 cm -> a {d:4.1f} m: {nivel:5.1f} dB (sonoridad relativa {2 ** ((nivel - base) / 10):.3f})")
# ---- Respuesta resonante de un buzzer pasivo (modelo ilustrativo) ----
def respuesta_db(f, f0=4000.0, q=4.0):
x = f / f0
return -10 * math.log10(1 + q * q * (x - 1 / x) ** 2)
print()
print("frecuencia respuesta (f0 = 4 kHz, Q = 4)")
for f in (500, 1000, 2000, 3000, 4000, 5000, 8000):
print(f"{f:8d} Hz {respuesta_db(f):6.1f} dB")
f0, q = 4000.0, 4.0
f1 = f0 * (math.sqrt(1 + 1 / (4 * q * q)) - 1 / (2 * q))
f2 = f0 * (math.sqrt(1 + 1 / (4 * q * q)) + 1 / (2 * q))
print(f"ancho de banda a -3 dB: {f1:.0f} a {f2:.0f} Hz ({f2 - f1:.0f} Hz = f0 / Q)")
# ---- Audio muestreado ----
print()
for fs, bits in ((8000, 8), (16000, 16), (44100, 16)):
print(f"{fs} Hz, {bits} bits, mono: {fs * bits // 8} B por segundo; frecuencia máxima {fs // 2} Hz")
# ---- Alarma intermitente: corriente media ----
encendido = 100 + 100
ciclo = 100 + 100 + 100 + 1700
print()
print(f"patrón de dos pitidos de 100 ms cada {ciclo / 1000:.1f} s: sonando {encendido / ciclo * 100:.0f} % del tiempo; con 30 mA, corriente media {30 * encendido / ciclo:.1f} mA")
Resultado: el La4 es 440 Hz con un semiperíodo de 1136 µs; el Do4 (261,63 Hz) se redondea a 262 Hz con un error de +2,5 cents, y el Do2 (65,41 Hz) a 65 Hz con −10,8 cents, desafinado. La frase de 15 notas dura 8,00 s a 120 BPM (12,00 s a 80 y 6,00 s a 160) y ocupa 45 bytes; con articulación del 90 %, una negra de 500 ms suena 450 ms y calla 50. Un ciclo del 25 % da −3,0 dB; el 10 %, −10,2 dB; el 5 %, −16,1 dB; 3,3 V frente a 5 V, −3,6 dB, y la excitación en puente, +6,0 dB. Con 85 dB a 10 cm, a 1 m quedan 65,0 dB (un 25 % de la sonoridad) y a 10 m, 45,0 dB. El modelo de buzzer con f0 = 4 kHz y Q = 4 responde −8,1 dB a 3 kHz, −15,7 dB a 2 y a 8 kHz y −30,0 dB a 500 Hz, con un ancho de banda a −3 dB de 3531 a 4531 Hz (1000 Hz = f0/Q). Un segundo de audio a 8 kHz y 8 bits ocupa 8000 bytes (frecuencia máxima 4000 Hz) y a 44,1 kHz y 16 bits, 88 200. Dos pitidos de 100 ms cada 2 s dejan el buzzer sonando el 10 % del tiempo: 3,0 mA de media con un activo de 30 mA.
12 · Exploración interactiva
Notas, ritmo, volumen y resonancia
El primer instrumento convierte una nota en frecuencia, error de redondeo y semiperíodo. El segundo calcula las duraciones de un ritmo con su articulación. El tercero estima el nivel sonoro según tensión, ciclo de trabajo, excitación y distancia, a partir de un nivel de referencia de 85 dB a 10 cm. El cuarto muestra la respuesta resonante de un buzzer (modelo ilustrativo, no el de un componente concreto).
Instrumento 1: una nota
tone() · error—Instrumento 2: tempo, figura y articulación
Instrumento 3: volumen y nivel sonoro
Instrumento 4: resonancia del buzzer
Recorrido guiado
- Con la nota 81 (La5): 880 Hz, error nulo y semiperíodo de 568 µs, dentro de la zona útil del buzzer. Bajá a la 69 (La4, 440 Hz): el estado avisa que suena débil por debajo de 500 Hz.
- Bajá a la nota 36 (Do2): 65,41 Hz se redondea a 65 y el error es de −10,8 cents: desafinada. Con la nota 60 (Do4), el error es de solo +2,5 cents. Con la 21 (La0),
tone()no llega a su frecuencia mínima de unos 31 Hz. - Cambiá la afinación a 442 Hz: todas las frecuencias suben un 0,45 %. Con 415 Hz, bajan un semitono casi exacto (como afinaba la música barroca).
- En el ritmo, a 120 BPM y una negra: ranura de 500 ms, 450 ms de sonido y 50 ms de silencio; la frase dura 8,00 s. Llevá la articulación a 100 %: sin silencio, las notas repetidas se funden.
- Pasá a 200 BPM con semicorchea y articulación 50 %: la nota sonaría solo 37,5 ms, demasiado corta para un buzzer. Con 80 BPM, la frase dura 12,00 s.
- En el volumen, con 5 V, 50 %, un pin y 1 m: 65,0 dB. Pasá a 3,3 V: −3,6 dB. Elegí excitación en puente: +6,0 dB. Bajá el ciclo a 10 %: −10,2 dB, casi a la mitad de fuerte.
- Con la calle de 65 dB de ruido ambiente y una distancia de 3 m: el nivel de 55,5 dB queda por debajo del ruido y la alarma no se oye. Acercá la distancia o usá el puente.
- En la resonancia, con 4000 Hz, Q = 4 y la frecuencia en 3000 Hz: −8,1 dB (el sonido cae a un 39 % de amplitud). Llevala a 500 Hz: −30,0 dB. Con Q = 8, la banda de −3 dB se estrecha a 500 Hz de ancho y la resonancia exige afinar mejor la frecuencia.
Desafío: aviso de puerta abierta
Un sensor magnético (tema 24) detecta una puerta abierta y un buzzer pasivo de piezo debe avisar. ¿Qué frecuencia, qué patrón y cuánto consumo? La frecuencia: la de resonancia (4000 Hz, o la que se mida con el barrido). El patrón: tras 30 s de apertura, un pitido de 100 ms cada 5 s (advertencia leve) y, si pasa un minuto, dos pitidos rápidos cada 2 s (más urgente); se silencia al cerrar la puerta o con un botón. Con histéresis y un tiempo de confirmación (tema 6) para que un rebote del contacto no dispare el aviso. El consumo del piezo es de pocos miliamperios y, con 100 ms de cada 5 s, un 2 % del tiempo: despreciable aun con batería. A 1 m con 85 dB de referencia son 65 dB, 15 dB sobre una casa tranquila (50 dB), suficiente. Se acompaña de un LED (tema 35) para quien no oye.
13 · Método de trabajo
Cómo integrar un zumbador, para cualquier proyecto
- Elegí el tipo: activo para un aviso simple de encendido y apagado; pasivo para tonos, melodías y volumen; altavoz con amplificador para voz o audio.
- Calculá la corriente y conectá directo solo un piezo o un activo pequeño; un magnético, con transistor y diodo de rebote.
- Generá el tono con un timer (
tone,ledc, PWM), nunca condelay; conocé qué timer usás y qué te quita. - Trabajá en la zona útil (500 Hz a 5 kHz, mejor la resonancia) y redondeá bien las frecuencias.
- Reproducí las melodías sin bloqueos, con articulación y el tiempo acumulado sobre el inicio de cada ranura.
- Regulá el volumen con tensión, puente o ciclo de trabajo (pasivo), y estimá el nivel a la distancia real del oyente.
- Diseñá el significado: patrón corto para confirmar, intermitente para advertir, rápido para alarmar, con histéresis y forma de silenciar; acompañá con una señal visual.
- Probá con los sensores conectados y con el ruido ambiente real; encapsulá el sonido en un módulo.
Si no suena, revisá si es activo o pasivo y la polaridad; si suena débil, la frecuencia; si el micro se reinicia, la corriente; si las notas se pegan, la articulación; si el programa se detiene, un delay.
14 · Comprensión
Confusiones frecuentes
«Un zumbador pasivo suena si le doy 5 V»
Solo hace un chasquido. Sin oscilador interno necesita una señal alterna, como la onda cuadrada de tone().
«Con un zumbador activo puedo tocar melodías»
Su tono es fijo, el del oscilador interno; solo se controla cuándo suena. Para melodías hace falta un pasivo.
«Un buzzer suena igual a cualquier frecuencia»
Es un resonador: suena fuerte cerca de su frecuencia de resonancia (2 a 4 kHz) y muy débil lejos, a más de 30 dB menos por debajo de 500 Hz.
«Reducir el ciclo de trabajo a la mitad baja el volumen a la mitad»
La amplitud de la fundamental sigue sin(π·D): del 50 % al 25 %, −3 dB (poco más de un 29 % menos de amplitud, casi imperceptible); para «la mitad de fuerte» (−10 dB) hace falta un ciclo de 10 %.
«Un buzzer magnético se puede conectar a un pin como un LED»
Es una bobina de decenas de ohmios: toma decenas o cientos de miliamperios y genera picos inversos al apagarse. Necesita transistor y diodo de rebote.
«tone() solo usa el pin del buzzer»
Usa un timer de hardware: en el Uno el Timer 2, con lo que se pierde el PWM de los pines 3 y 11 y chocan otras bibliotecas.
15 · Práctica guiada
Predecí antes de comprobar
1. Semiperíodo
¿Cada cuántos microsegundos cambia el pin para generar 1000 Hz y 2500 Hz?
Ver solución
1 / (2 × 1000) = 500 µs; 1 / (2 × 2500) = 200 µs.
2. Frecuencia de una nota
¿Qué frecuencia tiene la nota MIDI 72 (Do5) con La4 = 440 Hz y qué entero se pasa a tone()?
Ver solución
440 × 2(72 − 69)/12 = 440 × 20,25 = 523,25 Hz → 523 (error de −0,8 cents).
3. Tempo
A 90 BPM, ¿cuánto dura una corchea con puntillo?
Ver solución
Negra = 60 000 / 90 = 667 ms; corchea = 333 ms; con puntillo × 1,5 = 500 ms.
4. Volumen
Un buzzer da 85 dB a 10 cm. ¿Qué nivel hay a 2 m y cuánto sube si se pasa a excitación en puente?
Ver solución
85 − 20 log10(2 / 0,1) = 85 − 26,0 = 59,0 dB; con puente, +6 dB = 65,0 dB.
5. Corriente
Un zumbador magnético activo de 5 V consume 30 mA y suena dos veces 100 ms cada 2 s. ¿Cuál es la corriente media y se puede conectar a un pin?
Ver solución
Sonando 200 ms de 2000: 10 % → media 3 mA. Pero el pico es de 30 mA, más que los 20 mA de un pin: transistor con diodo de rebote.
6. Diagnóstico
Una melodía de un cumpleaños suena bien, pero las notas repetidas («Cum-ple-a-ños») se oyen como una sola nota larga. ¿Qué pasa y qué cambiás?
Ver solución
No hay silencio entre las notas: la duración de cada nota llena toda su ranura. Se hace sonar el 90 % de la ranura y se deja el 10 % en silencio (noTone antes de la siguiente), o se agrega una pausa corta entre notas.
16 · Síntesis
Ideas para recordar
- El sonido es una oscilación: la frecuencia da el tono, la amplitud el volumen y el patrón en el tiempo, el significado.
- El zumbador activo trae oscilador (tono fijo, encendido y apagado); el pasivo necesita una señal alterna y permite melodías y volumen. Con 5 V continuos, el pasivo solo hace «clic».
- El piezo es un capacitor (pocos mA, directo al pin); el magnético es una bobina (decenas de mA o más: transistor y diodo de rebote); un altavoz de 8 Ω pide amplificador.
- Un tono es una onda cuadrada que cambia cada 1/(2f); se genera con un timer (
tone, LEDC, PWM), no condelay;tone()en el Uno usa el Timer 2. - La frecuencia de una nota es 440 × 2(n − 69)/12; el redondeo a Hz enteros desafina las graves (−10,8 cents en Do2).
- El zumbador resuena en 2 a 4 kHz: fuera de ahí suena débil; se escribe la música en esa zona.
- Las melodías son listas de notas y duraciones (negra = 60 000 / BPM ms), con articulación del 90 % y un reproductor con
millis()que acumula el tiempo. - El volumen de un pasivo se regula con tensión (−3,6 dB a 3,3 V), puente (+6 dB) y ciclo de trabajo (10 %: −10 dB); el nivel cae 6 dB al duplicar la distancia; una alarma debe oírse 10 a 15 dB sobre el ambiente y acompañarse de una señal visual.
¿Listo para el bloque 9?
Antes de avanzar, calculá el semiperíodo de un La5 (880 Hz), explicá por qué un zumbador activo no puede tocar una melodía y decí cómo se reproduce una melodía sin bloquear el programa. Si podés justificar las tres respuestas, ya sabés manejar las salidas visuales y sonoras.
En el próximo tema empieza el bloque de control desde software y proyectos con los drivers de dispositivos y las capas de abstracción: cómo escribir interfaces limpias para los sensores y actuadores que ya conocemos.