PROYECTO - Radio Digital FM
(Práctica FM MPX)
El objetivo para este proyecto principalmente es verificar la recepción de una señal
digital y estéreo de audio FM, con la ayuda de un módulo desarrollado alrededor
del circuito integrado Si4703.
Para este trabajo, se tuvieron en cuenta ciertas instrucciones al momento de
desarrollar, las cuales se pueden encontrar en el siguiente enlace:
- https://learn.sparkfun.com/tutorials/si4703-fm-radio-receiver-hookup-guide
En este proyecto se tuvieron en cuenta varios componentes electrónicos, cuya
funcionalidad de estos fueron específicos para así poder tener la recepción de las
señales digital y estéreo de audio FM.
Componentes electrónicos:
1. Módulo Si4703
2. Display LCD 16x2
3. Arduino UNO
4. Protoboard
5. Potenciómetro B10K
6. Cables de puente
7. Audífonos alámbricos
Seguido de plantear los componentes que fueron necesarios para el
funcionamiento de este proyecto, adjuntare algunas imágenes en las que se
puede ver las conexiones e implementación de cada uno de
estos elementos.
DIAGRAMA DE FLUJO:
CODIGO IMPLEMENTADO:
#include <Si4703_Breakout.h>
#include <Wire.h>
#include <LiquidCrystal.h>
int resetPin = 7;
int SDIO = A4;
int SCLK = A5;
Si4703_Breakout radio(resetPin, SDIO, SCLK);
int channel;
int volume;
char rdsBuffer[20];
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup()
{
Serial.begin(9600);
Serial.println("\n\nSi4703_Breakout Test Sketch");
Serial.println("===========================");
Serial.println("a b Favourite stations");
Serial.println("+ - Volume (max 15)");
Serial.println("u d Seek up / down");
Serial.println("r Listen for RDS Data (15 sec timeout)");
Serial.println("Send me a command letter.");
radio.powerOn();
radio.setVolume(0);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Radio FM Ready");
}
void loop()
{
if (Serial.available())
{
char ch = Serial.read();
if (ch == 'u')
{
channel = radio.seekUp();
displayInfo();
}
else if (ch == 'd')
{
channel = radio.seekDown();
displayInfo();
}
else if (ch == '+')
{
volume++;
if (volume == 16) volume = 15;
radio.setVolume(volume);
displayInfo();
}
else if (ch == '-')
{
volume--;
if (volume < 0) volume = 0;
radio.setVolume(volume);
displayInfo();
}
else if (ch == 'a')
{
channel = 930; // Rock FM
radio.setChannel(channel);
displayInfo();
}
else if (ch == 'b')
{
channel = 974; // BBC R4
radio.setChannel(channel);
displayInfo();
}
else if (ch == 'r')
{
Serial.println("RDS listening");
radio.readRDS(rdsBuffer, 15000);
Serial.print("RDS heard:");
Serial.println(rdsBuffer);
lcd.clear(); // Borrar pantalla LCD
lcd.setCursor(0, 0);
lcd.print("Emisora:");
lcd.setCursor(0, 1);
lcd.print(rdsBuffer); // Mostrar nombre de la emisora
en la LCD
}
}
}
void displayInfo()
{
Serial.print("Channel:"); Serial.print(channel);
Serial.print(" Volume:"); Serial.println(volume);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ch: "); lcd.print(channel);
lcd.setCursor(0, 1);
lcd.print("Vol: "); lcd.print(volume);
}
OBSERVACIONES:
- Para la optimización del código, se puede mejorar la eficiencia del código
optimizando la detección de comandos en el loop() para evitar lecturas
erróneas o retardos innecesarios
- Seguido de la observación anterior, se puede optimizar el código, de tal
forma que este cumpla con la función que, de forma automática, este
busque la emisora que tenga mejor la mejor desde el punto donde este
ubicado.
- Para el circuito o montaje realizado, se podría usar una antena externa para
mejorar la recepción de las emisoras.
- Se recomienda probar la recepción en un área con buena señal FM, ya que
factores externos pueden afectar la sintonización.
CONCLUSIÓN:
- El desarrollo de este trabajo permitió la implementación de un sistema de
radio FM, siendo este el módulo Si4703, con un Arduino y una pantalla LCD
I2C, con este montaje, se logró sintonizar emisoras de radio, ajustar el
volumen y visualizar la información en tiempo real.
Además, en este proyecto se evidenció la importancia de un buen manejo
en la conexión de dispositivos electrónicos, así como se puede tener
mejoras futuras, como la automatización del código e implementación de
antenas externas para mejorar la recepción de emisoras. En general, este
trabajo representa un ejercicio práctico y didáctico en el campo de la
electrónica y la programación embebida.