Hay un momento en que un proyecto deja de parecer una maqueta: cuando suena. Un timbre que dice quién llegó, una alarma de riego que avisa con voz en vez de un pitido, un juguete que responde con efectos. Todo eso es el mismo circuito, y es más simple de lo que parece.

En este proyecto vas a armar un reproductor de pistas controlado por una perilla: giras para elegir el archivo, presionas para reproducir, y el sonido sale por un parlante. Al final vas a saber cómo se reparte el trabajo entre los cuatro bloques que forman cualquier sistema de audio embebido, y por qué intentar que el microcontrolador haga todo solo es un mal negocio.

El problema: por qué un Arduino no puede reproducir MP3

Empecemos por lo que no se ve. Un archivo MP3 está comprimido: para convertirlo en sonido hay que decodificarlo, y eso significa hacer transformadas de coseno y filtros de banco en tiempo real, unas 44.100 veces por segundo. Un ATmega328P a 16 MHz con 2 KB de RAM no da el ancho para eso. Puedes hacerlo sonar con audio PCM crudo a baja calidad y poco más.

La salida es delegar. Un módulo decodificador dedicado trae su propio chip que lee el archivo desde la microSD, lo decodifica y entrega audio analógico. El Arduino solo le manda órdenes cortas por el puerto serie: "reproduce la pista 3", "sube el volumen", "pausa". Pasa de ser el que hace el trabajo pesado a ser el que dirige, y con eso le sobra tiempo para leer el encoder, actualizar una pantalla o lo que quieras agregar después.

Montaje del reproductor de audio con el módulo decodificador y el control rotativo

Los cuatro bloques del sistema

Vale la pena ver el proyecto como una cadena, porque si algo no suena vas a poder aislar el problema por etapas en lugar de revisar todo a la vez.

  1. Almacenamiento: la tarjeta microSD con los archivos de audio.
  2. Decodificación: el módulo reproductor, que lee la tarjeta y convierte el archivo en señal analógica de nivel de línea.
  3. Amplificación: un amplificador clase D que toma esa señal débil y la lleva a la potencia que necesita un parlante.
  4. Control: el Arduino más el encoder rotativo, que deciden qué suena y cuándo.

El bloque que más gente olvida es el tercero. La salida del decodificador es de nivel de línea: unos pocos cientos de milivoltios, pensada para entrar a otro equipo, no para mover un cono. Si conectas el parlante directo vas a escuchar algo, muy bajito y distorsionado, y de paso vas a exigirle al chip una corriente para la que no está diseñado. El amplificador clase D resuelve eso con una eficiencia sobre el 90%, que es la razón por la que módulos del porte de una moneda no necesitan disipador.

Módulo decodificador de audio con lector de tarjeta microSD

El cableado

Del módulo reproductor al Arduino solo van cuatro conexiones, dos de ellas de alimentación:

  • TXO del módulo al pin D8 del Arduino
  • RXI del módulo al pin D9 del Arduino
  • VIN del módulo al 5V del Arduino
  • GND del módulo al GND del Arduino

Fíjate en el cruce: la salida (TX) del módulo entra a lo que el Arduino usa como recepción, y viceversa. Es el error más común de todo proyecto serial y no da ningún síntoma útil cuando está mal: simplemente no pasa nada. Si el módulo no responde, revisa esto antes que cualquier otra cosa.

Los pines D8 y D9 no son el puerto serie por hardware del Uno, sino uno emulado por software (SoftwareSerial). Esa es una decisión a propósito: deja el puerto USB libre para que puedas ver mensajes de depuración en el monitor serial mientras el módulo sigue funcionando. Si usaras D0 y D1 tendrías que desconectar el módulo cada vez que quieras programar la placa.

Del módulo al amplificador va la señal de audio, y del amplificador al parlante:

  • Salida de audio del reproductor a la entrada del amplificador
  • PWR - del amplificador a GND
  • PWR + del amplificador a 5V
  • Salida del amplificador a los dos terminales del parlante

El encoder rotativo se conecta a dos pines digitales para las señales de giro y a un tercero para el pulsador integrado.

El software

Instala desde el gestor de bibliotecas del IDE de Arduino la librería del módulo reproductor que vayas a usar y la del encoder. El ejemplo que viene con la librería del decodificador ya hace lo que necesitas: girar cambia el número de pista, presionar reproduce la pista seleccionada, y el monitor serial informa cuántos archivos encontró en la tarjeta y cuál está activo.

Ese contador de pistas es tu mejor herramienta de diagnóstico. Si el módulo reporta cero archivos, el problema es la tarjeta o el formato, no el cableado ni el código.

Dos cosas que hay que saber sobre la tarjeta:

  • Formatéala en FAT32. Es el único sistema de archivos que estos módulos leen de forma confiable. Una tarjeta de 64 GB que viene de fábrica en exFAT no va a funcionar hasta que la reformatees, y el módulo no te va a decir por qué.
  • El orden de las pistas es el orden de copiado, no el alfabético. Estos decodificadores numeran los archivos según cómo quedaron escritos en la tabla FAT. Si quieres que la pista 1 sea la que tú crees, copia los archivos uno por uno en el orden que quieres, o nómbralos 001.mp3, 002.mp3 y cópialos de a uno.

Sobre el encoder: un encoder rotativo genera dos señales desfasadas 90 grados (cuadratura), y de la comparación entre ambas se deduce el sentido de giro. Los encoders mecánicos como el KY-040 rebotan bastante, así que si notas saltos de dos o tres pistas por cada clic, el problema es el rebote de los contactos. Se arregla con un filtro RC pequeño en las líneas o con antirrebote por software, ignorando cambios que ocurran a menos de unos milisegundos del anterior.

Variantes y mejoras

  • Pantalla en vez de monitor serial. Un OLED SSD1306 por I2C te muestra el número de pista y el volumen sin necesidad de tener el computador conectado. Es el paso que convierte esto en un aparato independiente.
  • Sensor en vez de perilla. Reemplaza el encoder por un sensor PIR o un lector RFID y tienes un timbre que reproduce un mensaje al detectar movimiento, o una caja que cuenta una historia distinta según la tarjeta que le acerques. Es el mismo circuito con otro disparador.
  • Alimentación portátil. Con una batería LiPo y un módulo cargador, el conjunto completo cabe en una caja pequeña. Considera que el amplificador es el que más consume: en reposo casi nada, pero a volumen alto puede pedir varios cientos de miliamperios.

Personalización para Chile

El tutorial original usa placas del ecosistema Qwiic de SparkFun, que no se distribuye acá. Ninguna es imprescindible: lo que importa es la función de cada bloque, y todos tienen equivalente en stock en MechatronicStore.

Módulo reproductor MP3 WAV YX5300 con lector microSD

  • Reproductor MP3/WAV YX5300 Micro SD (SKU M-128). $3.990 CLP. Reemplaza al MY1690X-16S del original: mismo principio, un decodificador con lector microSD que recibe comandos por UART.
  • Encoder rotatorio EC11 KY-040 (SKU GR2-3). $2.100 CLP. Cumple la función del Qwiic Twist. La diferencia es que se lee por pines digitales en vez de I2C, lo que te ocupa un pin más pero te ahorra una librería.
  • Mini amplificador digital PAM8403 2x3W (SKU GA6-2). $990 CLP. Equivalente del amplificador mono TPA2005D1 del original. Es estéreo, así que puedes usar un solo canal o conectar dos parlantes.

Mini amplificador digital clase D PAM8403 de 2x3W

  • Parlante altavoz 8 Ohm 0.5W (SKU G-234). $2.590 CLP. Es exactamente el mismo tipo de parlante delgado que usa el tutorial original.
  • Tarjeta microSD 8GB (SKU B-450V1). $9.990 CLP. Con 8 GB te sobra: los módulos decodificadores rara vez direccionan bien tarjetas muy grandes, así que acá menos es más.
  • Arduino Uno R3 (SKU X4-8). $9.990 CLP, Protoboard 830 puntos MB102 (SKU C-302). $3.790 CLP y Cables macho macho 30cm (SKU C-417). $2.990 CLP para el resto del montaje.

Parlante altavoz de 8 ohm y 0.5W para proyectos embebidos

El proyecto completo sale alrededor de $35.000 CLP. Si ya tienes Arduino y protoboard, la parte de audio propiamente tal. decodificador, amplificador y parlante. queda bajo los $8.000.

Recursos

  • Tutorial original: How to Add Audio to Your Embedded Project Using SparkFun's Qwiic Twist and Audio Player Breakout (SparkFun Learn, licencia CC BY SA 4.0)
  • Librerías: SparkFun MY1690 MP3 Decoder Arduino Library y SparkFun Qwiic Twist Arduino Library, ambas desde el gestor de bibliotecas del IDE de Arduino. Para el YX5300, busca la librería de ese módulo en el mismo gestor.
  • Documentación adicional: hojas de datos del decodificador MP3 que uses y del PAM8403, para la tabla de comandos serie y el detalle de ganancia

Versión chilena con componentes en stock local, inspirada en el tutorial de SparkFun Learn.