Objetivos
Material requerido.
Todo el material necesario para este curso esta en el Arduino starter kit.
Kit inicio UNO | |
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.
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
xx |
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.
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); }
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: