1. El Octavo Bit
  2. / Arduino
  3. / Proyectos para Arduino
  4. / Hacer una radio FM con Arduino y el módulo TEA5767

Hacer una radio FM con Arduino y el módulo TEA5767

| Actualizado:
Comentarios: 0

Hacer una radio FM con Arduino y el módulo TEA5767
Hacer una radio FM con Arduino y el módulo TEA5767

En este artículo haremos una radio FM con el módulo TEA5767 para Arduino y utilizaremos una pantalla LCD para mostrar la frecuencia que estamos escuchando. Para el cambio de frecuencia, vamos a utilizar un potenciómetro lineal que después cambiaremos por dos pulsadores, uno para aumentar de frecuencia y otro para disminuir la frecuencia.

El módulo TEA5767 es un receptor de radio FM que se puede conectar a la placa Arduino, usando el protocolo I2C, para buscar emisoras de radio. Este módulo: tiene una salida de auriculares, no admite la decodificación de señales RDS y la salida de audio está configurada al nivel máximo (no dispone de control de volumen).

Sus características son:

  • Alimentación: 5V.
  • Rango de frecuencias: 76 – 108 MHz.
  • Conector para antena.
  • Conector para auricular.
  • Led indicador de encendido

Radio FM con el módulo TEA5767, utilizando un potenciómetro para cambiar de dial.

En este primer ejercicio vamos a utilizar un potenciómetro para cambiar de emisora. Material necesario para realizar esta práctica:

  • Arduino uno o similar.
  • Módulo TEA5767.
  • Pantalla LCD de 16×2 líneas.
  • 2 potenciómetros lineales (utilizamos el B10K).
  • Protoboard.
  • Una resistencia (10K).
  • Cables.

Esquema:

El módulo TEA5767 se conecta a los 5 V de Arduino, la comunicación con Arduino se realiza a través de la interfaz I2C, utilizando solo dos pines. En el Arduino Uno, los pines de la interfaz I2C son los pines analógicos 4 (SDA) y 5 (SCL).

Para la sintonización de los canales utilizamos un potenciómetro 10K, la patilla de voltaje va a la alimentación, el GND a tierra y la patilla de salida al pin analógico A0.

El montaje de la pantalla LCD, esta explicado en el artículo: ¿Cómo conectar una pantalla LCD a Arduino UNO?

Esquema para montar una radio con Arduino

Código:

Para la programación usaremos las librerías Wire, LiquidCrystal y TEA5767Radio.

#include "Wire.h"
#include "TEA5767Radio.h"
#include "LiquidCrystal.h"

El siguiente paso es crear los objetos radio y lcd:

TEA5767Radio radio = TEA5767Radio();
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

Creamos dos varibles de tipo double donde tendremos la frecuencia que está sonando, y otra donde guardaremos la frecuencia anterior.

double frecuencia= 87.5;
double frecuencia_ant = 87.5;

En la función setup() iniciamos el puerto serial y la pantalla LCD. Mostraremos en la fila superior de la pantalla LCD «Arduino FM Radio».

void setup(){
  Serial.begin(9600);
  Wire.begin();
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Arduino FM Radio");
  Serial.println("Arduino FM Radio ");
}

Nos falta leer el valor del potenciómetro conectado al puerto analógico A0 y convertir el valor leído a una frecuencia entre 87.5 y 108. Este intervalo de frecuencias es el que utilizaremos para la sintonización de la radio, usando el comando radio.setFrequency (). Todo esto lo haremos en la función loop().

void loop(){
  int valor_pot = analogRead(A0);
  frecuencia = ((double)valor_pot * (108.0 - 87.5)) / 1024.0 + 87.5;
  frecuencia = ((int)(frecuencia * 10)) / 10.0;
  if (frecuencia_ant != frecuencia){
    lcd.setCursor(0, 1);
    lcd.print("Freq: ");
    lcd.setCursor(6, 1);
    lcd.print("     MHz");
    lcd.setCursor(6, 1);
    lcd.print(frecuencia, 1);
    radio.setFrequency(frecuencia);
    frecuencia_ant = frecuencia;
  }

Para cambiar de frecuencia se comprueba si el valor de la frecuencia anterior no es igual al valor actual leído por el potenciómetro, si este no coincide, cambiamos de emisora y se guarda en la variable frecuencia_ant.

Código completo de la práctica:

#include "Wire.h"
#include "TEA5767Radio.h"
#include "LiquidCrystal.h"
TEA5767Radio radio;
double frecuencia = 88.0;
double frecuencia_ant = 88.0;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup(){
  Serial.begin(9600);
  Wire.begin();
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Arduino FM Radio");
  Serial.println("Arduino FM Radio ");
}

void loop(){
  int valor_pot = analogRead(A0);
  frecuencia = ((double)valor_pot * (108.0 - 88.0)) / 1024.0 + 88.0;
  frecuencia = ((int)(frecuencia * 10)) / 10.0;
  
  if (frecuencia_ant != frecuencia)  {
    lcd.setCursor(0, 1);
    lcd.print("Freq: ");
    lcd.setCursor(6, 1);
    lcd.print("     MHz");
    lcd.setCursor(6, 1);
    lcd.print(frecuencia, 1);
    Serial.print("frecuencia: ");
    Serial.println(frecuencia);
    radio.setFrequency(frecuencia);
    frecuencia_ant = frecuencia;
  }
}

Radio FM con el módulo TEA5767, utilizando pulsadores para cambiar de dial.

Radio fm con Arduino, módulo TEA5767 y dos pulsadores

La señal del potenciómetro es bantante molesta porque cada cierto tiempo nos da un valor distorsionado. Para evitarlo cambiaremos el potenciómetro por dos pulsadores para cambiar de sintonía. El material que vamos a necesitar:

  • Arduino uno o similar.
  • Módulo TEA5767.
  • Dos pulsadores Pantalla LCD de 16×2 líneas.
  • 1 potenciómetro lineal (utilizamos el B10K).
  • Protoboard.
  • Tres resistencias (10K).
  • Cables.

Esquema:

El esquema básicamente es el mismo, cambiamos el potenciómetro por los pulsadores, uno de ellos va conectado al pin digital 2 (es el que utilizaremos para bajar de frecuencia), y el otro va conectado al pin digital 3 (lo usaremos para aumentar la frecuencia).

Esquema para radio FM con el módulo TEA5767 y pulsadores para cambiar de frecuencia
#include "TEA5767Radio.h"
#include "LiquidCrystal.h"

TEA5767Radio radio;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

double frecuencia = 99.20;
double frecuencia_ant = 99.20;
double fMin = 87.00;
double fMax = 108.00;

void setup(){
  //Serial.begin(9600);
  Wire.begin();
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Arduino FM Radio");
  //Serial.println("Arduino FM Radio ");
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  radio.setFrequency(frecuencia);
  mostrar(frecuencia);
}

void loop(){
  if (frecuencia_ant != frecuencia)  {
    mostrar(frecuencia);
    //Serial.print("frecuencia_ant: ");
    //Serial.println(frecuencia_ant); 
    //Serial.print("frecuencia: ");
    //Serial.println(frecuencia); 
    radio.setFrequency(frecuencia);
    frecuencia_ant = frecuencia;
  }
  if(digitalRead(2) == LOW){
    restar();
    delay(200);
  }  
  if(digitalRead(3) == LOW){
    sumar();
    delay(200);
  }
}
void sumar(){
  if (frecuencia < fMax){
    frecuencia = (frecuencia_ant + 0.1);
  }
}
void restar(){
  if (frecuencia > fMin){
    frecuencia = (frecuencia_ant - 0.1);
  }
}
void mostrar(double frecuencia){
  lcd.setCursor(0, 1);
  lcd.print("Freq: ");
  lcd.setCursor(6, 1);
  lcd.print("     MHz");
  lcd.setCursor(6, 1);
  lcd.print(frecuencia, 1);
}

Artículos que te pueden interesar

Plataforma móvil con un joystick y Arduino
Plataforma móvil con 2 servos controlada por un joystick y Arduino

Plataforma móvil con 2 servos controlada por un joystick y Arduino

| Actualizado:
Comentarios: 0

Vamos a montar una torreta con dos servos que nos ayudarán a desplazarla en un ángulo de 180º, en el eje horizontal y en el vertical. Utilizaremos un joystick para mover los pequeños motores. Podremos utilizar la plataforma móvil para…

Sensor ultrasónico HC-SR04 y Arduino

Sensor ultrasónico HC-SR04 y Arduino

| Actualizado:
Comentarios: 0

El sensor HC-SR04 es un sensor de distancia de baja precisión basado en ultrasonidos. Se puede utilizar en multitud de proyectos, como sistema de detección de obstáculos para vehiculos o robots, sensores de presencia, etc. Contenido 1 ¿Cómo funciona el…

¿Cómo medir la temperatura y la humedad con el módulo DHT11 y Arduino?
Medir la temperatura y humedad con Arduino

Módulo DHT11, medir la temperatura y la humedad con Arduino.

| Actualizado:
Comentarios: 1

En este artículo veremos el funcionamiento del módulo DHT11 para medir la temperatura y la humedad, realizaremos la conexión con la placa Arduino y mostraremos las medidas obtenidas a través de una pantalla LCD. Contenido 1 Conectando el sensor DHT11…

Salidas digitales y ejemplos en Arduino
Salidas digitales y ejemplos en Arduino. Efecto coche fantástico.

Salidas digitales y ejemplos en Arduino. Efecto coche fantástico.

| Actualizado:
Comentarios: 0

Siguiendo con los tutoriales de Arduino vamos a programar el efecto de las luces del coche fantástico. Para ello primero veremos cómo encender y apagar un LED, a continuación haremos el efecto con 3 LEDS conectados en paralelo, con 7…

Comentarios - 0

Deja un comentario

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