Proyecto radio Arduino-TEA5767

Buenas a todos!

Estoy tratando de hacer un pequeño proyecto de arduino para una simple radio. Para empezar no soy ningún experto así que seguro que mis errores son básicos (pido perdón).

Los elementos que quiero que tenga son:

  • Arduino Uno.
  • Pantalla LCD para mostrar la sintonía y poco más.
  • Potenciómetro que permita cambiar la sintonía.
  • Modulo de radio TEA5767 con antena integrada.

Nota: En el esquema he puesto un piezo en vez de la radio (porque no había) pero la conexión que he hecho ha sido;

  • SDA - A3
  • SCL - A2
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TEA5767Radio.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);  // Dirección I2C de la pantalla LCD
TEA5767Radio radio;  // Instancia del módulo TEA5767

float currentFrequency = 101.1;  // Frecuencia inicial, reemplaza con la frecuencia deseada

void setup() {
  lcd.init();
  lcd.backlight();

  // Inicializar el módulo TEA5767
  Wire.begin();
  radio.setFrequency(currentFrequency);
}

void loop() {
  // Leer la entrada serial
  if (Serial.available() > 0) {
    char input = Serial.read();

    // Cambiar la frecuencia al presionar 'D' (subir)
    if (input == 'D' || input == 'd') {
      currentFrequency += 0.1;
      radio.setFrequency(currentFrequency);
    }

    // Cambiar la frecuencia al presionar 'A' (bajar)
    else if (input == 'A' || input == 'a') {
      currentFrequency -= 0.1;
      radio.setFrequency(currentFrequency);
    }
  }

  // Escribir en el LCD
  lcd.clear();
  lcd.print("Estacion:");

  // Mostrar la frecuencia en el LCD
  lcd.setCursor(0, 1);
  lcd.print(currentFrequency, 1);  // Muestra la frecuencia con un decimal

  // Esperar antes de la siguiente iteración
  delay(500);
}

No sé qué más se puede necesitar, lo que sea me comentáis. Será una tontería pero tampoco soy un experto de esto... gracias de todos modos.

La radio se conecta en A4 y A5 al igual que la LCD.

https://www.prometec.net/tea5767-fm-con-display-i2c/

Ya, esa página la tengo vista... pero al añadir el potenciómetro no me aclaro con cómo tiene que ser el código.
Además, en mi cabeza no entra cómo dos periféricos pueden estar conectados a mismos pines.

El display no es con conexión I2C pero es fácil adaptarlo, o bien fijate como maneja la sintonía con el potenciómetro y agrégale a tu código.


Si te molesta conectar el modulo de radio y la pantalla a los pines A4 y A5 haz esto:


Tan solo conecta la pantalla o el modulo de radio a los pines SCL y SDA situados al lado de los pines digitales.

Mucho mejor así, los cables quedan menos enrollados

El link ese me ha sido bastante útil, de momento ya puedo cambiar la sintonía aunque no me lo muestra en la pantalla (cosa que voy a revisar).

Postea el código nuevo y lo revisamos sin costo adicional. :crazy_face:

Perdón por tardar en contestar... mucho curro
La verdad es que (creo) no he cambiado el código, pero lo mando por si acaso. Hay dos inconvenientes que encuentro:

  1. El potenciómetro es muy sensible y cualquier movimiento hace cambios bruscos

  2. No consigo que la pantalla muestre nada (pensaba que sería el contraste pero eso ya lo he solucionado y parece que no)

#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;
  }
}

Gracias por la ayuda :slight_smile:

¿La LCD no es I2C o la has cambiado?

Ese código es para una pantalla con conexión paralela.

Coloca un potenciómetro multivuelta.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.