基于 Si4730 与 Arduino Nano 的全波段收音机:长波/中波/短波/FM
组件与物料
| 组件 | 数量 |
|---|---|
| Arduino Nano R3 | 1 |
| Si4730 收音机模块 | 1 |
| Adafruit 16x2 字符 LCD(白字蓝底) | 1 |
| 带按键的旋转编码器 | 1 |
| PAM8403 Class D 音频放大器模块 | 1 |
| 扬声器 0.25W 8Ω | 1 |
| 旧中波收音机铁氧棒天线 | 1 |
| 拨码开关 | 1 |
所需工具
- 电烙铁
软件工具
- Arduino IDE
项目背景
提到 Arduino 收音机,通常只想到 FM(88-108 MHz)。长波(LW)、中波(MW)覆盖 0.2-1.6 MHz,短波(SW)覆盖 3-30 MHz。短波信号可经电离层反射实现跨洲际通信,极具魅力。
本项目基于 Silicon Labs Si4730 芯片(淘宝/速卖通几美元买到的小模块)打造全波段收音机。虽厂商宣称仅支持 AM/FM,实测短波表现优异。音频输出采用廉价 PAM8403 Class D 放大板(2×3W)。
硬件架构
- Si4730 模块通过 I2C 与 Arduino 通信
- 代码基于 Julio C. Rosa 编写的
Si4735-I2C-R4库 - 旋钮控制频率/波段切换,LCD 显示频率、信号强度 (dBu)、信噪比 (dB)
- 拨码开关用于电源控制
- 铁氧棒天线增强中波接收
软件功能
- 支持 LW / MW / SW / FM 四个波段,共 15 个预设频点
- 旋转编码器调节频率,按键切换波段预设
- 实时显示 RSSI (dBu) 和 SNR (dB)
- AM 模式下关闭软静音、设置 AVC 最大增益
- RDS 解码(FM 下显示台名、节目类型等)
核心代码片段
#include <Si4735.h> #include <LiquidCrystal.h> #include <rotary.h> #include <Wire.h>
Rotary r = Rotary(2, 3);
LiquidCrystal lcd(12, 13, 7, 6, 5, 4);
const byte band = A0;
Si4735 radio;
void setup() {
lcd.begin(16, 2);
PCICR |= (1 << PCIE2);
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19); sei();
pinMode(band, INPUT_PULLUP);
radio.begin(); radio.setMode(AM); command_am();
radio.tuneFrequency(880);
lcd.setCursor(0, 0); lcd.print("JCR Multiband Rx");
}
ISR(PCINT2_vect) { // 编码器中断
unsigned char result = r.process();
if (result == DIR_CW) freq = min(freq + fstep, freqmax);
else freq = max(freq - fstep, freqmin);
}
void loop() {
if (freqold != freq) { radio.tuneFrequency(freq); freqold = freq; }
lcd.setCursor(5, 0); lcd.print(freq); lcd.print(" ");
if (digitalRead(band) == LOW) { inc_preset(); while(digitalRead(band)==0); }
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 bandpresets() { // 15 个预设波段/频率
switch(count) {
case 1: freq=370; radio.setMode(LW); fstep=5; lcd.print("LW1"); break;
case 2: freq=620; radio.setMode(AM); fstep=5; lcd.print("MW1"); break;
// ... 中波、短波多个预设 ...
case 15: freq=9700; radio.setMode(FM); fstep=10; lcd.print("FM1"); break;
}
radio.tuneFrequency(freq); command_am();
}
void command_am() {
radio.setProperty(PROP_AM_SOFT_MUTE_MAX_ATTENUATION, 0);
radio.setProperty(PROP_AM_AUTOMATIC_VOLUME_CONTROL_MAX_GAIN, 0x3A98);
}
完整代码与库文件请参考项目附件。
实测表现
作者居住在一楼人口密集区,使用 10 米长线天线,接收效果虽弱但仍可媲美商用袖珍收音机。Si4730 系列芯片广泛应用于 TECSUN、DEGEN、SANGEAN 等知名品牌便携收音机,性能可靠。
制造工艺
- 无线电技术演进与工程:从马可尼到数字广播
- 橡皮筋的演变与生产
- DIY热成像仪:从课堂创意到全球产品的进化史
- DIY 低成本 UVC 紫外线消毒盒:医疗与个人物品快速杀菌方案
- 树莓派 + Arduino 联手打造 Wi-Fi 网络收音机,畅听全球电台
- JX 波形发生器 – 基于 Arduino 的 DDS 振荡器,带 OLED 显示屏
- DIY VR 滑板:用 Arduino、Google Cardboard 与蓝牙打造虚拟滑雪体验
- 自制防水淋浴 FM 收音机:Arduino Nano + RDA5807 + Nokia 5110 LCD + PAM8403
- DIY Arduino J.A.R.V.I.S 语音助手 - 方舟反应堆造型设计
- 无线红外测温枪:Arduino Nano + HC-06蓝牙 + MLX90614
- 立式带锯床:用途、特点与应用
- 晶体管与晶体收音机电路:从基本检波器到集成 AM/FM 接收机