Transmisión de radio FM de corto alcance para uso escolar con frecuencia variable de emisión (70-108MHz), pantalla LCD y selector rotativo. Emplea batería recargable y reproductor de mp3 por USB controlado por 4 pulsadores.

Modelo ideado

Su alcance depende en gran medida de la antena empleada y trataré de añadir un apartado a este asunto en el tutorial para conseguir mejoras en la distancia. Pero el hecho de ser portátil y no depender de cable para su alimentación permite subsanar esta debilidad pues el rango que persigo conseguir no es demasiado grande (todas las aulas de un colegio), que con una antena unipolar de unos 45cm es más que suficiente.

Modelo real finalizado

Materiales necesarios

  • 1 Arduino Nano.
  • 1 Pila de litio tipo 18650.
  • 1 Cargador de batería de litio tipo TP4056 o similar.
  • 1 Conversor DC Step-Up Booster MT3608 o similar.
  • 1 mini interruptor ON/OFF 9x13mm
  • 1 Módulo FM transmitter v2.0 70-108 Mhz de Elechouse con chip KT0803 o similar.
  • Pantalla LCD 16×2.
  • 1 Módulo reproductor mp3 tipo DFPlayer mini (opcional).
  • 4 pulsadores (opcional).
  • 1 USB hembra (opcional).
  • 1 Antena extensible de 45cm aproximadamente (opcional).
  • Resistencia de 33k y 200k (opcional).
  • Tornillos 3x10mm autorroscables.
  • 5 tornillos y tuercas M3.

Alimentación

El sistema se alimenta con una batería de litio 18650 que administra 3.7V que sebe ser manejada por un módulo de carga y para ello emplearé el cómodo TP4056 con entrada de carga de USB mini.

Este elemento incorpora un led azul de carga completa que indica la finalización de este proceso. Además el uso del módulo permite el funcionamiento del sistema durante el periodo de carga y con el cable de alimentación conectado en el zócalo USB.

Para suministrar los 5 voltios necesarios para alimentar el microprocesador usaremos un conversor DC Step-Up Booster MT3608, pues los 3,7 voltios de la batería de litio son insuficientes.

En el módulo encontraremos un tornillo regulador que giraremos con un destornillador de precisión hasta alcanzar el valor adecuado. Suministra 2Amperios máximo.

Detalle de la localización del módulo TP4096 con la entrada miniUSB. Se aprecia el pequeño orificio para mostrar la luz de carga.

Colocaremos un pequeño interruptor entre el módulo cargador de la batería y el Step-Up (parte positiva) para apagar el artefacto.

9mm x 13 mm

Módulo transmisor en FM

Se trata del FM transmitter v2.0 70-108 Mhz de Elechouse que usa el chip KT0803L. Se comunica por I2C usando los pines SDA y SLC. Se alimenta con 3.3-5V, pues el módulo tiene un regulador para poder usarse a 5V. Tiene conector mini jack para entrada de línea. Dispone de zócalos de soldadura para añadir un mini micrófono directamente sobre él. También cuenta con un zócalo de soldadura para antena (45cm recomendados). Trabaja en el rango de 70Mhz a 108Mhz. Tiene un amplificador de sonido. Autoapagado en detección de sonido. Se auto calibra.

Para modificar sus valores internos he usado la librería del creador Xanto donde encontrarás la librería XantoKT0803-master.zip que requiere a su vez su propia librería de I2C XantoI2C-master.zip.

Además esta librería permite conectar el modulo trasmisor a otros pines que no sean A4 y A5 emulando el I2C. En mi caso usaré SCL en el pin D5 y el SDA en el pin D6.

Si cargas el ejemplo de la librería puedes acceder a la información interna del módulo y también escribir en él.

En el programa de ejemplo puedes escribir en el serial del IDE de Arduino que usa los comandos W para escribir sobre los registros y R para su lectura. El comando P muestra la lectura de todos los registros. el comando M y U realizan la función de mute y unmute. Para cambiar la frecuencia usaremos el comando F seguido de la frecuencia deseada sin decimales (multiplicada por 10).

Los valores por defecto que trae mi módulo son los siguientes como expresa el datasheet.

El cambio de frecuencia de emisión debe registrarse en los reg 0, 1 , y 2. en CHSEL que usa 12 bits(de 0 a 11). 8+3+1. El mute será el bits 3 del registro 0x02. Especial interés en el detector de silencio que se encuentra en el bits 7 del registro 0x12, Reg 0x12[7], normalmente con estado activado con el valor 0.

Otra librería que podemos usar con este módulo y que es muy cómoda de usar aunque no permite modificación de los registros es FMTX.h. Esta librería da ciertos problemas con algunos IDE de Arduino y es necesario modificar el archivo FMTX.h como se expone en este foro. Cuya solución pasa por comentar/anular las siguientes líneas de la librería

y luego en el código del programa emplear u8 i,buf[4]; en lugar de uint8_t i,buf[4];


Módulo DFPlayer mini reproductor de Mp3 Wav

Muy utilizado en mis proyectos, este módulo es capaz de funcionar por sí mismo o controlado por Arduino. Funciona a 5 voltios y su comunicación es Serial. Dispone de un lector de tarjetas miniSD donde se almacenan los audios que pueden ser mp3 o wavs. Se le puede añadir una entrada de ficheros por USB (que aprovecharemos en este proyecto).

Si quieres profundizar, te dejo aquí su datasheet, aunque las librerías de arduino sobre este módulo nos facilitan mucho su control sin necesidad de comprender nada de si tecnología.

En resumen, lo fundamental es conocer su forma de conexión para ello te apunto los pines y su función. Ten en cuenta la posición de la muesca de la parte superior del módulo justo encima del led que nos ayudará a no confundir los pines.

Mi intención es controlar el módulo sin pasar por el microcontrolador. Es posible añadiendo algunos pulsadores para comandarlo. Pero si prefieres de la otra manera no te preocupes pues también desarrollo este procedimiento un poco más abajo.

Modelo que emplearemos, con algunos cambios

Como se aprecia en el datasheet, aplicando una resistencia de 33K en el pin ADKEY1 y conectándolo a tierra podemos controlar el play/pause con un botón.

IO1 y IO2 controlarán el salto de pista o el volumen si presionamos el botón conectado a tierra sin resistencias durante un corto o largo periodo de tiempo.

Y conectando un pulsador a masa a través de una resistencia de 200K a ADKEY1 conseguimos modificar el modo de reproducción a simple o continua.

En total usaré 4 pulsadores y algunas resistencias.

Otra opción es controlar el módulo de mp3 a través del serial comandado por Arduino. Si prefieres esta opción, en el código añado lo necesario para hacerlo funcionar de esa manera.

Para tal propósito debemos incorporar la versión 1.0.6 de la librería <DFRobotDFPlayerMini.h> además de la conocida <SoftwareSerial.h>,  ambas descargables desde el propio IDE de Arduino.

En este caso deberás conectar el pin RX y TX del módulo reproductor de sonido a los pines D11 y D12 como aparecen en el esquema electrónico.

Entrada de audio. Puede ser por pendrive USB conectado al módulo DFplayer o por línea directamente al emisor FM mediante minijack de audio.
Conectar el USB hembra al módulo DFplayer como se indica en el esquema.

La conexión del USB hembra al módulo DFplayer no tiene mayor misterio 


Pantalla LCD

La pantalla LCD utilizar un módulo con el controlador PCF8574, el cual es un expansor de entradas y salidas digitales controlado por I2C. Eso te permite controla la pantalla con tan solo 2 cables con cualquier microcontrolador que conectaremos a A4 y A5.

Pines de conexión de la pantalla LCD

La dirección I2C por defecto del módulo puede ser 0x27 aunque la puedes cambiar soldando unos pines que están por detrás del módulo.

La pantalla ya incluye el módulo soldado y listo para usar.

Lo alimentaremos con 5 voltios. Hay un jumper para activar o desactivar el led de retroiluminación.

Módulo I2C PCF8574 para controlar el LCD

En la zona trasera encontraremos un potenciómetro que regularemos con un pequeño destornillador para controlar el contraste de la pantalla.

Vista trasera del Módulo LCD

La pantalla consta de 16 caracteres dispuestos en 2 filas.

En cuanto al software, usaremos la librería LiquidCrystal_I2C.h que está disponible en el apartado de librerías.

Para atornillar la pantalla a la tapadera de la caja he usado 4 tornillos M3 de 15mm y sus respectivas tuercas.


Encoder rotativo

Un elemento con una teoría apasionante pero que pasaré por alto para indicar que conviene conectar los pines CLK y DT correspondiente al giro a los las interrupciones del microcontrolador, que en nuestro caso al tratarse de un Arduino Nano, deben ser D2 y D3. Aunque estas conexiones pueden realizarse en otros pines, es recomendado hacerlo en las indicadas pues la precisión aumenta considerablemente así como la ausencia de errores de lectura.

Encoder rotativo

Por su parte Vcc debe ir a los 5 voltios y GND a tierra. En cuanto al pulsador SW que incorpora al presionar el eje de rotación lo conectaremos a D0.

Para su control necesitaremos la librería ESPRotary.h que podrás descargar en la sección de librerías. 


Pulsadores

Para manejar la reproducción del sonido usaré 4 botones como menciono al principio de esta entrada, conectados directamente al módulo DFPlayer. Pero si decides aplicar el control al microcontrolador he dispuesto el código para desempeñar esta función. Para ello usaré la librería Button2.h que también se encuentra disponible en el área de descarga de las librerías.

Detalle de la parte interior de la tapa frontal. Se aprecian LCD, encoder rotativo y módulo de 4 pulsadores.

Como se aprecia en la fotografía para los pulsadores empleé un módulo reciclado extraído de un antiguo controlador mouse que me ha servido para este proyecto.


Antena

Para el proyecto he usado una antena desplegable de unos 40cm de largo y 7mm de diámetro extraída de un antiguo receptor de radio. No se trata de la mejor opción pero para el caso parece suficiente.


Esquema eléctrico

Este esquema describe la opción de control del reproductor mp3 mediante el microcontrolador. Se corresponde con el código del programa que añado al final del documento.


Carcasa

Es momento de imprimir. Puedes descargar el fichero rar que contiene todas las piezas necesarias para construir el aparato pulsando en el botón de más abajo.

Cuerpo inferior

En ella anclaremos los módulos con tornillos 3×10 autoroscables

La batería será abrazada por la pieza con forma de puente. Los módulos cargador de batería, transmisor FM, USB hembra y la PCB con el controlador y el módulo reproductor de sonido se deben atornillar a la base. El interruptor irá encajado y la antena se atornillará con un tornillo M3 y su respectiva tuerca, usando una arandela soldada al cable que se conectará a la salida de la antena del módulo emisor.

La pieza Muerde_usb.stl es la que aprisiona el módulo cargador miniUSB para garantizar su sujeción.

Frontal

En ella deben colocarse el módulo de pulsadores, la pantalla LCD y el encoder rotativo.

Por último tras asegurarse de que todo funciona como estaba previsto debemos cerrar el artefacto con 8 tornillos 3x10mm autoroscantes.  


Código de programación

Recuerda descargar las librerías necesaria en el apartado un poco más arriba. Las librerías que no se encuentren en el archivo, deben añadirse a través del repositorio propio del IDE de Arduino.


Finalizado el domingo 2 de junio de 2024