Buscar en este blog

lunes, 11 de febrero de 2019

ZUMBADOR PEZOELÉCTRICO

Un zumbador piezoeléctrico es un dispositivo que consta
internamente de un disco de metal, que se deforma
(debido a un fenómeno llamado piezoelectricidad)
cuando se le aplica corriente eléctrica. Lo interesante
es que si a este disco se le aplica una secuencia de
pulsos eléctricos de una frecuencia suficientemente
alta, el zumbador se deformará y volverá a recuperar
su forma tan rápido que vibrará, y esa vibración
generará una onda de sonido audible.

Recordemos que un sonido aparece cuando vibra
alguna fuente y estas vibraciones son transmitidas en forma de onda a través de
algún medio elástico (como el aire o el agua). Si la frecuencia de esa onda está dentro
de un rango determinado (el llamado “espectro audible”, el cual va de 20 Hz a
20 KHz), cuando llega al oído humano esas oscilaciones en la presión del aire son
convertidas en el sonido que nuestro cerebro percibe.
Cuanto mayor sea la frecuencia de la onda sonora, más agudo será el sonido
resultante (y al revés: cuanto menor es esa frecuencia, más grave es el sonido). Por
tanto, para generar diferentes tonos con nuestro zumbador deberemos hacer vibrar
la membrana a distintas frecuencias. Para ello, deberemos emitir desde nuestro
Arduino pulsos digitales con la frecuencia deseada. Los zumbadores admiten voltajes
desde 3 a 30 voltios, así que los 5 V de una salida digital de Arduino los soporta
perfectamente.

Así pues, para hacer sonar un zumbador típico (como por ejemplo, el
producto no 160 de Adafruit o similar), simplemente deberemos conectar uno de sus
terminales a tierra y el otro a un pin-hembra digital del Arduino configurado como
salida digital. Atención, dependiendo del modelo de zumbador, este puede ser un
componente polarizado o no, por lo que hay que fijarse si tiene alguna marca
indicando la polaridad de sus terminales. Si se desea, al zumbador se le puede conectar en serie un divisor de tensión (de 100 Ω está bien): pero hay que tener en cuenta que cuanta mayor resistencia tenga este divisor, menor será el volumen del sonido generado.
conexión

Ejemplo:


void setup (){
pinMode (8, OUTPUT); //Pin al que está conectado el zumbador
}
void loop (){
digitalWrite (8, HIGH);
delayMicroseconds (1000);
digitalWrite (8, LOW);
delayMicroseconds (1000);
}


Lo que estamos haciendo es enviar consecutivamente pulsos digitales HIGH y
LOW a una velocidad tan elevada que hace vibrar el zumbador a una frecuencia
audible por el ser humano. Concretamente, el pulso HIGH lo hacemos durar 1 ms y el
pulso LOW otro 1 ms, por lo que el período de esta onda cuadrada es de 2 ms
(0,002s). Por tanto, como f = 1/T, la frecuencia de la señal audible generada será de
1/0,002 = 500 Hz.




Las funciones tone() y noTone():

Afortunadamente, normalmente no tendremos que utilizar digitalWrite() ni
analogWrite() para emitir pitidos porque el lenguaje Arduino ofrece dos funciones
especialmente pensadas para ello que nos facilitan mucho la escritura de nuestros
sketches.
tone(): genera una onda cuadrada de una frecuencia determinada
(especificada en Hz como segundo parámetro –de tipo “word”–) y la envía
por el pin digital de salida especificado como primer parámetro, el cual
deberá estar conectado algún tipo de zumbador o altavoz. La forma de la onda cuadrada no se
puede alterar: siempre tiene un valor alto la mitad de su período y un valor
bajo la otra mitad (lo que se llama tener un ciclo de trabajo del 50%).
Tampoco puede alterar el volumen del sonido emitido.

Solo una señal de audio puede generarse en un momento determinado: si ya
hubiera una señal emitiéndose por otro pin diferente del especificado en tone()
(porque tenemos más de un zumbador en nuestro circuito), la señal anterior
continuaría emitiéndose como si nada y la nueva no se llegaría a emitir. Si esa señal
previa estuviera emitiéndose en el mismo pin, entonces el efecto sí que sería la
sustitución de la señal anterior por la nueva. Por lo tanto, si se desea emitir diferentes
señales en múltiples pines, se deberá parar la emisión en uno (con noTone()) para
empezar la emisión en otro.
noTone(): deja de generar la onda cuadrada que en principio estaba
emitiéndose (por una ejecución previa de tone()) a través del pin especificado
como (único) parámetro. Si no hay ninguna señal emitiéndose en ese pin,
esta función no hace nada. No tiene valor de retorno.


Ejemplo: sonido sirena.

int duracion = 250; //Duración del sonido
int freqmin = 2000; //La frecuencia más baja a emitir
int freqmax = 4000; //La frecuencia más alta a emitir
void setup(){
pinMode(8, OUTPUT);
}
void loop(){
int i;
//Se incrementa el tono (se hace más agudo)
for (i = freqmin; i<=freqmax; i++){
tone (8, i, duracion);
}
//Se disminuye el tono (se hace más grave)
for (i = freqmax; i>=freqmin; i--){
tone (8, i, duracion);
}

}

No hay comentarios:

Publicar un comentario