Reproductor MP3 con Arduino II


 << Reproductor Mp3 con Arduino I (Circuito)

La estructura de la SD

Es este post voy a intentar explicar un poco el código de nuestra 'Gramola' con corazón de Arduino.
El principal problema que encontré para realizar este proyecto, fue la limitación de la librería SD, con su FAT  reducida que sólo permitía la los nombres en formato 8.3.
La solución fue crear un pequeño catálogo en un archivo de texto de donde poder leer las entradas.



La estructura de directorios en la SD tiene el siguiente formato:
raiz
 +-artistas.txt
 +-[ARTIST01]
 |   +-album.txt
 |   +-[ALBUM01]
 |   |   +-track.txt
 |   |   +-track001.mp3
 |   |   +-track002.mp3
 |   |   .....
 |   |   +-track0nn.mp3
 |   +-[ALBUM02]
 |   .......
 |   +-[ALBUMnn]
 +-[ARTIST02]
 .....
 +-[ARTISTnn]
Es decir hay tres niveles : artista, álbum y  pista. Cada nivel tiene un fichero de texto con las entradas del catálogo (una linea de texto por cada artista, álbum  o canción).
Los nombres de las carpetas y los archivos deben ser tal como están en el esquema (siempre podéis cambiar el código).
Es un poco engorroso para crear la tarjeta, pero.... vale la pena.Yo he utilizado un programa que facilita mucho la tarea MP3Tag, que permite exportar a texto las pistas de un directorio y renombrar los mp3.

El código

Consta de una librería 'AGMp3' que maneja el chip y la SD , y el sketch del reproductor. Podéis descargarlos de aquí


La librería se encarga de la inicialización del chip,el bus SPI y  la SD. Tiene métodos para escribir/leer en los registros del chip, y para reproducir un mp3.
En cuanto al sketch comienza leyendo el fichero 'artistas.txt' que se encuentra en la raiz de la SD y luego a través del encoder y los botones 'navega' por la estructura de directorios. En cada nivel lee el fichero de texto correspondiente para cargar la lista del catálogo. En el último nivel reproduce el mp3 seleccionado.
Una vez se esta reproduciendo, el encoder se encarga de variar el volumen, que se muestra en el LCD con un valor de 0 a 10. El botón adelante permite pasar a la siguiente canción durante la reproducción.
Para mostrar el progreso de la canción, he definido unos caracteres sobre el LCD.

Aquí os dejo unas cuantas fotos del proceso de construcción:



Espero que os guste ! ....

 << Reproductor Mp3 con Arduino I (Circuito)

Si te ha gustado, recuerda compartirlo en tu red social favorita. Gracias

25 comentarios:

  1. Sencillamente impresionante...mis felicitaciones en breve te pedire ayuda ya que quuiero manejar un reproductor mp3.

    ResponderEliminar
  2. Gran tutorial y gran acabado, gracias por el aporte

    ResponderEliminar
  3. Excelente, me gustaría saber si hay la posibilidad de que al oprimir un botón active un audio en especifico, por si quiero acceder a canciones de una forma rápida y sin tener que buscarlas.
    Felicidades por el proyecto.

    ResponderEliminar
  4. Definitivamente impresionante, quiero felicitarte por tu gran trabajo. Estoy muy interesado en hacer algo similar utilizando la board VS1003B pero ajustando la programación para un PIC. Quisiera pedirte el favor, si es posible de detallar un poco mas la parte del modulo MP3 para ajustar las rutinas para la reproducción del MP3, ya tengo la parte de lectura de la memoria SD.

    Saludos.

    ResponderEliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. Hola y saludos me gusto tu proyecto, pero tengo el problema q no consigo el encoder rotary del modelo q pides, siempre me ofrecen el enconder q te trae 4 pines (VCC,GND,D0 y A0), intente solo ponerle push boton pero en ENC A funciona la lista va de arriba hacia abajo y el volumen lo sube, pero en ENC B no hace nada =(. me gustaria saber q tengo q cambiar en el codigo para q funcione el otro u otra solucion q me ayude

    ResponderEliminar
  8. @Dariel H.Arroyo Gonzalez
    Perdona pero no entiendo muy bien el problema. Puedes indicar el modelo de encoder que tienes (alguna referencia o la dirección dónde los has comprado).

    ResponderEliminar
  9. @Arduino Guay

    Saludo y gracias, lo que pasa es que soy de mexico y cuando voy a pedir el encoder de rotacion en las electronicas, me ofrecen el FC-03.El modelo que pides no lo encuentro en mi pais.

    http://elkine.altervista.org/arduino/sensor/ir.html

    Ahora la duda es si ese enconder me sirve, que tendria que hacer para unirlo con un potencioemtro,de cuantos ohms seria, que tendria que modificar para que funcione o sea equivalente al original y que tendria que mover en el cableado hacia el arduino.

    ResponderEliminar
  10. @Dariel H.Arroyo Gonzalez

    Se me olvido el modelo que pides no lo encuentro en mi pais ni ninguno parecido siempre me ofrecen el modelo que te puse y un link para que veas.

    ResponderEliminar
  11. @Dariel H.Arroyo Gonzalez
    Lo que se ve en el enlace es un encoder infrarrojo de los que se utilizan para controlar la velocidar de un motor, pero lo que hace falta es un encoder rotatativo (manual).
    Te recomiendo que lo pidas por ebay, son baratos y sin gastos de envío desde algún pais asiático ..
    Rotary encoder

    ResponderEliminar
  12. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  13. @Dariel H.Arroyo Gonzalez
    También lo puedes encontrar en multitud de tiendas on-line incluso en Amazon. ;-)

    ResponderEliminar
  14. Hola,
    ¿Conoces algún modulo MP3 que pueda almacenar una marca de reproducción? La idea es un reproductor para invidentes. Antes de apagarlo que guarde un punto de reproducción y al encenderlo que continúe desde ahí.
    Gracias de antemano

    ResponderEliminar
  15. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  16. @Anónimo
    Hay pocos módulos de mp3 que conozca, casi todos incluyen chips VLSI y se suelen controlar desde un micro.
    Lo que quieres deberás implementarlo tu directamente guardando la posición en EPROM por ejemplo para evitar la pérdida.

    ResponderEliminar
  17. Excelente trabajo, voy a tratar de reproducirlo felicidades, para que funcione como lector de mp3 desde una memoria USB , me puedes orientar? saludos

    ResponderEliminar
  18. @Anónimo
    Por desgracia el Arduino no tiene capacidad para actuar como host USB, al menos los más simples (uno, pro mini, atmega, ...) y otros como el DUE tienen alguna capacidad pero limitada.
    La única opción 'sencilla' al menos teóricamente es utilizar una shield USB como la de sparkfun
    SparkFun USB Host Shield

    ResponderEliminar
  19. Olá Guay, Gostaria de saber como fazer o SD Card funcionar com a estrutura proposta. Não entendi porque as pastas com os txt´s dentro. Tenho que colocar as musicas dentro dessas pastas seguindo o FAT32 format?

    ResponderEliminar
  20. Existe alguma forma de usar o IDTag do mp3 para mostrar o nome e não precisar usar essa montagem do cartão SD?

    ResponderEliminar
  21. hola, voy a hacer exactamente este proyecto pero me prodrian hacer el favor decirme como va toda la conexión y tambien como iniciar programar la tarjete arduino, es que intente y puse el codigo en el programa y decia error de tarjeta arduino . espero pronta respuesta

    ResponderEliminar
  22. Can't seem to download anything from Google drive, do you have the sketch etc zipped besides google drive that we can download? If so, where?

    ResponderEliminar
  23. Lo mas parecido a lo que quiero hacer! GuayGracias!
    El zip de sd... Está mal o es que hay que meterlo en la sd tal cual?
    Jerry

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.