Objetivos

 

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

    Material requerido.

     

    Todo el material necesario para este curso esta en el Arduino starter kit.

     

    Kit Arduino Uno  Kit inicio UNO
    Kit Arduino MEGA Kit Inicio Mega

     

    Piezoelectricidad

     

    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.

  • Es un fenómeno bastante conocido y muchos encendedores domésticos de gas funcionan bajo este principio. Un resorte golpea un cuarzo y como resultado tenemos la chispa que enciende el gas o el calentador de agua con un característico click).
  • En otro orden de cosas, los circuitos electrónicos digitales, suelen disponer de un reloj interno que vibra a una velocidad patrón, basados en cristales de cuarzo piezoeléctrico. El cristal de Arduino late a 16Mhz por segundo y la flecha indica su posición.
    Detalle posicion clock
  • En una sesión próxima utilizaremos uno de estos cristales  para sincronizar un circuito discreto con el corazón de un Arduino, el ATmega 328.
  •  

    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,  hasta en piezas musicales (por más que uno quisiera estar en otro lugar cuando las oyes).

    Como antes o después, disponer de una señal acústica en vuestros proyectos, acaba siendo útil, vamos a ver cómo podemos montar estos elementos, y que tipo de opciones tenemos disponibles.

    En esta sesión, montaremos un circuito muy sencillo con un zumbador.

    Esquema electrónico

     

     

    Esquema buzzer xxConectando un zumbador a arduino

    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 uno 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 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);
           }
  • Dada la afición reinante a la física recreativa, me aterra la idea de ponerme a perorar sobre la relación entre las notas musicales y la frecuencia correspondiente, así como los distintos métodos de calcularlas y no digamos ya pretender hablar de las escalas temperadas.
  • Así que vamos a mencionar simplemente que existe una relación directa entre la frecuencia de una nota y su posición, en digamos el teclado de un piano.
  • Para aquellos con formación musical e interés en como calcular la frecuencia de una nota dada podeís hacer una búsqueda en  Google, que enseguida encontrareis de todo.
  •  

    Por último, y para cerrar esta sesión, os diré que internet está lleno de gente a quien le sobra tiempo y lo dedica a las extravagancias más inverosímiles. Basta con indicaros aquí la página de alguien que ha dedicado un número indecente de horas en transcribir  la música de la guerra de las galaxias a orquesta de cámara, compuesta por Arduino y zumbador.Descargar ejemplo

     

     

     

    Resumen de la sesión

    En este curso arduino hemos aprendido lo siguiente:

  • Hemos usado nuestro zumbador piezoeléctrico.
  • Son muy sencillos de usar aunque su calidad es pobre.
  • Son un sistema barato y rápido de añadir sonido a tus proyectos.
  • Hemos planteado unos primeros pasos en generación electrónica de sonido. Si tenemos ocasión dedicaremos algún otra sesión a la generación de sonido electrónico y MIDI.
  • Deja una respuesta