1. El Octavo Bit
  2. / Arduino
  3. / Proyectos para Arduino
  4. / Sonido con Arduino. Zumbador

Sonido con Arduino. Zumbador

| Actualizado:
Comentarios: 0

Sonido con Arduino. Zumbador
Sonido con Arduino. Zumbador

En este post vamos a aprender a generar sonidos con Arduino. Utilizaremos una señal eléctrica para hacer vibrar la membrana del zumbador.

Sonido con Arduino

La onda sonora se descompone en dos parámetros:

  • Frecuencia, se mide en HZ. El oído humano escucha a una frecuencia de 20Hz a 20KHz. Se clasifican en graves (bajas frecuencias) y agudas (altas frecuencias).
  • La Amplitud, se mide en Voltios y mide cuanto volumen tiene el sonido que estamos escuchando.

Los dispositivos que convierten una señal eléctrica en una onda sonora se denominan transductores electroacústicos y pueden ser, bien un altavoz o un zumbador piezoeléctrico o buzzer pasivo.

Generar sonido con un buzzer pasivo

Un buzzer pasivo es un dispositivo que permite convertir una señal eléctrica en una onda de sonido. Son transductores piezoeléctricos, que tienen la propiedad especial de hacer vibrar una membrana al atravesar el material piezoeléctrico con una señal eléctrica. En esta primera práctica probaremos a producir sonido con la función digitalWrite(), alternando los valores HIGH y LOW

Material necesario:

  • Arduino UNO o similar.
  • Protoboard.
  • Buzzer pasivo.
  • Cables.
  • Resistencia.

Esquema:

Esquema para generar sonido con un zumbador

El esquema es muy sencillo: conectamos el GND al negativo y el positivo al pin 8. Si lo montamos al revés, simplemente no sonará.

Código:

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

En la función setup() configuramos el pin 8 como una salida de corriente (OUTPUT). Mientras que en la función loop() se hace pasar una corriente por el zumbador durante 5 segundos, cortamos y esperamos 10 segundos.

Y si queremos que la frecuencia del sonido vaya cambiando, utilizamos el mismo esquema y el código sería:

int tono = 500; //Nota inicial. Es el período de la onda
void setup (){
  pinMode (8, OUTPUT);
}
void loop (){
  for (tono=10000; tono>=100; tono=tono-10){
    digitalWrite (8, HIGH);
    delayMicroseconds (tono/2);
    digitalWrite (8, LOW);
    delayMicroseconds (tono/2);
  }
}

SONIDO CONTROLADO POR POTENCIÓMETRO

Material necesario:

  • Arduino UNO o similar.
  • Protoboard.
  • Zumbador.
  • Potenciómetro
  • Cables.
  • Resistencia.

Si aplicamos un potenciómetro, el esquema para su montaje sería:

Esquema para controlar el sonido con un potenciómetro

Para el montaje la patilla VCC del potenciómetro la conectamos a la salida de 5V, OUT a la salida analógica A0 y GND a tierra.

Código:

int tono = 1000; //Nota inicial. Es el período de la onda
void setup (){
  pinMode (8, OUTPUT);
  pinMode (A0, INPUT);
}
void loop (){
  digitalWrite (8, HIGH);
  delayMicroseconds (tono/2);
  digitalWrite (8, LOW);
  delayMicroseconds (tono/2);
  tono=analogRead(A0);
  tono=map(tono,0,1023,1000,5000);
}

En el código anterior tenemos la variable tono, corresponde con la lectura del pin analógico A0, que utilizamos para el potenciómetro.

Sirena de emergencia

Arduino ofrece dos funciones especialmente pensadas para generar sonidos a una frecuencia determinada y nos facilitarán mucho la escritura de nuestros códigos. Utilizando las funciones tone() y noTone(), es la mejor forma si queremos generar señales de tono variable.

Material necesario:

  • Arduino UNO o similar.
  • Protoboard.
  • Zumbador.
  • Cables.
  • Resistencia.

Esquema para su montaje:

Montaje de una sirena en Arduino

Código:

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(9, OUTPUT);
}
void loop(){
  int i;
  //Se incrementa el tono (se hace más agudo)
  for (i = freqmin; i<=freqmax; i++){
    tone (9, i, duracion);
  }
  //Se disminuye el tono (se hace más grave)
  for (i = freqmax; i>=freqmin; i--){
    tone (9, i, duracion);
  }
}

Con el mismo esquema podemos reproducir una melodía. Para lograrlo, el código emite, una tras otra y durante el tiempo preciso, las frecuencias exactas correspondientes a las notas musicales de esa melodía.

//Frecuencias de las notas de la melodía
int melodia[] = {262, 196, 196, 220, 196, 247, 262};
/*Duración de las notas (4 = dura un cuarto de tiempo, 8=dura una octava parte, etc.)*/
int duracionNota[] = {4,8,8,4,4,4,4,4 };
void setup() {
  int i;
  //Recorro las 7 notas de la melodía una tras otra
  for (i = 0; i < 8; i++){
  /*Para calcular la duración de la nota, se divide un segundo por la
  cantidad marcada en duracionNota[]. Por ejemplo, un cuarto de tiempo
  son 1000/4 segundos, una octava parte son 1000/8 segundos, etc. */
  tone(9, melodia[i], 1000/duracionNota[i]);
  /*Como la función tone() no es bloqueante, el sketch sigue
  ejecutándose sin parar después de ella. Para evitar volver arriba del
  loop enseguida y distinguir las notas, establezco un tiempo mínimo
  entre ellas (la duración de la nota + 30% parece ir bien) parando el
  sketch */
  delay(1300/duracionNota[i]);
  // Se deja de emitir la nota
  noTone(9);
  }
}
void loop(){}

Artículos que te pueden interesar

Arduino y Processing Comunicación básica
Arduino y Processing Comunicación básica por puerto serie

Arduino y Processing Comunicación básica por puerto serie

| Actualizado:
Comentarios: 0

En este tutorial veremos como comunicar Arduino con processing utilizando dos ejemplos muy sencillos. En el primero de ellos, mandaremos una variable para que processing nos la muestre en la consola. En el segundo, cambiaremos el color de fondo de…

Detector de incendios con Arduino
Detector de incendios con Arduino y el sensor KY-026

Detector de incendios con Arduino y el sensor KY-026

| Actualizado:
Comentarios: 0

El módulo KY-026 es un sensor de llama que permite detectar un fuego gracias a un sensor óptico sensible a la radiación emitida por la llama. El sensor puede detectar fuentes de luz en el rango de una longitud de…

Motor paso a paso 28BYJ-48 con Arduino
Conexión del motor paso a paso 28BYJ-48 y el módulo ULN2003 con Arduino

Conexión del motor paso a paso 28BYJ-48 y el módulo ULN2003 con Arduino

| Actualizado:
Comentarios: 0

En este artículo veremos el motor paso a paso unipolar 28BYJ-48. Es un motor barato y que podemos utilizar en gran cantidad de proyectos como robots, impresoras 3D o fotocopiadoras. Nos vamos a centrar en la programación del motor con…

Robot Arduino 4 ruedas
Robot Arduino controlado por bluetooth, con 4 ruedas

Robot Arduino controlado por bluetooth, con 4 ruedas

| Actualizado:
Comentarios: 0

En un artículo anterior construimos un robot arduino controlado por bluetooth con dos ruedas y el módulo controlador L298N, en este caso utilizaremos el controlador de motor L293D que permite la conexión de 4 motores reductores. Es interesante que antes…

Comentarios - 0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *