Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Rádio Multibanda com Si4730 e Arduino Nano – LW, MW, SW, FM

Componentes e Materiais

Arduino Nano R3 1
Módulo de Rádio Si4730 1
LCD Padrão Adafruit 16x2 Branco sobre Azul 1
Encoder Rotativo com Botão 1
Módulo Amplificador de Áudio Classe D (Placa de Desenvolvimento) 1
Alto-falante: 0,25W, 8 ohms 1
Bastão de ferrite de rádio MW antigo 1
Chave Deslizante 1

Ferramentas Necessárias

Aplicações e Serviços Online

Sobre o Projeto

Quando se fala em rádio com Arduino, pensa-se imediatamente em rádio FM moderno (88-108 MHz na Europa). As bandas LW, MW e SW cobrem a faixa de 0,2 a 30 MHz. A SW (onda curta) é especialmente interessante: ondas de rádio nessa banda podem ser refletidas ou refratadas por uma camada de átomos eletricamente carregados na atmosfera chamada ionosfera. Assim, o rádio de onda curta permite comunicação de longa distância, às vezes entre continentes inteiros ou além.

Abaixo apresento o desenvolvimento de um rádio que cobre todas as bandas mencionadas. O "coração" deste rádio é o CI Si4730 da Silicon Labs, disponível no AliExpress como uma pequena placa de desenvolvimento por poucos dólares.

Esta placa é controlada por um Arduino via protocolo I2C. O código foi escrito por Julio C. Rosa, baseado na biblioteca Si4735-I2C-R4 fornecida junto com o código e esquema. Embora o fabricante diga que este chip (Si4730) é apenas para AM/FM, ele funciona em SW também. Para saída de áudio, uso uma mini placa amplificadora digital 2x3W PAM8403 Classe D, muito barata e funcional.

O dispositivo é montado em uma caixa adequada e representa um pequeno rádio de ondas mundiais completo. Moro no térreo em área densamente povoada e uso uma antena de 10 metros, então a recepção é fraca, mas ainda comparável a rádios portáteis comerciais que possuo.

Vale mencionar que este chip é usado por muitas marcas conhecidas de rádios portáteis como TECSUN, DEGEN, SANGEAN e outras.

Código

Código Principal C/C++
/************************************************************************************************** 
 JCR Si4730/5 Receptor LW/MW/SW/FM - Versão para compartilhar. Veja esquemáticos para detalhes de ligação. 
 Escrito por Julio C. Rosa - The CesarSound - Maio/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); 
 *****************************************************************************************************/ 

// Bibliotecas 
#include <Si4735.h> 
#include <LiquidCrystal.h> 
#include <rotary.h> 
#include "Wire.h" 

// Configurações I/O 
Rotary r = Rotary(2, 3); 
LiquidCrystal lcd(12, 13, 7, 6, 5, 4); 
const byte band = A0; 

// Variáveis 
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; 

// Instância do Si4730/5 chamada radio 
Si4735 radio; 

void setup() { 
  lcd.begin(16, 2); 
  PCICR |= (1 << PCIE2); 
  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19); 
  sei(); 
  
  // Botão seletor de bandas 
  pinMode(band, INPUT_PULLUP); 
  
  // Inicializa rádio. Modos possíveis: AM, FM, SW, LW 
  radio.begin(); 
  radio.setMode(AM); 
  command_am(); 
  
  // Define frequência 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"); 
} 

// Interrupção do Encoder 
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); // Seletor de bandas 
  if (buttonstate == LOW) { 
    inc_preset(); 
    while (digitalRead(band) == 0); 
  } 
  
  // Medidor S-Meter (dBu) e SNR (dB) - descomente se quiser 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 Seletor 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++

Disponíveis para download (biblioteca Si4735, rotary, etc.)

Esquemáticos

Consulte o repositório do projeto para o diagrama de ligação completo.

Processo de manufatura

  1. Circuitos de Rádio a Cristal e Transistor: De Detectores Básicos a Receptores AM/FM Integrados
  2. A Evolução e Engenharia da Tecnologia de Rádio
  3. A Evolução e Produção de Elásticos
  4. Termocâmera DIY: De Ideia de Sala de Aula a Produto Global
  5. Kit Esterilizador UVC DIY – Caixa UV de Baixo Custo e Fácil Montagem para Itens Médicos e Pessoais
  6. Construa uma Rádio Internet Wi‑Fi com Raspberry Pi e Arduino: Transmita Estações Globais
  7. Gerador de Ondas JX – Oscilador DDS Compatível com Arduino com Display OLED
  8. Construa um Skate VR DIY com Arduino, Google Cardboard e Bluetooth
  9. Rádio FM à Prova d'Água para Chuveiro com Arduino Nano, RDA5807, LCD Nokia e PAM8403
  10. Serra de Fita Vertical: Propósito, Características e Aplicações