SONIDO DIGITAL
ÍNDICE:
0.- TEORÍA: EL ALTAVOZ.
1.- SONIDO DIGITAL CON ARDUINO.
0.- TEORÍA:
EL ALTAVOZ
Un altavoz es un transductor electroacústico utilizado para la reproducción de sonido.
La transducción sigue un doble procedimiento: eléctrico-mecánico-acústico. En la primera etapa convierte las ondas eléctricas en energía mecánica, y en la segunda convierte la energía mecánica en ondas de frecuencia acústica.
El sonido se transmite mediante ondas sonoras, en este caso, a través del aire. El oído capta estas ondas y las transforma en impulsos nerviosos que llegan al cerebro y se transforman en señales que se identifican con cosas como música, sonidos y onomatopeyas. Si se dispone de una grabación de voz, de música en soporte magnético o digital, o si se recibe estas señales por radio, se dispondrá a la salida del aparato de señales eléctricas que deben ser convertidas en sonidos; para ello se utiliza el altavoz.
TIPOS:
Existen muchos tipos más, pero éstos son los más comunes y usados.
- Altavoz dinámico o Altavoz de bobina móvil: La señal eléctrica de entrada actúa sobre la bobina móvil que crea un campo magnético que varía de sentido de acuerdo con dicha señal. Este flujo magnético interactúa con un segundo flujo magnético continuo generado normalmente por un imán permanente que forma parte del cuerpo del altavoz, produciéndose una atracción o repulsión magnética que desplaza la bobina móvil, y con ello el diafragma adherido a ella. Al vibrar el diafragma mueve el aire que tiene situado frente a él, generando así variaciones de presión en el mismo o vibraciones, o lo que es lo mismo, ondas sonoras.
- Altavoz electrostático o Altavoz de condensador: Estos altavoces tienen una estructura de condensador, con una placa fija y otra móvil (el diafragma), entre las que se almacena la energía eléctrica suministrada por una fuente de tensión continua. Cuando se incrementa la energía almacenada entre las placas, se produce una fuerza de atracción o repulsión eléctrica entre ellas, dando lugar a que la placa móvil se mueva, creando una presión útil. Tienen mayor coste que los dinámicos.
- Altavoz piezoeléctrico: En estos altavoces el motor es un material piezoeléctrico, que al recibir una diferencia de tensión entre sus superficies metalizadas experimenta alargamientos y compresiones. Si se une a una de sus caras un cono abocinado, éste sufrirá desplazamientos capaces de producir una presión radiada en frecuencia audible. Es poco lineal, con bajo rendimiento y se limita su uso a altas frecuencias. Se aplica en relojes, teléfonos móviles, cámaras fotográficas y de video, juguetes, impresoras, microondas, vehículos, etc.
- Altavoz de cinta: El altavoz de cinta tiene un funcionamiento similar al altavoz dinámico, pero con diferencias notables. La más obvia, en lugar de bobina, el núcleo es una cinta corrugada.
1.- SONIDO DIGITAL CON ARDUINO.
Continuaremos utilizando una salida digital, pero ahora utilizaremos un actuador distinto. Vamos a producir sonidos mediente un zumbador.
NOTAS MUSICALES
Cada nota musical se corresponde con una frecuencia y, por tanto, con una achura de pulso, por lo que usando nuestra tarjeta de arduino, podemos conseguir diferentes notas musicales. indicando al pin correspondiente la frecuencia que debe transmitir.
Monta un zumbador con el Pin9 en el polo positivo del zumbador y el polo negativo a tierra GND de la placa de arduino.
CODIGO:
int sonidoPin=9;
int numeroTonos=7;
int tonos[]={261,294,329,349,440,493};
void setup(){
}
void loop() {
for (int i=0; i<numeroTonos;i++) {
tone(sonidoPin,tonos[i]);
delay(2000);
}
}
EXPLICACIÓN DEL PROGRAMA:
A la hora de escribir el programa hemos utilizado 7 NOTAS musicales que van del DO al SI según la siguiente tabla de frecuencias:
NOTAS MUSICALES // ANCHO DE PULSO // FRECUENCIA
DO-1915-261
RE-1700-294
MI-1519-329
FA-1432-349
SOL-1275-392
LA-1136-440
SI-1014-493
sonidoPin // el PIN9 donde conectemos el positivo del zumbador
numeroTonos // será el número de notas/tonos que vamos a utilizar, en nuestro caso 7 posibles tonos
tonos[] //array que será la frecuencia de cada nota musical.
La función tone(), sirve para para enviar por el pin9 una señal de 5v con una duración de pulso variable, es decir a una determinada frecuencia.
tone (pin, frecuencia);
noTone (pin); // que silencia dicho pin
for (variablej, condición; incremento){}
// es un bucle que utilizaremos para que las notas se produzcamos lo hagan secuencialemente, dando lugar a varias escalas.
ACTIVIDAD:
1.- Intenta conseguir modificar las diferentes frecuencias y número de notas musicales para realizar tu propia melodía.
EJEMPLO DE CÓDIGO DE LA MELODIA DE CARROS DE FUEGO.
int speakerPin = 13;
int numTones = 10; //variable con el número de tonos a reproducir solo en el setup()
int numSong=26; //variable con el número de tonos de carros de fuego
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]); //aquí solo tocará los tonos
delay(500);
}
noTone(speakerPin);
delay (2000);
}
void loop(){
for (int i = 0; i < numSong; i++) {
tone(speakerPin, song[i]); //aquií tocará la canción de carros de fuego
delay(500);
}
noTone(speakerPin);
}
2.- PRÁCTICA: "ÁRBOL DE NAVIDAD"
Diseña y construye tu árbol de navidad con luces y una canción.
CÓDIGO (canción de carros de fuego):
int speakerPin = 5;
int numTones = 10;
int numSong=26;
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};
int contador=0;
void setup(){
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
}
void loop(){
digitalWrite(13,HIGH);
digitalWrite(12,HIGH);
delay(20);
digitalWrite(13,LOW);
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);
digitalWrite(7,HIGH);
digitalWrite(6,HIGH);
delay(500);
digitalWrite(13,HIGH);
digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(8,LOW);
digitalWrite(7,LOW);
digitalWrite(6,LOW);
delay(500);
contador=contador+1;
if (contador%20==0) {
for (int i = 0; i < numSong; i++){
tone(speakerPin, song[i]);
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
delay(500);
digitalWrite(13,HIGH);
digitalWrite(12,LOW);
digitalWrite(11,HIGH);
delay(50);
}
noTone(speakerPin);
}
}
Arduino UNO Tutorial 7 - Piezo Beep
In this easy Arduino UNO tutorial, we are going to use a simple Piezo Transducer to create some beeps. Piezo Transducers are similar to speakers in that an applied voltage causes the piezo crystal to move and make a sound. In order to get a tone a square wave needs to be applied usually in the range 20Hz to 20kHz.
Don't confuse piezo transducers with piezo sounders or piezo buzzers. These behave in the same way as buzzers and have a built in oscillator and are switched on by a d.c. signal voltage. They are therefore limited to one frequency
We will use the PWM functionality of the Arduino to create a tone on the piezo transducer.
Note: For this tutorial we will not use the Arduino function tone() as this has a number of restrictions
- Can only be used on one pin at one time
- Use of the tone() function will interfere with PWM output on pins 3 and 11
The Arduino PWM runs at 500Hz so will produce a nice audible tone. We use the Piezo Transducer available here.
Connect the transducer to pin 9 and 0V on the Arduino
In the Arduino Sketch shown below we have created a separate function beep() which sends the PWM signal to the transducer, waits for a small delay, then turns the transducer off, then has another small delay. Thus, it beeps once. The delay (in milliseconds) is passed as a parameter. The PWM pulse duration (20 in sketch below) should not be important as it is the frequency that matters; set it to somewhere in the middle of the PWM range.
The sketch below beeps 3 times at startup and then beeps continuously at a slower rate.
/* Piezo This example shows how to run a Piezo Buzzer on pin 9 using the analogWrite() function. It beeps 3 times fast at startup, waits a second then beeps continuously at a slower pace */ void setup() { // declare pin 9 to be an output: pinMode(9, OUTPUT); beep(50); beep(50); beep(50); delay(1000); } void loop() { beep(200); } void beep(unsigned char delayms){ analogWrite(9, 20); // Almost any value can be used except 0 and 255 // experiment to get the best tone delay(delayms); // wait for a delayms ms analogWrite(9, 0); // 0 turns it off delay(delayms); // wait for a delayms ms