martes, 14 de enero de 2014

Tutorial - Haciendo Sonidos con Ardu


Objetivo: Conseguir reproducir mediante un buzzer (o Zumbador) una escala de notas musicales.

Componentes que vamos a necesitar en el tutorial de hoy:
- BreadBoard o Protoboard
- 1 x Zumbador ( buzzer )
- Arduino UNO
- Cables

Como podemos comprobar, no necesitamos gran cosa para conseguir realizar este tutorial, así que vamos allá. 

Para empezar comentaremos qué es un zumbador:
Zumbador de Alta Frecuencia

Zumbadorzumbather o buzzer en inglés, es un transductor electroacústico que produce un sonido o zumbido continuo o intermitente de un mismo tono. Sirve como mecanismo de señalización o aviso, y son utilizados en múltiples sistemas como en automóviles o en electrodomésticos.

Su construcción consta de dos elementos, un electroimán y una lámina metálica de acero. El zumbador puede ser conectado a circuitos integrados especiales para así lograr distintos tonos.

Cuando se acciona, la corriente pasa por la bobina del electroimán y produce un campo magnético variable que hace vibrar la lámina de acero sobre la armadura. (Fuente: Wikipedia)

Vamos entonces a montar el circuito básico:

La imagen es bastante descriptiva pero aclararemos las conexiones básicas. Haremos una conexión a la pata de la izquierda del zumbador que enlazará con el PIN GND de nuestro Arduino UNO. 

Para la pata de la derecha, haremos una conexión con el PIN 12 de nuestro controlador.

Perfecto, ya tenemos montado nuestro circuito.

Ahora vayamos a por el código:
// Introducimos la variable por donde saldrá nuestra señal digital hasta el zumbador
int speakerPin = 12;
 // Definimos una variable con el número de tonos que va a reproducir
int numTones = 10;
int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
//                  mid C  C#   D     D#    E     F     F#    G     G#   A
// Arriba se muestran las equivalencias entre frecuencias y Notas de la escala natural, no están todas declaradas pero existen.
void setup()
{
// Generamos un bucle que recorra nuestro vector. Este será el encargado de introducir una determinada frecuencia al zumbador cada vez, conforme hayamos declarado el vector de tonos.
  for (int i = 0; i < numTones; i++)
  {
    tone(speakerPin, tones[i]);
    delay(500);
  }
  noTone(speakerPin);
}
void loop()
{
}

A continuación os dejo un video de la escala que reproducirá el buzzer:



Ahora vayamos un poco más allá. Si tienes nociones básicas de música será fácil trastear con el código consiguiendo que nos reproduzca melodías de forma digital.

Os dejo una propuesta de código que interpreta las primeras notas de la conocida carros de fuego:

// Introducimos la variable por donde saldrá nuestra señal digital hasta el zumbador

int speakerPin = 12;
 // Definimos una variable con el número de tonos que va a reproducir
int numTones = 10;
int song[] = {261, 349, 392, 440, 392, 330, -10, 261, 349, 392, 440, 392, -10, -10, 261, 349, 392, 440, 392, 330, -10, 330, 349, 330, 261, 261};
//  int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
//                  mid C  C#   D     D#    E     F     F#    G     G#   A
// Arriba se muestran las equivalencias entre frecuencias y Notas de la escala natural, no están todas declaradas pero existen. Uso una frecuencia de -10 para generar un sonido que apenas se oiga y que sustituya al silencio que debería sonar en la melodía. Os invito a que compartáis una solución mejor para evitar que suene el buzzer en esa posición.
void setup()
{
// Generamos un bucle que recorra nuestro vector. Este será el encargado de introducir una determinada frecuencia al zumbador cada vez, conforme hayamos declarado el vector de tonos.
  for (int i = 0; i < numTones; i++)
  {
    tone(speakerPin, tones[i]);
    delay(500);
  }
  noTone(speakerPin);
}
void loop()
{
}

A continuación os dejo otro video donde suena el trozo de carros de fuego:


Espero como siempre que os haya gustado el tutorial y que cualquier duda, inquietud o sugerencia nos la dejéis en los comentarios más abajo.

C.