Buzzer

Objetivos

  • Familiarizarnos con un buzzer piezoeléctrico.
  • Las funciones tone() y notone().
  • Primeros pasos con la música electrónica.

buzzers

Material requerido

arduino
  • Arduino Uno o similar. Esta sesión acepta cualquier otro modelo de Arduino.
Img_3_4
  •  Una Protoboard.
Img_3_6-300x185
  • Algunos cables de Protoboard.
buzzer
  • Un buzzer piezoeléctrico.

Según la Wikipedia, la piezoelectricidad es un fenómeno que ocurre en determinados cristales que, al ser sometidos a tensiones mecánicas, adquieren una polarización eléctrica y aparece una diferencia de potencial y cargas eléctricas en su superficie que generan una tensión eléctrica.

Este fenómeno también ocurre a la inversa: se deforman bajo la acción de fuerzas internas al ser sometidos a un campo eléctrico. El efecto piezoeléctrico es normalmente reversible: al dejar de someter los cristales a un voltaje exterior o campo eléctrico, recuperan su forma.

Es decir, que son materiales (el cuarzo es el más conocido) que si los sometemos a una tensión eléctrica variable (como una señal PWM, que ya nos son familiares) vibran.

Si conectamos un piezo con una señal digital, vibrará a una frecuencia que sigue bastante fielmente la variación eléctrica con que se los excita, y si vibran a una 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.

El circuito.

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.

esquema_proto

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 de control.

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 variar 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 = 9;
            int freq = 440;
            int duration = 1000;
            tone(pinOut, freq, duration);
        }

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 numTones = 10;
     int tones[ ] = {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 < numTones; i++)
                 {
                     tone(speakerPin, tones[i]);
                     delay(500);
                 }
             noTone(speakerPin);
       }

Existe una relación directa entre la frecuencia de una nota y su posición, en digamos el teclado de un piano.