Arduino 控制的 MP3 播放器 Zen 音箱


土豆烤肉
转载
发布时间: 2025-11-29 09:20:17 | 阅读数 0收藏数 0评论数 0
封面
这是一个由 Arduino Atmega328 控制的 MP3 播放器的设计和制作过程。我的妻子想要一个可以播放舒缓的“禅意”音乐(例如雨声或海浪声)的助眠音箱。本项目使用了 DFPlayer mini MP3 播放器。

准备工作:

材料:

  1. 多色 #18 AWG 规格导线
  2. 焊锡丝助焊剂(flux)
  3. 排针(公头) —— 用于焊接连接
  4. 热缩管(heatshrink tubing)
  5. 热熔胶(hot glue) —— 用于固定模块、屏幕等
  6. 白色哑光喷漆(matte white spray paint) —— 用于喷涂外壳(建议干燥 24 小时)
  7. 面包板(breadboard) —— 用于原型测试
  8. 杜邦跳线(jumper wires)
  9. 1 个 18650 锂电池(单节)
  10. 1 个 18650 单节电池座(DKARDU 模块套装中已包含)
  11. 2 个 面板安装式轻触按钮(瞬动开关)
  12. 1 个 面板安装式自锁按钮(开关型,按一下开、再按关)
  13. 2 个 旋钮(分别用于电位器和旋转编码器)
  14. 若干 #6 螺丝与螺母(用于固定 PCB 和元件)
  15. 若干 小号橡胶垫圈(用于抬高并固定 PCB)
  16. 若干 垫片(按需使用)
  17. 1 个 原型板(洞洞板) 自行设计并制作的 PCB
  18. 4 个 0.1μF 薄膜电容(或等效低压电容)
  19. 2 个 22pF 陶瓷电容(低压)
  20. 1 个 100μF 电解电容(16V)
  21. 1 个 2N2222A NPN 三极管
  22. 5 个 10kΩ 电阻
  23. 4 个 330Ω 电阻
  24. 2 个 1kΩ 电阻
  25. 1 个 100Ω 电阻
  26. 1 个 12kΩ 电阻
  27. 1 个 10kΩ 电位器(面板安装型)
  28. 1 个 16MHz 晶振
  29. 1 个 5mm 红色 LED
  30. 1 个 Arduino UNO 开发板
  31. 1 个 ATmega328P 微控制器(裸片)
  32. 1 个 28 脚 IC 插座
  33. 1 个 DFPlayer Mini 模块(Aideepen 品牌,5 片装 YX5200 MP3 播放板,支持 TF 卡/USB,适用于 Arduino)
  34. 1 个 DKARDU 18650 锂电池充电升压模块(型号 JK-US-648,含 5 片充电升压板 + 5 个 18650 电池盒,输入 3.7V/4.2V,输出 5V/9V 1A)
  35. 1 个 三色共阴极 RGB LED(Daokai 品牌,5mm,红/绿/蓝,4 引脚,DC 3V,20mA,100 个装)
  36. 1 个 旋转编码器(Cylewet 品牌,360° 带按键数字电位器,5 引脚 + 旋钮帽,5 个装)
  37. 1 个 I2C 1602 LCD 显示屏(Freenove 品牌,2 行 × 16 字符,IIC/TWI 接口,兼容 Arduino/Raspberry Pi/ESP32 等,2 个装)
  38. 1 个 全频扬声器(ACEIRMC 品牌,4Ω 5W,全频音频喇叭,4 个装)
  39. 1 个 项目外壳(LeMotech 品牌,ABS 塑料防水防尘接线盒,IP65 等级,尺寸 120×120×90 mm,黑色,2 个装)
  40. 2 个 Micro USB 电源接口转接板(Daokai 品牌,Micro USB 母座转 DIP 插针,2.54mm 间距,带 50 针排针,10 个装)
  41. 1 个 自粘乙烯基贴膜(哑光黑色,12 英寸 × 40 英尺卷,适用于 Cricut/Silhouette,用于装饰或制作 LCD 边框)
  42. 1 个 Micro SD 卡(32GB Class 10 高速卡,含 SD 转接器,2 张装)
  43. 1 个 USB 转 SD 卡读卡器(Type-C 接口,支持 SD + MicroSD,即插即用,适用于 iPhone/Mac/相机等)
1

面包板搭建

这是一个比较复杂的项目,所以务必先在面包板上进行搭建。这主要是因为 DFPlayer 比较难用,在实际搭建之前,你应该检查所有软件是否运行正常,以及 Arduino 是否能与 DFPlayer 通信。稍后我会详细讨论这一点。

使用 Arduino Uno 开发板作为微控制器。将 DFPlayer 和 LED 等元件放置在面包板上,并用跳线将它们连接到 Arduino Uno。使用 UNO 的 +5V 引脚为所有元件供电。

2

示意图

以下是我对电路图的注释:

  1. USB-Micro 连接器 USB1 用于直接为电路板供电,绕过电池。
  2. 可以通过 H1 接头和 USB-Micro 接口 USB2 使用编程器对 Arduino 进行板载编程。板载编程似乎只有在 DFPlayer 未连接时才能正常工作,原因不明。无论如何,您可以在 Arduino UNO 上对 ATMEGA 328P 进行编程,然后将其移至您的项目板上,这样如果您不需要这些接口,就可以将其移除。
  3. 重要提示:U6 电池充电器和升压模块采用 USB-C 接口。插入后,无论电源开关是否打开,它都会直接向电路板提供 5V 电源。这是因为电源开关仅控制电池供电。非常重要:此模块可将电池的 3.7V 电压升压至最高 28V!因此,在连接任何设备之前,务必将其电压调整至 +5V。您可以使用模块上的一个小型电位器进行调整。请参见模块图片。电位器位于 USB-C 接口的左侧。您需要使用数字万用表 (DVM) 进行此操作。将万用表连接到模块的 +/- 输出引脚,将模块连接到 USB-C 电源或已充电的电池,然后调节电位器至最高 5V。
  4. LED 2、3、4 都是同一个三色 LED。这个 LED 亮度很高,所以我需要在接地引脚上加一个 R12 (12K) 电阻来降低亮度。这个 LED 有 4 个引脚。你需要用数字万用表来区分每个引脚。或者,你也可以通过一个 330 欧姆的电阻将它连接到 +5V 电源,以限制电流。
  5. LCD 显示屏是一个内置背光的 I2C 显示屏。如果通过软件开启背光,它会非常亮。如果想要调暗亮度,需要稍作修改。移除显示模块背面的 R9 电阻(见图)。这是一个非常小的贴片电阻。用镊子将其取下,同时用烙铁熔化电阻上的焊点。操作时要小心迅速,以免损坏模块。接下来,将一根导线连接到显示屏一端标有“A”的 LED 的阳极。这根导线连接到 R9 电阻,R9 电阻连接到 Arduino 的 9 号引脚。我们在这个引脚上施加一个 PWM 信号来控制亮度。令人遗憾的是,你无法通过软件或模块上的电位器来控制 LCD 的亮度,但事实就是如此。
  6. 晶体管 Q1 用于在启动时断开扬声器,因为它在上电时会发出很大的噪音——非常烦人,我们不想每次都听到这种声音!
PDF
Schematic_MP3-Player_2025-09-13.pdf
90.04KB
3

DFPlayer 的异常行为及应对措施

这是我做过的最令人抓狂的 Arduino 项目之一,主要原因就是 DFPlayer 模块。以下是我遇到的问题以及一些解决方法:

我买了 5 个 DFPlayer 模块,庆幸自己多买了几个。其中一个完全无法工作;第二个在把电路板装进盒子时不知怎么就弄坏了,SD 卡插槽松动,无法固定 SD 卡。由此可见,这些模块在物理结构上很脆弱,可靠性也可能存在问题。

我使用了一个编程转接器(dongle)来给 PCB 上的 ATmega328P 微控制器烧录程序。一开始是正常的,但一旦我把 DFPlayer 连接到 ATmega328P 上,编程器就再也无法工作了。我手头有好几个不同的编程器,但只要 DFPlayer 接着,它们全都失效。具体原因我至今没搞明白。所以除非你拔掉 DFPlayer,否则我预留的编程接口和排针就毫无用处。

当你往 SD 卡里保存音频文件时,请务必先将卡格式化为 FAT32 格式。

MP3 文件必须按特定方式命名:要么是 0001、0002……,要么是 001、002……这样的编号格式。否则 DFPlayer 无法识别这些文件。

你的音频文件必须是 MP3 格式。

奇怪的是,一旦你把文件拷贝到 SD 卡上,DFPlayer 似乎就会“记住”最初的状态。如果你之后更改文件名或顺序,它经常会播放错误的文件。因此,最好的做法是一开始就确定好你要使用的音频文件及其播放顺序,一次性拷贝到 SD 卡后就不要再改动。

如果你确实需要更新 SD 卡上的 MP3 文件,可以尝试以下方法来规避上述问题:

  1. 完全删除 SD 卡上的所有文件,然后重新拷贝你需要的文件;
  2. 重新格式化 SD 卡,再拷贝所有需要的文件;
  3. 更改文件编号方式。例如,如果之前用的是 0001、0002,现在改成 001、002;
  4. 先用原始文件名拷贝到 SD 卡,然后再在卡上重命名为 0001、0002 等格式;
  5. 换一张新的 SD 卡试试。

DFPlayer 的说明文档中提到,你可以在 SD 卡上创建任意数量的文件夹存放音频文件。比如,在名为 “MP3” 的文件夹中,你可以使用 playMp3Folder() 命令来播放该文件夹内的文件。这确实可行,但你必须在播放命令后加上一个与音频长度对应的 delay() 延时。例如,对于一段 3 秒的音频片段,你需要写 delay(3000)。这种方法适用于短音频,但对于较长的音乐就不实用了。

对于较长的音乐文件,建议直接放在 SD 卡根目录下,并使用 myDFPlayer.play() 命令播放。例如,要播放根目录下的 0001.mp3 文件,就调用 myDFPlayer.play(1);

但这里有个严重限制:根目录下最多只能有效识别前 9 个文件。如果你试图播放第 10 个文件(即 myDFPlayer.play(10)),DFPlayer 会混淆并播放第 1 个文件。目前我还不知道有什么办法能绕过这个问题。幸运的是,我的项目不需要太多音频文件,所以这个限制对我影响不大。

4

PCB 板或原型板

这个项目中,我使用 EasyEDA 设计了一块 PCB,并通过 JLCPCB 进行了制作。从下单到收货不到一周,速度很快。虽然这种方式让组装变得简单,但成本相对较高。与直接使用洞洞板(面包板或原型板)相比,它既不够快,也不够便宜。

我的 PCB 设计并不理想,犯了不少错误,还有一些细节没有考虑到。如果以后还想再制作更多这样的设备,我肯定需要重新设计 PCB。因此,我建议你直接使用原型板来搭建电路——毕竟这个电路本身并不复杂。

5

Arduino程序

Arduino 程序代码已添加完整注释。您可以根据需要进行修改,也可以直接使用。

INO
MP3Player_Final_Code.ino
27.98KB
6

施工

制作及其他注意事项:

  1. 在 PCB 或洞洞板下方使用橡胶垫圈或垫片,以将其固定在所需的高度。
  2. 先确定好 PCB 的安装位置后,再钻孔并用锉刀修整 USB 接口的开孔,确保与 PCB 上的 USB 接口位置精确对齐。
  3. 为 LCD 屏幕开孔时,先钻孔定位,再用线锯(jigsaw)切割出所需形状。可用热熔胶将屏幕固定到位。
  4. 使用电钻在盒体上钻出扬声器网罩的孔洞。我用一张纸模板标出每个孔的精确位置,这样打出来的孔排列整齐、外观美观。
  5. 为螺丝、电位器、旋转编码器、按钮等元件钻出对应的安装孔。
  6. 用热熔胶将电池充电/升压模块固定在合适位置。
  7. 使用自粘乙烯基贴膜(self-adhesive vinyl)为 LCD 制作一个边框(bezel),以遮盖开孔边缘,提升整体外观。具体做法是:先仔细测量 LCD 尺寸,然后用直尺和美工刀(Xacto knife)裁剪贴膜。
  8. 若想让塑料外壳更美观,可用喷漆将其喷涂成你喜欢的颜色(白色效果不错)。注意:务必在所有开孔完成并打磨光滑后再进行喷漆。虽然喷漆罐上写着“5 分钟快干”,但实际上此时漆面仍很软、容易刮花。建议至少晾干一整晚,最好放置 24 小时,这样漆面会更耐磨、不易划伤。
  9. 使用黑色记号笔配合字母模板,在盒子上清晰标注各个按钮、旋钮等功能部件的名称。

音频文件获取提示:

YouTube 等平台上有海量的音乐资源。你可以使用免费的文件转换工具将这些视频转换为 MP3 格式用于本项目。我个人推荐两款免费工具:

  1. Any Video Converter(全能视频转换器)
  2. YTMP3 - YouTube to MP3 Converter(YouTube 转 MP3 工具)
阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载
pdf下载 举报