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 de todas las bandas con Si4730 y Arduino Nano: LW, MW, SW, FM

Componentes y suministros

Arduino Nano R3 × 1
Módulo de radio Si4730 × 1
Pantalla LCD estándar Adafruit 16x2 Blanco sobre Azul × 1
Codificador rotativo con pulsador × 1
Placa de desarrollo, Módulo amplificador de audio Clase D × 1
Altavoz: 0.25W, 8 ohmios × 1
Barra de ferrita de vieja radio MW × 1
Interruptor deslizante × 1

Herramientas y máquinas necesarias

Aplicaciones y servicios en línea

Sobre este proyecto

Cuando mencionas radio Arduino, siempre piensas en radio FM moderna (88-108 MHz en Europa). Las bandas LW, MW y SW cubren el rango de 0,2 a 30 MHz. La SW es especialmente interesante. Las ondas de radio en la banda de onda corta pueden reflejarse o refractarse desde una capa de átomos cargados eléctricamente en la atmósfera llamada ionosfera. Así, la radio de onda corta puede usarse para comunicaciones de muy larga distancia, a veces continentes enteros o más allá.

A continuación presento el desarrollo de una radio que cubre todas las bandas mencionadas. El «corazón» de esta radio es el IC Si4730 de Silicon Labs, que se puede comprar en AliExpress en forma de una pequeña placa de desarrollo por unos pocos dólares.

Construye una radio de todas las bandas con Si4730 y Arduino Nano: LW, MW, SW, FM

Esta placa se controla mediante un Arduino usando el protocolo I2C. El código está escrito por Julio C. Rosa, y se basa en la biblioteca Si4735-I2C-R4 que se proporciona a continuación junto con el código y el esquema. Aunque el fabricante dice que este chip (Si4730) es solo para AM/FM, en realidad también funciona en SW. Para la salida de audio uso una mini placa amplificadora digital 2x3W PAM8403 Clase D, que es muy barata y funcional.

El dispositivo se ensambla en una carcasa adecuada y representa una pequeña radio de ondas mundiales completa. Vivo en la planta baja en una zona relativamente densamente poblada y uso una antena de diez metros, por lo que la recepción es bastante débil, pero aún comparable a las radios de bolsillo comerciales que tengo.

Por último, mencionar que este chip es usado por muchas marcas conocidas de radios portátiles como TECSUN, DEGEN, SANGEAN y otras.

Código

Código C/C++
/************************************************************************************************** 
JCR Si4730/5 Receiver LW/MW/SW/FM - Versión para compartir. Ver esquemáticos para detalles de cableado. 
Escrito por Julio C. Rosa - The CesarSound - May/2019 
Comandos: 
radio.volumeUp(); radio.volumeDown(); 
radio.seekDown(); radio.seekUp(); 
radio.mute(); radio.unmute(); 
radio.setMode(FM); 
radio.tuneFrequency(9490); 
radio.getStatus(); 
radio.getVolume(); 
radio.getMode(); 
radio.getMute(); 
radio.toggleMute(); 
RSQMetrics rsq; 
radio.getRSQ(&rsq); 
(rsq.stereo); print_number(rsq.stereoBlend); 
print_number(rsq.SNR); 
(rsq.seekable); 
print_number(rsq.RSSI); 
print_mode(); 
print_station_freq(); 
print_volume(); 
print_mute(); 
print_home(); 
radio.getCallSign(callSign); 
printp(rds1); 
Serial.write(callSign); 
radio.getProgramTypeStr(programType); 
Serial.write(programType); 
(rds1); (rds2); (rds3); (rds4); (rds5); 
*****************************************************************************************************/ 
// Librerías 
#include <Si4735.h> 
#include <LiquidCrystal.h> 
#include <rotary.h> 
#include "Wire.h" 
// Configuración I/O 
Rotary r = Rotary(2, 3); 
LiquidCrystal lcd(12, 13, 7, 6, 5, 4); 
const byte band = A0; 
// Configuración de variables 
unsigned int freq = 880; 
unsigned int freqmax = 10800; 
unsigned int freqmin = 50; 
unsigned int fstep = 10; 
unsigned int freqold; 
unsigned int buttonstate; 
unsigned int count = 15; 
// Crear una instancia del Si4730/5 llamada radio. 
Si4735 radio; 
void setup() { 
  lcd.begin(16, 2); 
  PCICR |= (1 << PCIE2); 
  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19); 
  sei(); 
  // Pulsador selector de bandas 
  pinMode(band, INPUT_PULLUP); 
  // Inicializar la radio. Modos posibles: AM, FM, SW, LW. 
  radio.begin(); 
  radio.setMode(AM); 
  command_am(); 
  // Establecer frecuencia inicial 
  radio.tuneFrequency(freq); 
  lcd.setCursor(0, 2); 
  lcd.print("JCR Multiband Rx"); 
  lcd.setCursor(0, 0); 
  lcd.print("F>>"); 
  lcd.setCursor(3, 0); 
  lcd.print(":"); 
  lcd.setCursor(13, 0); 
  lcd.print("kHz"); 
} 
// Interrupción del codificador 
ISR(PCINT2_vect) { 
  unsigned char result = r.process(); 
  if (result) { 
    if (result == DIR_CW) { 
      freq = freq + fstep; 
      if (freq >= freqmax) { freq = freqmax; } 
    } else { 
      freq = freq - fstep; 
      if (freq <= freqmin) { freq = freqmin; } 
    } 
  } 
} 
void loop() { 
  if (freqold != freq) { tune(); } 
  freqold = freq; 
  lcd.setCursor(5, 0); 
  lcd.print(freq); 
  lcd.print(" "); 
  buttonstate = digitalRead(band); 
  // Selector de bandas 
  if (buttonstate == LOW) { 
    inc_preset(); 
    while (digitalRead(band) == 0); 
  } 
  // Medidor - S-Meter (dBu) y SNR (dB) - descomentar si se desea usar 
  RSQMetrics rsq; 
  radio.getRSQ(&rsq); 
  lcd.setCursor(0, 2); 
  lcd.print("dBu: "); 
  lcd.print(rsq.RSSI); 
  lcd.setCursor(9, 2); 
  lcd.print("dB: "); 
  lcd.print(rsq.SNR); 
} 
// Presets INC 
void inc_preset() { 
  count++; 
  if (count > 15) count = 1; 
  bandpresets(); 
  delay(100); 
} 
// Presets Selector de Bandas 
void bandpresets() { 
  lcd.setCursor(0, 0); 
  switch (count) { 
    case 1: freq = 370; radio.setMode(LW); radio.tuneFrequency(freq); command_am(); fstep = 5; lcd.print("LW1"); break; 
    case 2: freq = 620; radio.setMode(AM); radio.tuneFrequency(freq); fstep = 5; lcd.print("MW1"); break; 
    case 3: freq = 840; radio.setMode(AM); radio.tuneFrequency(freq); fstep = 5; lcd.print("MW2"); break; 
    case 4: freq = 3700; radio.setMode(SW); radio.tuneFrequency(freq); fstep = 5; lcd.print("SW0"); break; 
    case 5: freq = 4985; radio.setMode(SW); radio.tuneFrequency(freq); fstep = 5; lcd.print("SW1"); break; 
    case 6: freq = 6010; radio.setMode(SW); radio.tuneFrequency(freq); fstep = 1; lcd.print("SW2"); break; 
    case 7: freq = 7200; radio.setMode(SW); radio.tuneFrequency(freq); fstep = 1; lcd.print("SW3"); break; 
    case 8: freq = 10000; radio.setMode(SW); radio.tuneFrequency(freq); fstep = 5; lcd.print("SW4"); break; 
    case 9: freq = 11940; radio.setMode(SW); radio.tuneFrequency(freq); fstep = 5; lcd.print("SW5"); break; 
    case 10: freq = 13710; radio.setMode(SW); radio.tuneFrequency(freq); fstep = 5; lcd.print("SW6"); break; 
    case 11: freq = 15400; radio.setMode(SW); radio.tuneFrequency(freq); fstep = 5; lcd.print("SW7"); break; 
    case 12: freq = 17560; radio.setMode(SW); radio.tuneFrequency(freq); fstep = 5; lcd.print("SW8"); break; 
    case 13: freq = 21505; radio.setMode(SW); radio.tuneFrequency(freq); fstep = 5; lcd.print("SW9"); break; 
    case 14: freq = 27015; radio.setMode(SW); radio.tuneFrequency(freq); fstep = 5; lcd.print("CB1"); break; 
    case 15: freq = 9700; radio.setMode(FM); radio.tuneFrequency(freq); fstep = 10; lcd.print("FM1"); break; 
  } 
} 
// Sintonizador 
void tune() { 
  radio.tuneFrequency(freq); 
} 
// Comandos soft mute off / AVC max gain 
void command_am() { 
  radio.setProperty(PROP_AM_SOFT_MUTE_MAX_ATTENUATION, 0); // 0 (OFF) - 63 
  radio.setProperty(PROP_AM_AUTOMATIC_VOLUME_CONTROL_MAX_GAIN, 0x3A98); // 1000 - 7800 
}
Bibliotecas C/C++

Sin vista previa (solo descarga).

Esquemáticos

No se proporcionan esquemáticos en el proyecto original.

Proceso de manufactura

  1. La Evolución e Ingeniería de la Tecnología de Radio
  2. La Evolución y Producción de las Gomas Elásticas
  3. Thermocam DIY: de idea en el aula a producto global
  4. Kit esterilizador UVC DIY: caja UV de bajo costo y fácil construcción para artículos médicos y personales
  5. Radio Internet Wi‑Fi con Raspberry Pi y Arduino: Emisoras globales en streaming
  6. Generador de Ondas JX – Oscilador DDS Compatible con Arduino con Pantalla OLED
  7. Construye un Skateboard VR Casero con Arduino, Google Cardboard y Bluetooth
  8. Construye una radio FM a prueba de agua para la ducha con Arduino Nano, RDA5807, LCD Nokia y PAM8403
  9. Asistente de voz J.A.R.V.I.S DIY con Arduino y diseño Arc Reactor
  10. Sierra de cinta vertical: Propósito, características y aplicaciones
  11. Circuitos de Radio a Cristal y Transistor: Desde Detectores Básicos a Receptores AM/FM Integrados