Arduino Zumbador
Si conectamos un piezo con una señal digital, vibran a una frecuencia sigue bastante fielmente la variación eléctrica con que los excita, y si vibran a la frecuencia audible, oiremos el sonido que producen. A un componente que hace esto, le llamamos Buzzer o zumbador.
Naturalmente, la calidad del sonido que producen dista bastante de lo que podríamos denominar alta fidelidad. Pero es suficiente para generar tonos audibles (como la típica alarma de los despertadores digitales) e incluso tonos musicales reconocibles que podemos secuenciar.
En esta sesión, montaremos un circuito muy sencillo con un zumbador
La conexión es tan simple como conectar negativo a GND y positivo al pin 9. De todas maneras hay que tener cuidado. Los piezos tienen polaridad y hay que asegurarse de conectarlos correctamente.
- Si los conectáis al revés, simplemente no sonará, y tendréis que dar la vuelta.
- Además para este primer montaje, necesitamos usar un pin PWM (como el 9) porque es la alternancia entre HIGH y LOW lo que produce el efecto piezoeléctrico (recordad que una señal PWM envía un tren de ondas cuadradas de amplitud variable), por lo que lo más cómodo es usar un pin PWM en lugar de programar un efecto equivalente en un pin normal.
El Programa
Vamos a empezar creando una función, Beep(), que haga ruido simplemente:
void beep(unsigned char pausa)
{ analogWrite(9, 20); delay(pausa); // Espera analogWrite(9, 0); // Apaga delay(pausa); // Espera }
Y ahora prueba
void setup() { pinMode(9, OUTPUT); beep(50); beep(50); beep(50); delay(1000); } void loop() { beep(200); }
Lo único que beep () hace es poner una señal PWM en el pin 9 de 20 sobre 255. Podéis varias el valor, pero el tono de audio no cambiará gran cosa porque está controlado por la señal de base. Esto es suficiente para generar una de las molestas señales acústicas de un despertador barato.
¿Qué pasa si quiero generar señales de tono variable para hacer una melodía? Bueno pues Arduino dispone de la función tone() que genera una señal de la frecuencia indicada, y notone() que la corta:
void setup() { int pinOut = 8; int freq = 440; int duracion = 1000; tono(pinOut, freq, duracion); }
La función tone() genera un audio de la frecuencia y duración definidas.
Podemos definir una matriz con las frecuencias de las notas a utilizar y lee las correspondencias con las notas musicales. Veamos cómo generar una escala con un zumbador:
int speakerPin = 9; int numTonos = 10; int tonos[ ] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440,466, 494}; // mid C C# D D# E F F# G G# A void setup() { } void loop() { for (int i = 0; i < numTonos; i++) { tone(speakerPin, tonos[i]); delay(500); } noTone(speakerPin); }