Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Construye una Radio FM Fiable con Componentes SparkFun y Arduino

Componentes y suministros

Componente Cantidad Notas
SparkFun FM Tuner Basic Breakout - Si4703 1 Sintonizador FM en chip Si4703
Altavoz SparkFun - 0.5 Watt (8 Ohm) 1 Ideal para proyectos de radio pequeños
Pantalla OLED gráfica monocromática Adafruit 0.96" 128x64 1 Alto contraste y bajo consumo
Amplificador de audio LM386 - DIP-8 (Texas Instruments) 1 Clásico para proyectos de audio a batería
Arduino Nano R3 1 Controlador principal (16 MHz, 5V)
Teclado de membrana 1x4 (Adafruit) 2 Control de volumen y sintonía
Convertidor de nivel lógico I2C bidireccional 4 canales (Adafruit) 1 Para conectar dispositivos 3.3V al bus I2C de 5V del Nano
Antena telescópica FM con conector F 1 Recepción óptima
Conector F tipo panel atornillable 1 Montaje de la antena en caja

Sobre el proyecto

De niño construí radios AM, pero las FM resultaban demasiado complejas. Hoy existen sintonizadores FM completos en un solo chip, aunque son componentes SMD difíciles de soldar para aficionados. Afortunadamente, SparkFun ofrece una placa breakout para el chip Si4703 de Silicon Laboratories, que expone todos los pines. Te mostraré cómo construir una radio FM completa alrededor de esta placa y controlar el sintonizador mediante Arduino a través de su interfaz de dos hilos (I2C). SparkFun proporciona una biblioteca completa que simplifica la programación.

Además, añadí una pequeña pantalla OLED de alto contraste y consumo mínimo. Finalmente, explicaré cómo construir un amplificador de audio mono de gran calidad con componentes mínimos. La radio terminada funciona con tres pilas AA durante muchas horas.

Placa SparkFun FM Tuner Basic Breakout y bus I2C

La placa breakout es fácil de usar. Primero suelda los conectores macho para usarla en protoboard. Consulta la distribución de pines abajo. Un metro de cable fino soldado al pin ANT funciona como antena provisional.

Construye una Radio FM Fiable con Componentes SparkFun y Arduino

El Si4703 usa una interfaz de dos hilos (I2C) para control serial desde Arduino. Las líneas son:

Todos los Arduino tienen I2C integrado. En nuestro bus, el Arduino actúa como maestro y tanto el Si4703 como la pantalla OLED como esclavos.

Niveles de voltaje en el bus I2C y elección de Arduino

Tanto el Si4703 como la pantalla OLED operan a 3.3V en el bus I2C. SparkFun recomienda en su guía usar un Arduino de 3.3V (como el Pro Mini), pero este funciona a 8 MHz, la mitad de velocidad que un Nano o Uno. Mis pruebas mostraron que 8 MHz es demasiado lento para manejar la pantalla OLED.

Opté por un Arduino Nano (16 MHz, 5V) y usé convertidores bidireccionales de nivel lógico I2C para conectar las señales de 3.3V de la pantalla y el chip de radio. Necesitamos convertir tres señales: SDA, SCL y RST. Usé dos convertidores de 2 canales cada uno (existen de 4 canales para simplificar cableado).

El Nano es casi idéntico al Uno pero en formato reducido. Ambos tienen conector USB y son fáciles de programar con el IDE de Arduino.

Esquemáticos: Conexiones Arduino a radio y pantalla

Construye una Radio FM Fiable con Componentes SparkFun y Arduino

El proyecto se alimenta con tres pilas AA (4.5V) conectadas directamente al pin 5V del Nano, saltándose el regulador interno. ¡ADVERTENCIA! Desconecta siempre las pilas antes de conectar el Nano por USB al ordenador. De lo contrario, los 5V del PC harían cortocircuito con las pilas. Durante las pruebas iniciales, alimenta el circuito solo por USB sin pilas.

Para mayor seguridad, usa seis pilas AA (9V) conectando el positivo al pin VIN del Nano (en lugar del pin 5V). Así la gestión de energía del Nano desconectará automáticamente las pilas al conectar el USB. (Una pila de 9V bloque también sirve, pero durará solo unas horas).

Amplificador de audio de bajo voltaje LM386

Usé el LM386 para construir un amplificador mono. Este chip existe desde los 70 y está diseñado para aplicaciones de audio de bajo voltaje. Su ganancia interna es 20, pero añadiendo un resistor y capacitor entre pines 1 y 8 se puede aumentar hasta 200. Trabajaremos con la ganancia mínima de 20, más que suficiente para un altavoz de 8 Ohm.

Construye una Radio FM Fiable con Componentes SparkFun y Arduino

El esquema del amplificador:

Construye una Radio FM Fiable con Componentes SparkFun y Arduino

En el Si4703, las salidas de audio se conectan así: R4 a LOUT y R5 a ROUT, combinándose en señal MONO. La placa breakout ya tiene condensadores de salida, no hace falta añadirlos. R2 y R3 forman un divisor de tensión para ajustar el nivel de entrada al amplificador. Podrías usar un potenciómetro para control de volumen analógico, pero controlaremos el volumen digitalmente: el Si4703 permite ajustar la salida de 1 a 15 vía I2C. Con R2/R3 adaptas este rango al amplificador experimentando con resistencias (aumentar R3 sube el volumen).

El circuito sigue la hoja de datos. C2 debe ser ≥220 µF (valores menores atenúan graves). C3 cerca del chip; C3 y C1 son opcionales.

Clave para buen sonido: Muchos proyectos LM386 suenan mal por mala disposición de masas. Observa cómo separé la masa de entrada de la de salida; solo se unen en el pin 4 (tierra del chip). Para profundizar, mira los videos de JohnAudioTech.

El LM386N-1 necesita mínimo 4V y entrega cientos de mW. Con 3 pilas AA (4.5V) logro volumen 1-10 con buena calidad. Importante: usa altavoz de 8 Ohm (no 4 Ohm) a bajo voltaje. Al volumen 15 distorsiona. Para más volumen, sube alimentación a 9V.

Prototipado

Recomiendo encarecidamente montar primero todo en dos protoboards. Mantén Arduino, convertidor I2C y pantalla OLED en una; el Si4703 y el amplificador juntos en otra para minimizar interferencias acústicas. En mi primer prototipo tenía el Si4703 cerca del Arduino con cables largos a la parte de audio y causaba distorsiones.

Construye una Radio FM Fiable con Componentes SparkFun y Arduino

Alimenta el Arduino por USB (su salida 3.3V regula la pantalla y chip de radio). Alimenta el LM386 con pilas (4.5-9V).

Código del programa

Bibliotecas necesarias:

#include <SparkFunSi4703.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

La biblioteca SparkFun simplifica el control I2C del Si4703. Las bibliotecas Adafruit con tutorial están aquí.

Definiciones principales:

// Botones de control
#define volDown 9
#define volUp 10
#define channelDown 11
#define channelUp 12

// Chip Si4703
#define resetPin 2
#define SDIO A4
#define SCLK A5
Si4703_Breakout radio(resetPin, SDIO, SCLK);
#define SI4703Address 0x10 // Dirección I2C Si4703

El uso de #define hace el código más legible. Tras definir volDown como pin 9, escribes volDown cada vez que te refieres a D9.

Sección setup():

int channel;
int volume;

void setup() {
  // Resistencias pull-up internas en entradas
  pinMode(volDown, INPUT_PULLUP);
  pinMode(volUp, INPUT_PULLUP);
  pinMode(channelUp, INPUT_PULLUP);
  pinMode(channelDown, INPUT_PULLUP);

  // Inicializar radio
  radio.powerOn();
  channel = 882; // 88.2 MHz
  radio.setChannel(channel);
  volume = 4;
  radio.setVolume(volume);
}

Los pines 9-12 son entradas con pull-up interno: nivel ALTO salvo pulsación (BAJO). La biblioteca SparkFun facilita el control con powerOn(), setChannel() y setVolume().

Bucle principal escucha botones y actúa:

void loop() {
  // Volumen abajo
  if (digitalRead(volDown) == LOW) {
    if (volume > 0) volume--;
    radio.setVolume(volume);
    UpdateDisplay();
    delay(100);
  }
  // Volumen arriba
  if (digitalRead(volUp) == LOW) {
    if (volume < 15) volume++;
    radio.setVolume(volume);
    UpdateDisplay();
    delay(100);
  }
  // Canal abajo (seek)
  if (digitalRead(channelDown) == LOW) {
    channel = radio.seekDown();
    UpdateDisplay();
    delay(100);
  }
  // Canal arriba (seek)
  if (digitalRead(channelUp) == LOW) {
    channel = radio.seekUp();
    UpdateDisplay();
    delay(100);
  }
}

El código completo (enlace al final) incluye cuatro botones para emisoras predefinidas y toda la gestión de la pantalla OLED, que consume casi toda la RAM disponible. Consulta el excelente tutorial de Adafruit para la biblioteca SSD1306. Ojo: la biblioteca no detecta automáticamente el tamaño de pantalla; debes especificarlo editando Adafruit_SSD1306.h tras instalarla.

Hay una función "avanzada" para medir nivel de batería comparándola con la referencia interna de 1.1V del chip AVR. Al funcionar con pilas, no tenemos referencia constante de 5V. Más info en Secret Arduino Voltmeter y foro Gammon.

De prototipo en protoboard a radio terminada

Si has llegado aquí, tienes un prototipo funcional en dos protoboards. Pasemos el circuito a dos placas perforadas (perfboards) y metamos todo en una caja de proyecto. Si no lo has hecho antes, no temas: no hay mucho que pueda salir mal y aprenderás sobre la marcha. Collin de Adafruit tiene dos videos introductorios recomendados: Breadboards & perfboards y Perfboard prototyping.

Decidí poner el Nano con los convertidores I2C (necesité dos) en una perfboard:

Construye una Radio FM Fiable con Componentes SparkFun y Arduino

Para hacer esta perfboard seguí un tutorial que recomiendo estudiar en detalle: How to Prototype without using printed circuit boards. Paso 3: ¡haz tu plan de cableado! La planificación es el paso más importante y marca la diferencia entre éxito y fracaso. Consejos: usé hilo negro 22 AWG, demasiado grueso y difícil. Consigue "Wire Wrapping Wire" (30 AWG) en varios colores. Y usa una perfboard más grande. Hice conectores pin-header y usé cables Dupont para conectar las partes.

Coloca el Si4703 y el amplificador en una segunda perfboard. Aquí un tutorial para amplificador LM386 que puedes usar de inspiración: From Schematics to Veroboard. Sugiero usar zócalo IC para el LM386. Alternativamente, JohnAudioTech tiene un video completo de amplificador LM386 con buen layout separando masas de potencia y señal.

Necesitas una caja bonita. Collin muestra cómo hacerlo en este video. Me gustó especialmente la idea de usar cinta de pintor para marcar taladros. Compré cinta de pintor (poco adhesiva). Además de cinta y taladro, usa pistola de silicona caliente. Pega altavoz, perfboards, portapilas, etc. en la caja y conecta todo con cables Dupont. El resultado final:

Construye una Radio FM Fiable con Componentes SparkFun y Arduino

Fui demasiado optimista y compré una caja pequeña. Para la abertura cuadrada de la pantalla en el frontal, corté con cúter desde dentro (para no marcar el exterior). No muy elegante, pero funcional. Pegué la pantalla con silicona caliente. Marqué el tamaño del altavoz, taladré muchos agujeros de 3mm para el sonido y pegué el altavoz por detrás.

En la foto aún se ve el cable de antena. Luego compré un conector F de panel y una antena telescópica FM. Aunque la antena mide solo 50 cm, la recepción es muy buena y el pequeño altavoz suena sorprendentemente bien. Lo más asombroso: no he cambiado las pilas aún tras muchos días de uso.

Otros proyectos de radio

Me inspiró inicialmente el video de Great Scott, que luego hizo una caja de madera. Más cercano en detalle es el Si4703 Pocket FM Radio de John Owen, que usa el mismo breakout SparkFun; revisa su descripción. Usé su código para la función Mono y medición de batería.

Código

Repositorio GitHub con código para Arduino Nano: https://github.com/Notthemarsian/FM-radio

Esquemáticos

Diagramas Fritzing radio FM: Archivos originales Fritzing, imágenes y PDF en GitHub

Proceso de manufactura

  1. La Evolución e Ingeniería de la Tecnología de Radio
  2. UnifiedWater v1 – Kit completo de sensor de calidad de agua con Arduino
  3. Radio Internet Wi‑Fi con Raspberry Pi y Arduino: Emisoras globales en streaming
  4. Construye una radio FM a prueba de agua para la ducha con Arduino Nano, RDA5807, LCD Nokia y PAM8403
  5. Sistema de votación portátil con conectividad GSM
  6. Construye un Amplificador de Audio Clase B Push-Pull de Alto Rendimiento con Op-Amp TL082
  7. Oscilador Histérico 555 – Construye un Multivibrador RC Clásico
  8. Circuitos de Radio a Cristal y Transistor: Desde Detectores Básicos a Receptores AM/FM Integrados
  9. Fundamentos de radio: cómo se generan y transmiten las ondas electromagnéticas
  10. Sensor de radio basado en átomos revela dirección de señal para comunicaciones más limpias
  11. Propagación Radio Tierra-a-Tierra: Entendiendo su Impacto en Enlaces Inalámbricos