Arduino y la radio FM

Objetivos

 

  • Vamos a Presentar un módulo de radio FM con I2C.
  • Veremos que es muy fácil de usar.
  • Escribiremos un primer programa con él para quitar miedos.
  •  

    Material requerido.

    Imagen principal Modulo de radio TEA5767

    Vista principal
    Un Arduino UNO o similar

     

    Los módulos de radio y Arduino

     

    Normalmente, cuando en esta humilde casa hablamos de radio nos solemos referir a módulos muy serios con comunicaciones remotas que nos permitan emitir información a un procesador central que …., pero claro que ya está bien de cosas sesudas y a veces vale la pena dedicarnos un rato a jugar.

    Por eso había pensado que quizás os interese una sesión presentando los módulos de radio comercial… de los que cogen la FM y esas cosas para oír música o el partido y usar tu Arduino para gestionarla.

    Una de las ventajas del mundo en el que nos toca vivir es que hay cantidad de tíos muy listos haciendo módulos para lo que se te ocurra y la radio no iba a ser la excepción, así que ponte cómodo que vamos a usar uno de esos modulitos que nos permitan sintonizar la FM y vamos a ver qué podemos hacer con ellos. No todo tiene que ser cosas muy sesudas, que también hay tiempo para jugar.

     

    Módulos basados el TEA5767.

     

    Para los abuelos que vengáis de una época en la que las radios ocupaban lo que una tele pequeña (De las culonas) y tardaban unos minutos en calentarse porque usaban lámparas de vacío, aun os sigue sorprendiendo lo pequeñas que las radios a transistores han llegado a hacerse.

    Y para los que escucháis la FM en el móvil y no sabéis de qué habla el párrafo anterior, también os sorprenderá saber que hay varios chips de radio FM integrado que resultan muy sencillos de manejar con un controlador como Arduino y que además ocupan un espacio ridículo.

     Vista del chip  Imagen principal

    Uno de ellos es el TEA5767, que incluye en un chip minúsculo todo lo necesario para sintonizar radio FM en digital y que es muy fácilmente controlable. Su único problema es que resulta muy complicado de usar sin soldarlo a una placa, porque para ello se requiere pulso de cirujano, por lo que almas caritativas siempre dispuestas a cuidar de nosotros y de nuestra cartera, nos han provisto de módulos breakout con todo lo necesario para que su manejo sea cómodo.

    Creo que para los que tenéis que entretener a una clase de estudiantes díscolos esta puede ser una práctica de los más interesante y para los que siempre habéis querido haceros un radio despertador con Arduino, esta sesión puede daros un par de ideas útiles que os animen a levantar el culo del sillón y empezar a hacer algo de provecho.

    Este módulo que os indico dispone de la radio integrada con entrada para antena y salida de auriculares / Line Out que podéis conectar directamente a vuestro equipo amplificador y además se controla mediante una librería (Como no) que nos permite conectar nuestro Arduino por I2C para mayor comodidad.

     

    Conectando Arduino al módulo de radio

     

    Resulta tan fácil que molesta. Basta con conectar la alimentación y el I2C y ya estamos listos para empezar a jugar.

    Esquema de conexion

    Además el modulo incluye un entrada para la antena y una salida tipo Jack de 3,5mm en los que podéis enchufar la antena incluida y la salida de auriculares o directamente al amplificador de audio.

     

    El programa de control

     

    Como siempre la razón de que estos módulos sean tan sencillos de manejar es que el fabricante ha provisto una librería para vagos (Eficiencia se llama a esto) que nos facilita la vida y se encarga de toda la gestión por nosotros.

    Tenéis que empezar por descargaros la librería de aquí Radio-master. Instaladla por el procedimiento habitual haciendo Menú\Programa\Incluir librería\Añadir librería zip

    Menu de arduino

    Y después basta con que elijas el fichero Radio-master que acabas de descargar. Vamos con el primer programa.

    Mucha gente se asusta un poco cuando le hablas de temas de radio. No sé qué le ven a las ondas (Tal vez que son intangibles) que parecen sentir que tienen algo de anti natural. Por eso vamos a hacer un primer programa que sea lo más sencillo posible para que veáis que no hay motivo para temer las radios.

    Lo primero hay que añadir unos cuantos includes para manejar todo:

    #include <Wire.h>
    #include <radio.h>
    #include <TEA5767.h>

    El primer include se refiere a la librería necesaria para manejar el I2C de la que ya hemos hablado en otras sesiones. La siguiente es la librería radio propia para el manejo de esta clase de módulos y el tercer include es propio del chip de radio que incluye nuestro modulo, pero hay otros de diferentes fabricantes con chips de radio distintos, por lo que necesitamos cargar el que nos corresponde.

    Como no queremos complicar el programa vamos a sintonizar una radio FM en la frecuencia 89.50, que en mi Bilbao corresponde a los 40 principales, pero quizás sea diferente en tu zona y puedes seleccionar la que prefieras (Lo peor que puede pasar es que oigas ruido)

  • Puedes buscar en Google cuales son las frecuencias FM de tu ciudad o area para conocer que emisoras tienes disponibles.
    #define FIX_BAND RADIO_BAND_FM  // Sintonizamos FM
    #define FIX_STATION 8950        // Los 40 de Bilbao 89.50 Mhz

    Y por último creamos una instancia de la clase radio para manejar el receptor:

    TEA5767 radio;

    Ahora vamos a preparar el setup() para lo que iniciamos el serial port (Para ver que frecuencia vamos a sintonizar)

    Serial.begin(57600);
    Serial.println("Radio...");
    delay(200);

    Inicializamos la instancia de radio creada antes

    radio.init();

    Y fijamos alguna condición como elegir la emisora que definimos antes:

    radio.setBandFrequency(FIX_BAND, FIX_STATION); // la emisora es 89.5Mhz
    radio.setVolume(2);
    
    radio.setMono(false);

    La primera línea establece la frecuencia a sintonizar, la segunda el volumen ( De 0 a 15) y la 3ª pide que sea en estéreo si es posible.

    Toca ahora definir la función loop(), pero debo confesaros que el trabajo ya está hecho y el loop solamente va a consistir en un bucle que imprima en la puerta serie la frecuencia en la que tenemos sintonizada la radio, cada pocos segundos:

    void loop()
    {  char s[12];
      radio.formatFrequency(s, sizeof(s));     //Lee la frecuencia sintonizada
      Serial.print("Emisora:");
      Serial.println(s);
    
      delay(3000);                      // Para que gire cada 3 segundos
    }

    Aquí os dejo el programa completo Prog_radio_1 y un pequeño video del resultado:

    Vamos a dejarlo aquí por hoy, y en la próxima sesión nos meteremos con como usar un display I2C para mostrar la frecuencia seleccionada.

      

  • Deja una respuesta