自制防水淋浴 FM 收音机:Arduino Nano + RDA5807 + Nokia 5110 LCD + PAM8403
所需元件与材料
| 元件 | 数量 | 备注 |
|---|---|---|
| Arduino Nano R3 | 1 | 主控 |
| RDA5807 FM 收音模块 | 1 | 支持 RDS、音量、低音增强 |
| Nokia 5110 LCD(3.3V/5V 兼容) | 1 | 84×48 像素单色屏 |
| Tiny RTC 模块(DS1307 + 24C32 EEPROM) | 1 | 时钟与频点存储 |
| PAM8403 2×3W D 类功放 | 1 | 驱动扬声器 |
| LM2596 降压模块 | 1 | 12V→5V 供电 |
| LIR2032 3.6V 充电纽扣电池 | 1 | RTC 掉电走时 |
| IRLZ44N 功率 MOSFET | 1 | 灯光控制开关 |
| PEIYING PY1010C 4Ω 3W 扬声器 | 1 | |
| 12V 3A 电源适配器 | 1 | 整机供电 |
| 2200 μF/25V 电解电容 | 2 | 电源滤波 |
| 100 μF 电解电容 | 1 | |
| 3W LED 灯珠(替代 G4 卤素灯) | 1 | 淋浴间照明 |
| 电阻:100Ω、1kΩ、10kΩ×6、100kΩ | 各若干 | 分压、上拉、限流 |
项目背景
原装淋浴房控制系统(TR028)损坏无法维修,后买的廉价防水收音机也用了一年就坏。拆解 TR028 发现内部使用 TEA5767 收音模块,调研后选用功能更强的 RDA5807(支持 RDS、音量、低音增强)。参考多个开源项目,结合自身需求设计了这款全功能防水收音机。
核心功能
- FM 收音,双行 RDS 显示(台名 + 滚动文本)
- 6 个预存台一键呼出
- 自动/手动搜台,搜到后 4 秒内可存入任一预存位
- 音量 0–15 级、低音增强开关
- 淋浴房灯光开关(MOSFET 控制)
- 时钟/日历/星期显示(DS1307 RTC)
- 信号强度 5 级条形图、立体声指示
- 待机/开机键,上电不自动开机,防误触发
- 触摸面板操作(原 TR028 面板,2 列×7 行矩阵键盘)
- 温度显示(热敏电阻采样平均)
硬件实现要点
触摸面板适配
原装面板为 2×7 矩阵键盘,使用 Keypad 库扫描,映射为功能键:
| 按键 | 功能 |
|---|---|
| L / P | 灯光 / 电源 |
| I / D | 信息(日期) / 时间校准 |
| 1–6 | 预存台 1–6 |
| M / m | 模式切换 / 存台确认 |
| < / > | 频率减 / 加(或音量、搜台) |
电源设计
- 12V 适配器 → LM2596 降至 5V 供 Arduino、收音模块、功放、LCD 背光
- Arduino Nano 自带 Li-Po 充电电路,但本项目改用 LIR2032 给 RTC 供电
- 功放 PAM8403 直连 5V,扬声器 4Ω 3W
- 灯光由 IRLZ44N MOSFET 低边开关,Arduino D7 控制栅极
信号处理
- RDA5807 通过 I2C(A4/A5)配置,中断脚接 D2 读取 RDS 数据块
- 使用
Radio、RDSParser、RDA5807M库处理调频与 RDS 解析 - Nokia 5110 通过 SPI 接口(D6–D3)驱动,
LCD5110_Graph库绘图 - 温度采集:A7 读热敏电阻分压,每 0.6 s 采一次,5 次取平均,Steinhart-Hart 公式换算摄氏度
软件架构
主循环
- 检测频率/音量变化 → 写入 EEPROM 与寄存器
- 扫描键盘事件(短按、长按 2 s)
- 轮询 RDS 数据包 → 回调更新屏幕
- 定时采样温度 → 计算并显示
- 按键 “I” 显示日期 4 s(含星期中文)
- 长按 “D” 2 s 对时:若当前分在 45–59 则时+1、分秒清零;若在 1–15 则仅分秒清零
- 刷新 LCD:信号强度、分隔线、时间、频率、立体声标志、模式名、菜单值、日期
关键子函数
search(dir):写寄存器 0x02 触发自动搜台,轮询状态寄存器 BIT14 判断锁定canal(freq):直接写频率寄存器 0x03WriteReg/ReadStatus:I2C 随机/顺序读写 RDA5807simplifyPath():路径优化(原为迷宫算法移植,此处保留)
已知问题与改进
- DS1307 晶振精度一般,月差约几分钟,已加长按校准功能缓解
- Nokia 5110 亮度偏低、视角窄,计划换 1.8″ TFT 彩屏(需重写显示驱动)
- PAM8403 功率不足,考虑升级 PAM8610 (2×15W) 或 TDA7297
- 代码中
delay(4000)阻塞主循环,后续可改用非阻塞定时器
更新记录
- Update 1:12V 线路加 2A 保险丝;上电后按电源键自动恢复音量模式(
menu=1) - Update 2:LCD 出现漏液/对比度下降,正在寻找替代方案
原理图与代码
完整原理图见文末;核心代码约 600 行,含库依赖:LCD5110_Graph、AT24CX、Wire、RDSParser、radio、RTClib、RDA5807M、Keypad。信号强度图标为 5 组 17×6 位图数组存储在 Flash。
制造工艺
- 无线电技术演进与工程:从马可尼到数字广播
- 集成电路 (IC):微观世界里的算力引擎与制造极限
- JX 波形发生器 – 基于 Arduino 的 DDS 振荡器,带 OLED 显示屏
- MotionSense:基于 Arduino 与 ESP8266 的智能入侵检测系统
- Arduino MKR IoT 套件打造智能密码盒:Blynk 远程设密、舵机开锁
- 智能淋浴调节器:基于电磁阀的精准定时节水控制器
- 无线红外测温枪:Arduino Nano + HC-06蓝牙 + MLX90614
- 自制自主啤酒运输坦克:Walabot + Arduino + 树莓派 + Alexa语音控制
- 进阶微控制器实验平台:ESP32、Arduino、PIC 与多传感器模块集成
- MOSMusic 套件:MOSFET + Arduino 打造音乐同步灯光控制系统
- 基于 Arduino MKR GSM 1400 和 Hologram IoT 的智能腕带
- 智能插座:基于 Arduino 与 RTC 的 120V 定时开关插座