亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

复古风 FM 收音机 DIY:TEA5767 模块与模拟仪表完美结合

项目灵感与设计理念

本项目致敬经典收音机美学,将现代 TEA5767 全集成 FM 接收芯片与模拟指针仪表、16×2 LCD 虚拟调谐刻度、D 类功放、双分频音箱融合于一体。通过旋钮编码器调谐、四键预存电台、自动/手动搜台切换、立体声/信号强度双模拟表头指示,重现“转动调谐钮、指针滑过刻度、温暖音质流淌”的仪式感。整机由两节锂电池串联经 7805 稳压供电,便携性与复古质感兼得。

核心硬件清单

模块型号/规格关键参数数量
主控Arduino Nano R3ATmega328P, 5V/16MHz, 体积 18×45mm1
FM 接收TEA5767 模块I2C 控制, 76-108MHz, 立体声/单声道, SNR>60dB1
模拟表头复古仪表 (信号强度/频率)电流型 0-1mA, 内阻 ~500Ω, 带调零螺丝2
显示屏16×2 LCD (白字蓝底)HD44780, 4-bit模式, 自定义字符刻度1
音频放大D 类立体声功放板 (2×3W)PAM8403 或同类, 效率 >90%, 增益固定1
音量控制双联对数电位器 10kΩ (B型)立体声同步调节, 手感阻尼适中1
扬声器3W 4Ω 全频 + 0.25W 8Ω 高音分频电容 1μF 串联高音单元各2
交互旋钮编码器(带按键) + 4×轻触键编码器调谐/菜单, 4键预存电台1+4
指示灯LED ×3 (立体声/自动搜台/电源)PWM 驱动亮度可调3
电源2×18650 串联 + 7805 + 470μF/100μF 滤波输出 5V/1A, 续航 >8h1套

电路设计亮点

TEA5767 I2C 控制

模拟表头驱动电路

两路 PWM (D5/D6) 经 RC 低通滤波 (10kΩ+10μF) 得到 0-5V 模拟电压,再经串联微调电位器 (10kΩ) 限流驱动表头线圈。代码中 map(freq, 88, 108, 0, 255) 与 map(signal, 0, 100, 0, 255) 分别控制频率表与信号表。表头机械惯性自然平滑指针抖动。

音频分频与功放

软件架构与交互逻辑

自定义 LCD 字符集


// 刻度背景字符 (5×8 像素)
byte scaleChar[8] = {0,0,0,0,0,4,21,21};  // 0b00100, 0b10101
// 指针 5 亚像素位置 (每字符 5 列)
for (int j=0; j<5; j++) {
  for (int i=0; i<8; i++) needleChar[i] = scaleChar[i] | (0b10000 >> j);
  lcd.createChar(j, needleChar);
}
// 立体声图标 "ST" 风格
byte stereoS[8] = {0b01111,0b11000,0b11011,0b11101,0b11110,0b11000,0b01111,0};
byte stereoT[8] = {0b11110,0b00011,0b10111,0b10111,0b10111,0b10111,0b11110,0};

编码器中断处理


#define ENC_A 3  // INT1
#define ENC_B 4
#define ENC_SW 2 // INT0

volatile byte status = 0;  // bit0:AUTO, bit1:STEREO, bit2:UP, bit3:DOWN, bit4:SEARCH

void isrEncoder() { delay(50); if (digitalRead(ENC_B)) bitSet(status,2); else bitSet(status,3); }
void isrSwitch()  { delay(50); bitWrite(status,0, !bitRead(status,0)); }  // 切换自动/手动

主循环状态机


void loop() {
  // 1. 更新自动/手动指示
  lcd.setCursor(12,1); lcd.write(bitRead(status,0)?'A':'M');
  digitalWrite(AUTO_LED, bitRead(status,0)?LOW:HIGH);  // 低电平点亮

  // 2. 读取 TEA5767 状态
  unsigned char buf[5];
  if (Radio.read_status(buf)) {
    freq = floor(Radio.frequency_available(buf)/100000.0 + 0.5)/10;
    stereo = Radio.stereo(buf);
    signal = Radio.signal_level(buf)*100/15;
    // 驱动模拟表头
    analogWrite(SIG_METER, map(signal,0,100,0,255));
    analogWrite(FREQ_METER, map(freq,88,108,0,255));
    analogWrite(STEREO_LED, map(stereo,0,1,0,255));
    // 更新 LCD 刻度指针
    updateScale();
    // 显示数值
    lcd.setCursor(0,1); lcd.write(0xB7); lcd.print(signal); lcd.print('%');
    lcd.setCursor(6,1); if(freq<100) lcd.print(' '); lcd.print(freq,1);
    lcd.setCursor(14,1); if(stereo){lcd.write(6);lcd.write(7);} else lcd.print("  ");
  }

  // 3. 自动搜台处理
  if (bitRead(status,4)) {  // SEARCH 标志
    int dir;
    if (Radio.process_search(buf, dir)) bitClear(status,4);
  }

  // 4. 预存电台按键 (A0-A3)
  for (int i=0; i<4; i++) if (digitalRead(BTN_FREQ[i])) {
    float preset[] = {92.0, 94.8, 97.0, 101.2};
    freq = preset[i]; Radio.set_frequency(freq); redrawScale();
  }

  // 5. 编码器调谐
  if (bitRead(status,2)) {  // UP
    if (bitRead(status,0) && !bitRead(status,4)) {  // 自动向上搜台
      bitSet(status,4); Radio.search_up(buf); delay(50);
    } else if (freq < 108) { freq += 0.1; Radio.set_frequency(freq); }
    bitClear(status,2);
  }
  if (bitRead(status,3)) {  // DOWN
    if (bitRead(status,0) && !bitRead(status,4)) { bitSet(status,4); Radio.search_down(buf); delay(50); }
    else if (freq > 88) { freq -= 0.1; Radio.set_frequency(freq); }
    bitClear(status,3);
  }
}

组装与调试全流程

  1. 模块测试:分别验证 TEA5767 I2C 通信、LCD 显示、功放发声、编码器中断、按键扫描、PWM 表头驱动。
  2. 面包板联调:全模块连接,上传固件,观察启动动画、自动搜台锁定强台、手动微调步进 0.1MHz。
  3. 表头校准:调节两路微调电位器,使指针在 88MHz/108MHz、信号 0%/100% 对应刻度端点。
  4. 音质优化:调整分频电容容值 (0.47-2.2μF) 与扬声器箱体容积,消除箱体共振峰。
  5. 机箱装配:3D 打印/木工制作外壳,预留 LCD 窗、表头圆孔、编码器/按键/电位器轴伸出、天线座、电源开关、USB 充电口。
  6. 老化测试:连续播放 24h,监测电池电压、功放温升、接触不良、按键失效情况。

已知问题与改进计划

安全与法规提示

制造工艺

  1. 树莓派+Node-RED自制Nest风智能恒温器
  2. 树莓派构建稳健传感器 API:基于 GY‑91 多功能模块的 Flask 实现
  3. 树莓派低成本婴儿啼哭检测器 DIY 指南:Prota OS + Philips Hue + Volumio
  4. 复古 Numitron 管时钟:Arduino Nano 驱动,低温可靠省电
  5. Arduino Nano高速摄影控制器 – 定格水滴碰撞瞬间
  6. DIY VR 滑板:用 Arduino、Google Cardboard 与蓝牙打造虚拟滑雪体验
  7. 自制防水淋浴 FM 收音机:Arduino Nano + RDA5807 + Nokia 5110 LCD + PAM8403
  8. Arduino Mega 2560 接 NEO-6M GPS 模块完整教程
  9. Arduino DIY 电压表:Nokia 5110 屏幕显示,手把手教学
  10. 万圣节 PIR 人体感应惊悚音箱:声光联动恐怖道具制作
  11. Bluetooth Mesh设计抉择:模组还是离散器件?
  12. Python 模块导入实战指南:从基础到包管理