Vamos a jugar un poco con sonidos. Como probablemente ya sabrás, el sonido son vibraciones. El sonido de una guitarra por ejemplo, se produce por las vibraciones de las cuerdas. Por lo tanto, para producir sonido con Arduino necesitamos algo que genere vibraciones. En el siguiente experimento haremos esto mediante un zumbador piezoeléctrico que pite.
El Zumbador Piezoeléctrico
El micrófono de contacto, también conocido como piezo zumbador, es un componente electrónico formado a partir de la combinación de dos discos de distintos materiales. Uno de ellos es metálico y el otro, generalmente es de cerámica, y ambos tienen propiedades piezoeléctricas. Cuando se le aplica un voltaje al componente, los materiales se repelen produciendo un “click” audible (chasquido). Poniendo a cero la diferencia de tensión, hará que los materiales vuelvan a su posición inicial, produciendo de nuevo un sonido de “click”.
Conecta el zumbador al pin digital 8 y a tierra. No importa cual de los pines está conectado a que pin. Para hacer vibrar al piezoeléctrico ahora, necesitamos hacer que el pin digital cambie entre HIGH y LOW repetidamente, esto es, alternar entre 5V y 0V. Se parece bastante a hacer parpadear a un LED, ¿verdad?. De hecho, el programa para que el zumbador suene es muy parecido al ejemplo “Blink”.
int speakerPin = 8; void setup() { pinMode(speakerPin, OUTPUT); } void loop() { digitalWrite(speakerPin, HIGH); delay(1000); digitalWrite(speakerPin, LOW); delay(1000); }
Este programa hace que el material dentro del piezoeléctrico se repela y vuelva a su posición normal en un intervalo de 2 segundos. Lo que escuchas es un “click” cada segundo. Pero para poder generar un tono, necesitamos hacer que el piezoeléctrico oscile más rápido. Podemos conseguirlo simplemente reduciendo el tiempo de retraso. Prueba cambiando el delay
a un milisegundo:
int speakerPin = 8; void setup() { pinMode(speakerPin, OUTPUT); } void loop() { digitalWrite(speakerPin, HIGH); delay(1); digitalWrite(speakerPin, LOW); delay(1); }
Tonos
Ahora ya sabes como generar sonido con Arduino y un zumbador piezoeléctrico cambiando el pin entre ’0′ y ’1′ un determinado número de veces por segundo. Esta cantidad es la frecuencia, y obtendrás diferentes tonos dependiendo de su valor. A alta frecuencia, esto es, más oscilaciones por segundo, obtendrás sonidos muy agudos, mientras que a baja frecuencia, obtendrás sonidos más graves.
Los tonos tienen nombres: Do (C), Re (D), Mi (E), Fa (F), Sol (G), La (A), Si (B). De estos tonos, Do (C) tiene la frecuencia más baja a 262 Hercios, mientras que Si (B) tiene la más alta a 494 Hz. Esto significa que necesitamos hacer oscilar al pin 262 veces por segundo para que suene un Do (C) y 494 veces por segundo para que suene un Si (B).
Si quieres hacer sonar tonos diferentes, tienes que cambiar la cantidad de tiempo en que el pin está en ON y OFF. Basta con cambiar el valor de la función delay(1)
. Sólo hay un problema: para tocar los tonos, deben ser controlados con más precisión. En vez de utilizar la función delay, deberías usar la función delayMicroseconds
. Como recordarás, el delay
hace una pausa del orden de milisegundos, mientras que el delayMicroseconds
la hace en microsegundos, es decir, 1000 veces menor que un milisegundo.
La siguiente ecuación describe la relación entre las dos funciones:
delay(1) = 1000 * delayMicroseconds(1) = delayMicroseconds(1000)
Esto quiere decir que el programa que has utilizado para tocar Beep, también se puede escribir como:
int speakerPin = 8; void setup() { pinMode(speakerPin, OUTPUT); } void loop() { digitalWrite(speakerPin, HIGH); delayMicroseconds(1000); digitalWrite(speakerPin, LOW); delayMicroseconds(1000); }
Melodías
Una melodía es una combinación de notas. Sin embargo, si quisiéramos tocar una melodía en un zumbador cómo hemos hecho en los ejemplos anteriores, no acabaríamos nunca. En lugar de tener que calcular el tiempo del delay dependiendo de la frecuencia, y decidir cuantas veces hacer oscilar al pin dependiendo de la duración de la nota, hemos hecho una función llamada play()
. Puedes leer acerca de cómo usarla para tocar melodías aquí.