Proyecto con Arduino: reproducir archivos de audio de una tarjeta microSD

Esta entrada es muy sencilla porque como se usa una biblioteca externa el código no es nada más que usar las instrucciones de dicha biblioteca. Pero como tiene ciertas particularidades, he preferido dedicarle un post entero en vez de juntar el audio y las luces de las entradas antiguas en un solo post.

Lo único que hace este código es reproducir en bucle un archivo de audio guardado en una memoria microSD, con 3 segundos de intervalo entre reproducción y reproducción.

Las piezas que necesita el circuito son, aparte del arduino, un altavoz de 8 ohmios, y un módulo de tarjeta microSD.

 

El circuito del reproductor de audio, que esta vez tiene mucha mejor pinta porque he usado el editor Fritzing, es este:

Nota sobre el editor: Tiene bastantes módulos precargados, pero el de lector de tarjetas microSD no se encuentra entre ellos. He sacado el modelo de aquí. Para añadirlo solo hay que pulsar Archivo –>Abrir, y seleccionar el archivo fzpz que se haya descargado.

Lo que tiene este programa, como ya he dicho, es que no hay que “programar” nada. Toda la lógica se encuentra en una biblioteca creada específicamente para reproducir archivos de una tarjeta microSD, incluyendo los pines que deben conectarse al módulo lector y al altavoz. Si os fijáis, en el código no hay definido nada, solo se inicializa la tarjeta, se comprueba que el archivo esté donde debe estar, y se reproduce.


#include <sd_l0.h>
#include <sd_l1.h>
#include <sd_l2.h>
#include <SimpleSDAudio.h>
#include <SimpleSDAudioDefs.h>


void setup() {
Serial.begin(9600);
Serial.println("Initializing SD card...");
if (!SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER)) {
Serial.println("initialization failed. Things to check:");
Serial.println("* is a card is inserted?");
Serial.println("* Is your wiring correct?");
Serial.println("* maybe you need to change the chipSelect?");
while(1);
} else {
Serial.println("Wiring is correct and a card is present.");
}
if(!SdPlay.setFile("ALARMA.WAV")) {
Serial.println("file not found on card! Error code: ");
Serial.println(SdPlay.getLastError());
while(1);
} else {
Serial.println("file found.");
}
}

void loop() {
Serial.print("Playing... ");
SdPlay.play();
while(!SdPlay.isStopped()) {
; // nada
}
Serial.println("done.");
delay(3000);
}

Sobre el código y el archivo de audio:

La maravillosa biblioteca para reproducir archivos de una tarjeta microSD usando un pin PWM es SimpleSDArduino y se puede descargar aquí. Hay que añadir la biblioteca al proyecto desde el IDE de Arduino porque no la tiene integrada.

Los archivos de audio tienen que tener un formato muy específico, la tarjeta microSD tiene que haberse formateado – nada de formato rápido: el lento -, y no se debe cambiar el nombre del archivo una vez en la tarjeta.

El archivo debe tener un nombre “antiguo”, de los que tenían los archivos en MS-DOS (no más de 8 caracteres, sin espacios, solo letras, números, y unos pocos caracteres especiales que no voy a enumerar porque tenéis google para estas cosas), y estar en formato .wav. La conversión de archivos .mp3 a ese formato la podéis hacer en esta web.

Las opciones de conversión son:

  • Bit Resolution: 8 Bit
  • Sampling Rate: 16 000 Hz
  • Audio Channel: Mono
  • PCM Format: PCM unsigned 8-bit

Esta es la única forma de conseguir que al reproducirse el audio, se oiga sin un montón de estática de fondo. AUNQUE aún así, se oirá el cuádruple de rápido y bastante más agudo – debido a la conversión -. He conseguido hacer que la velocidad sea la misma ralentizando el audio proporcionalmente usando esta web antes de realizar la conversión, pero aún así se oye mucho más agudo que el audio original.

De nuevo, estoy segura de que hay alguna forma de solucinar esto en la conversión, pero prefiero modificar el archivo ANTES de la conversión para que el archivo convertido suene como debe, porque me parece lo más sencillo.

 

Y eso es todo.

************************************************************

Espero que esta entrada pueda ser de utilidad, y si no, como siempre, aquí tenéis un gato para compensar.

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.