工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Si4730とArduino Nanoで作る全帯域ラジオ:長波、中波、短波、FM対応

必要な部品と材料

部品数量
Arduino Nano R31
Si4730 ラジオモジュール1
Adafruit 標準LCD - 16x2 白文字/青背景1
プッシュボタン付きロータリーエンコーダー1
開発ボード、クラスDオーディオアンプモジュール1
スピーカー:0.25W、8オーム1
古いMWラジオから取り出したフェライトバーアンテナ1
スライドスイッチ1

必要なツールと機械

使用するアプリとオンラインサービス

プロジェクト概要

Arduinoラジオと言えば、現代ではFMラジオ(ヨーロッパでは88-108 MHz)を思い浮かべます。長波(LW)、中波(MW)、短波(SW)バンドは0.2〜30 MHzの範囲をカバーします。特にSWは興味深いバンドです。短波帯の電波は、電離層と呼ばれる大気中の電気を帯びた原子の層で反射または屈折します。したがって、短波ラジオは非常に長距離通信に使用でき、時には大陸を越えた通信も可能です。

以下に、上記すべてのバンドをカバーするラジオの開発を紹介します。このラジオの「心臓部」は、Silicon LabsのSi4730 ICで、AliExpressで小型開発ボードの形で数ドルで購入できます。

Si4730とArduino Nanoで作る全帯域ラジオ:長波、中波、短波、FM対応

このボードはArduinoでI2Cプロトコルを使用して制御します。コードはJulio C. Rosa氏によって書かれ、以下のコードと回路図とともに提供されているSi4735-I2C-R4ライブラリに基づいています。メーカーはこのチップ(Si4730)がAM/FM専用と言いますが、実際にはSWでも動作します。オーディオ出力には、非常に安価で機能的なミニデジタルアンプボード2×3W PAM8403クラスDを使用しています。

デバイスは適切なケースに組み込まれ、完全な小型ワールドバンドラジオとなっています。私は比較的人口密集地の1階に住んでおり、10メートルの長いアンテナを使用していますが、受信感度は弱いものの、私が持っている市販のポケットラジオと同等の品質です。

最後に、このチップはTECSUN、DEGEN、SANGEANなど、多くの有名なポータブルラジオブランドで使用されています。

コード

Code C/C++
/************************************************************************************************** 
JCR Si4730/5 Receiver LW/MW/SW/FM - 共有版. 配線詳細については回路図を参照.
Written by Julio C. Rosa - The CesarSound - May/2019
Commands: 
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); 
*****************************************************************************************************/ 
// Library 
#include <Si4735.h> 
#include <LiquidCrystal.h> 
#include <rotary.h> 
#include "Wire.h" 
// I/O Settings 
Rotary r = Rotary(2, 3); 
LiquidCrystal lcd(12, 13, 7, 6, 5, 4); 
const byte band = A0; 
// Variable setting 
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; 
// Create an instance of the Si4730/5 named radio. 
Si4735 radio; 
void setup() { 
  lcd.begin(16, 2); 
  PCICR |= (1 << PCIE2); 
  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19); 
  sei(); 
  // Pushbuttonセレクター
  pinMode(band, INPUT_PULLUP); 
  // ラジオ初期化. 可能なモード: AM, FM, SW, LW.
  radio.begin(); 
  radio.setMode(AM); 
  command_am(); 
  // 初期周波数設定
  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"); 
} 
// Encoder Interrupt 
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); 
  // バンドセレクター
  if (buttonstate == LOW) { 
    inc_preset(); 
    while (digitalRead(band) == 0); 
  } 
  // Sメーター(dBu)とSNR(dB) - 使用する場合はコメント解除
  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); 
} 
// プリセット増加
void inc_preset() { 
  count++; 
  if (count > 15) count = 1; 
  bandpresets(); 
  delay(100); 
} 
// バンドセレクター プリセット
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; 
  } 
} 
// チューナー
void tune() { radio.tuneFrequency(freq); } 
// ソフトミュートOFF / AVC最大ゲイン
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 
}
Libraries C/C++

プレビューなし(ダウンロードのみ)

回路図

回路図ファイルはプロジェクトに含まれています。

製造プロセス

  1. ラジオ技術の進化と工学
  2. ゴムバンドの進化と製造:日用品の裏側
  3. DIYサーモカム:教室アイデアからグローバル製品へ
  4. DIY UVC滅菌ボックスキット:低コスト・簡単自作の医療・日用品用紫外線殺菌器
  5. Raspberry PiとArduinoで作るWi-Fiインターネットラジオ:世界中の局をストリーミング
  6. JX Wave Generator – Arduino互換DDS発振器(OLEDディスプレイ搭載)
  7. Arduino、Google Cardboard、Bluetoothで作るDIY VRスケートボード
  8. Arduino Nanoで作る防水シャワーFMラジオ:RDA5807、Nokia LCD、PAM8403搭載
  9. 自作Arduino J.A.R.V.I.S. 音声アシスタント - アークリアクター風デザイン
  10. 垂直バンドソー:目的、特徴、用途
  11. クリスタルラジオとトランジスタラジオ回路:基本検波器からIC AM/FM受信機まで