Reproduciendo sonidos en Arduino gracias a la tarjeta SD y un altavoz

 Hola!

En esta entrada partimos de la infraestructura y conocimientos adquiridos en la entrada relacionada con el manejo de la tarjeta SD para reproducir, gracias a unos altavoces, sonidos en formato .wav grabados en la partición raíz (directorio principal y no subcarpetas).

 

Diagrama de conexión


 En mi caso adquirí un par de altavoces con conectores PH2.54 de 3W y 4 ohmios por 2,32 euros (solo se ha usado uno para este proyecto) y he conseguido que funcionen, a pesar de que se recomienda el uso de altavoces de 8 ohmios y menos potencia, es recomendable incluir una resistencia en serie de 100 ohms o superior entre el pin digital 9 y el VCC del altavoz. El circuito utilizado es el del semáforo al que hemos añadido la tarjeta SD y el altavoz con las características indicadas. Se puede potenciar el sonido con un transistor. La reproducción del audio con lo indicado es muy pobre en cuanto a calidad.

Conversión del formato del fichero wav

El formato del fichero wav debe ser el siguiente:

-Samples Per second(Hz):16000
-Channel :Mono
- Bits Per Sample: 8

Con objeto de simplificar la gestión del microcontrolador para realizar la reproducción del fichero wav.

Se puede hacer uso de herramientas de conversión online como:

https://audio.online-convert.com/convert-to-wav

Donde las opciones para generar el nuevo fichero serían:

Change bit resolution: 8
Change sampling rate: 16000
Change audio channels: Mono

 Evitar descargas de potenciales amenazas software escondidas bajo paquetes de conversión de audio, tal y como se indica en las referencias de las fuentes al final de la entrada, mejor usar esta herramienta online.


Código 

Importamos la librería TMRpcm.h, en el IDE Arduino, en Herramientas, Administrar bibliotecas y buscar TMRpcm e instalar.
Para hacer uso de las propiedades de la librería solo hay que declarar una variable objeto del tipo de la librería
 TMRpcm tmrpcm;

En Arduino UNO el pin que controla la señal digital del altavoz es el 9. Recordar iniciar la tarjeta en el setup y verificar que permite leer. Es recomendable controlar si está reproduciendo sonido antes de intentar reproducir un nuevo fichero con el método tmrpcm.isPlaying().
 
#include <SD.h>
#include <SPI.h>
#include <TMRpcm.h>
//Se declara un objeto del tipo de la librería
TMRpcm tmrpcm;
...
void setup(){
char *file;
... 
iniciarSD();
//se define el pin del altavoz
tmrpcm.speakerPin=9;
    tmrpcm.setVolume(1);
file ="2.wav";
if( !tmrpcm.isPlaying() )
    {Serial.println(F("Se reproduce la música"));
     tmrpcm.play(file;
    }
  
...
}
void loop(){
char *file;
// put your main code here, to run repeatedly:
   buttonState = digitalRead(buttonPin);
    if(buttonState==HIGH){// && !encendido){
    enciendeSemaforo();
    apagaSemaforo();
    //encendido = true;
    tmrpcm.setVolume(2);
file ="1.wav";
    tmrpcm.play(file);
    delay(6000);
 
  }
}
El método setVolume permite ajustar el volumen del fichero de audio, pero cuanto más volumen le demos peor calidad tendrá el sonido reproducido. Todos estos métodos se explican en la página del proyecto de la librería en https://github.com/TMRh20/TMRpcm/wiki
Se puede mejorar algo la calidad del sonido con el método  quality(1)  .

Circuito real con la protoboard



El resultado final del proyecto lo podemos ver en el siguiente vídeo:

https://youtu.be/ECvZmThppOI

 
A partir de ahora y con algo de imaginación podemos dotar de mayor interactividad a nuestros proyectos

Y esto es todo!
Gracias por vuestro tiempo y atención!
Un saludo

Fuentes y herramientas

  • https://audio.online-convert.com/convert-to-wav
  • https://www.instructables.com/Playing-Wave-file-using-arduino/
  • https://www.aranacorp.com/es/dale-voz-a-tu-proyecto-arduino/
  • https://www.youtube.com/watch?v=DIrd697688s
  • http://www.hackerspace-ffm.de/wiki/index.php?title=SimpleSDAudio