- Trabajo general de radio FM
- Componentes requeridos
- Receptor RDA5807
- Amplificador de audio
- Diagrama de circuito del receptor Arduino FM
- Explicación del código de radio FM Arduino
- Funcionamiento de Arduino FM Radio
Hoy en día casi todo el mundo usa sus teléfonos móviles para escuchar música, noticias, podcasts, etc. Pero no hace mucho tiempo todos dependíamos de las radios FM locales para recibir las últimas noticias y canciones, lentamente estas radios están perdiendo popularidad pero en emergencias cuando internet está caído, las radios colocan un papel importante para transmitir información a los usuarios. Las señales de radio siempre están presentes en el aire (que son transmitidas por las estaciones), y todo lo que necesitamos es un circuito receptor de FM para captar esas señales de radio y transferirlas a señales de audio. En nuestros tutoriales anteriores, también construimos algunos otros transmisores y receptores de FM que se enumeran a continuación.
- Transmisor FM Raspberry Pi
- Radio Receptor FM Raspberry Pi
- Circuito transmisor de FM
- Circuito transmisor FM sin inductor
En este tutorial vamos a construir un receptor FM Arduino y agregarlo a nuestro arsenal de proyectos. Usaremos el IC del receptor de FM RDA5807 con Arduino y lo programaremos para que reproduzca cualquier estación de radio FM que el usuario pueda sintonizar con un potenciómetro. También usaremos un Amplificador de Audio junto con el circuito para controlar el volumen de salida de nuestra Radio FM Arduino, suena interesante ¿verdad? Entonces empecemos.
Trabajo general de radio FM
Las estaciones de radio convierten señales eléctricas en señales de radio, y estas señales deben modularse antes de transmitirse a través de la antena. Hay dos métodos en los que se puede modular una señal, a saber, AM y FM. Como su nombre lo indica, la modulación de amplitud (AM) modula la amplitud antes de transmitir una señal, mientras que, en la modulación de frecuencia (FM), la frecuencia de la señal se modula antes de transmitir a través de la antena. En las estaciones de radio, usan modulación de frecuencia para modular la señal y luego transmitir los datos. Ahora, todo lo que necesitamos construir es un receptor que se pueda sintonizar en ciertas frecuencias y recibir esas señales, y luego convertir estas señales eléctricas en señales de audio. Vamos a utilizar elMódulo receptor RDA5807 FM en este proyecto, que simplifica nuestro circuito.
Componentes requeridos
- Arduino Nano
- Receptor RDA5807
- Amplificador de audio
- Cables de conexión
- Bote - 100K
- Tablero de Perf
Receptor RDA5807
RDA5807 es un módulo sintonizador de radio estéreo FM de un solo chip con un sintetizador totalmente integrado. El módulo admite la banda de frecuencia mundial de 50 - 115MHz, control de volumen y silencio, de-énfasis programable (50 / 75us), indicador de intensidad de señal de recepción y SNR, oscilador de cristal de 32.768KHz, control de ganancia automático digital, etc. diagrama de bloques del sintonizador RDA5807M.
Tiene una arquitectura digital de baja FI e integra un amplificador de bajo ruido (LNA), que admite la banda de transmisión de FM (50 a 115 MHz), un control de ganancia programable (PGA), un convertidor de analógico a digital de alta resolución y convertidores de digital a analógico (DAC) de alta fidelidad. El limitador evita la sobrecarga y limita el número de productos de intermodulación creados por canales adyacentes. El PGA amplifica la señal de salida del mezclador y luego se digitaliza con ADC. El núcleo DSP gestiona la selección de canales, la demodulación de FM, el decodificador MPX estéreo y la señal de audio de salida. El diagrama de pines RDA5807 para el IC se muestra a continuación.
El módulo funciona con una fuente de alimentación de 1.8 - 3.3V. Cuando se detiene y se selecciona la interfaz de control, el módulo se reinicia cuando VIO se enciende y también admite un reinicio suave mediante el disparo del bit1 de 0 a 1 de la dirección 02H. El módulo utiliza la comunicación I2C para comunicarse con la MCU, y la interfaz comienza con la condición de inicio, un byte de comando y bytes de datos. El RDA5807 tiene 13 registros de 16 bits, cada uno de los cuales realiza una función particular. Las direcciones de registro comienzan con 00H, que se asigna a la identificación del chip y termina con 0FH. En los 13 registros, algunos bits están reservados mientras que otros son R / W. Cada registro realiza tareas como variar el volumen, cambiar de canal, etc., dependiendo de los bits que se le asignen.
No podemos usar directamente el módulo cuando lo conectamos a un circuito ya que los pines están cerrados. Entonces, utilicé una placa perf y algunos pines macho y soldé cada pin del módulo a cada pin macho como se muestra en la imagen de abajo.
Amplificador de audio
Un amplificador de audio es un dispositivo electrónico que amplifica las señales de audio electrónicas de baja potencia a un nivel lo suficientemente alto como para activar altavoces o auriculares. Hemos construido un amplificador de audio simple usando LM386, el circuito para el mismo se muestra a continuación y también puede verificar el enlace para obtener más información sobre este circuito, también verifique otros circuitos amplificadores de audio.
Diagrama de circuito del receptor Arduino FM
Usamos dos potenciómetros para sintonizar la banda de FM y controlar el volumen del amplificador de audio. Para cambiar el volumen, puede variar el potenciómetro, que está conectado entre los pines 1 y 8 del LM386 o el potenciómetro, que está conectado al pin 3 del LM386. La siguiente imagen muestra el diagrama de circuito completo para Arduino FM Radio.
Hice pequeños cambios en el amplificador. En lugar de usar dos potenciómetros en el amplificador, usé solo uno. Intercambié la olla, que se usa para cambiar la ganancia, con una resistencia. Entonces ahora nuestro proyecto tiene dos potenciómetros, uno para sintonizar y otro para cambiar el volumen. El potenciómetro, que se utiliza para sintonizar el canal, está conectado con el Arduino nano. El pin central de la olla está conectado al pin A0 del Arduino nano, y cualquiera de los dos pines restantes está conectado al 5V y el otro está conectado al GND. Otro potenciómetro se utiliza para controlar el volumen de la radio y se conecta como se muestra en la fig.
Los pines A4 y A5 del Arduino están conectados al pin SDA y SCL del RDA5807M. Tenga en cuenta que el módulo receptor solo funciona con 3.3V. Por lo tanto, conecte el pin 3v3 del Nano al pin VCC del módulo receptor. Una vez que se hicieron las conexiones, mi configuración se veía así
Explicación del código de radio FM Arduino
El código inicializará el módulo receptor y luego establecerá el canal con la frecuencia preestablecida. Cuando el valor leído por el nano en el pin A0 cambia (cambiando el potenciómetro) la frecuencia cambia, lo que a su vez cambia el canal. El código completo se encuentra al final de la página.
Comenzamos nuestro programa agregando la biblioteca de cables requerida para comunicarnos con RDA5807. Luego, en la variable “canal” configuramos el valor del canal. Siempre que la radio se encienda, se sintonizará este canal automáticamente.
#incluir
A continuación, cargaremos bytes en cada registro en nuestro RDA5807 IC para establecer nuestra configuración inicial. En este punto, estamos reiniciando el receptor.
uint8_t boot_config = {/ * registro 0x02 * / 0b11000001, 0b00000011, / * registro 0x03 * / 0b00000000, 0b00000000, / * registro 0x04 * / 0b00001010, 0b00000000, / * registro 0x05 * / 0b10001000, 0b00001106, / * / registro 0b00000000, 0b00000000, / * registro 0x07 * / 0b01000010, 0b00000010,};
Después de reiniciar el dispositivo, podemos sintonizarlo. Para sintonizar el canal solo necesitamos programar los primeros 4 bytes. Esta parte del código cambiará el canal a la frecuencia deseada. En I2C al principio, comenzamos la transmisión, escribimos o leemos los datos y luego finalizamos la transmisión. En este receptor IC, no tenemos que especificar la dirección ya que la hoja de datos dice claramente que la interfaz I2C tiene un registro de inicio fijo, es decir, 0x02h para una operación de escritura y 0x0Ah para una operación de lectura.
uint8_t tune_config = {/ * registro 0x02 * / 0b11000000, 0b00000001, / * registro 0x03 * / (canal >> 2), ((canal & 0b11) << 6) - 0b00010000};
En la configuración, inicializamos la configuración de arranque (reinicio) y luego sintonizamos un canal escribiendo bytes de configuración de sintonización en el RDA5807M.
configuración vacía () {Serial.begin (9600); pinMode (A0, ENTRADA); / * Conectarse al sintonizador FM RDA5807M: * / Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (boot_config, BOOT_CONFIG_LEN); Wire.endTransmission (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Cuando usé pot para sintonizar una frecuencia, tuve un problema. Los valores leídos por el pin A0 no son constantes. Hay un club de ruido con el valor deseado. Usé un capacitor cerámico de 0.1uF conectado entre A0 y GND, aunque el ruido se minimizó, no está al nivel deseado. Entonces, tuve que hacer algunos cambios en el código. Al principio, anoté las lecturas que se ven afectadas por el ruido. Descubrí que el valor máximo del ruido es 10. Entonces escribí el programa de tal manera que, solo considerará el nuevo valor si la diferencia entre el nuevo valor y el antiguo valor de ese mismo pin es mayor que 10 y luego sintoniza el canal deseado.
bucle vacío () {int channel1 = 187, avg = 0, newA; static int oldA = 0; int resultado = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); si (nuevoA! = antiguoA) {canal = canal1 + (nuevoA / 10); myChangeChannel (canal); oldA = newA; }}} // final del ciclo
Esta función se usa para configurar los bytes de la matriz tune_config y luego transmite los datos al IC RDA5807M usando el protocolo I2C.
void myChangeChannel (int canal) {/ * void si no se devuelve nada más int * / tune_config = (canal >> 2); tune_config = ((canal & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Funcionamiento de Arduino FM Radio
Cuando se enciende el módulo, nuestro código restablece el RDA5807-M IC y lo establece en un canal del usuario deseado (Nota: esta frecuencia se toma como la frecuencia base sobre la cual se incrementará la frecuencia). Al cambiar el potenciómetro (conectado a A0), los valores leídos por el Arduino Nano cambian. Si la diferencia entre el valor nuevo y antiguo es mayor que 10, nuestro código considerará este nuevo valor. El canal se cambia dependiendo del cambio en el nuevo valor del valor anterior. Aumentar o disminuir el volumen depende del potenciómetro, que está conectado entre el pin 3 y GND.
Al final de la construcción y codificación, tendrá su propia radio FM. El funcionamiento completo de la Radio FM se puede encontrar en el video vinculado al final de esta página. Espero que hayas disfrutado del proyecto y hayas aprendido algo útil. Si tiene alguna pregunta sobre cómo hacer que este proyecto funcione, puede dejarla en la sección de comentarios o utilizar nuestros foros para obtener ayuda técnica.