基于Arduino制作SD卡音乐播放器

  • 内容
  • ....
  • 相关

一、项目介绍

基于Arduino的SD卡音频播放器

前面用ATtiny85制作SD卡音乐播放器,本次主要利用Arduino UNO 和SD卡制作音乐播放器。这个播放器不需要添加多余的模块,只需要SD读卡器和Arduino UNO开发板就可以播放音频文件。遗憾的是我们需要将音频文件提前转换为wav文件格式,这与ATtiny85制作的SD卡音乐播放器一致。音频文件转换成wav格式,可遵循以下步骤:

1、进入“在线Wav转换

2、推荐的转换格式设置

Bit Resolution

8 Bit

Sampling Rate

16000 Hz

Audio Channel

Mono

PCM format

PCM unsigned 8-bit

3、在网站上点击“choose file”,选择你想要转换的文件。然后按上面的设置输入值。操作界面如下:

音频文件在线转换为wav文件

4、点击 “Convert File” ,这样音频文件就转换器为.wav格式了,下载保存到SD卡。

二、元器件清单

1、Arduino UNO

2、8欧姆 0.25瓦 小喇叭

3、SD卡卡座模块

4、SD卡

5、连接线

三、电路连接图

基于Arduino的SD卡音频播放器

Arduino UNO 与SD卡模块的引脚连接如下表

Arduino SD card 模块
+5V Vcc
Gnd Gnd
Pin 12 MISO (Master In Slave out)
Pin 11 MOSI (Master Out Slave In)
Pin 13

SCK (Synchronous Clock)

Pin 4 CS (Chip Select)

Arduino UNO将从SD卡读取音乐文件,并从9号针脚输出音频信号。如果觉得Arduino发出的音频信号太小,可将9号引脚接入功放器放大声音信号,可参考下图,加入LM386芯片实现音频放大,这里不再过多赘述。

Arduino音频播放器添加LM386放大电路

实物连接图:图中还有两个按钮开关连接到Arduino的2号和3号引脚。开关实现切换下一首的功能和实现播放/暂停功能。

Arduino音频播放器添加放大电路

四、库文件地址

TMRpcm library

文件下载后,应该为.zip文件,不用解压缩,安装库文件可参考下图操作:

为Arduino安装库文件

五、程序代码

/*Arduino  Music Player */

#include "SD.h"     //读取 SD card 文件
#include "TMRpcm.h"     //读取 音频播放文件
#include "SPI.h"     //读取 SD card的SPI 文件

#define SD_ChipSelectPin 4     //设置CS 引脚 4
TMRpcm music;     //设置音频播放对象 "music"

int song_number=0;
boolean debounce1=true;
boolean debounce2=true;
boolean play_pause;

void setup(){
music.speakerPin = 9; //设置音频输出针脚 9
Serial.begin(9600);     //串口调试
if (!SD.begin(SD_ChipSelectPin)) {
Serial.println("SD fail");
return;
}

pinMode(2, INPUT_PULLUP); //Button 1 切换音频文件
pinMode(3, INPUT_PULLUP); //Button 2 播放或暂停
pinMode(3, INPUT_PULLUP); //Button 2 快进

music.setVolume(5);    //   设置音量0 ~7
music.quality(1);        //  设置 1 或 2x 采样速度,0为正常值
//music.volume(0);        //   1(高)  0(低)控制音量
//music.play("filename",30);     //从30秒开始播放一个文件
}

void loop(){

if (digitalRead(2)==LOW  && debounce1 == true)     //Button 1 按下
{
song_number++;
if (song_number==5)
{song_number=1;}
debounce1=false;
Serial.println("KEY PRESSED");
Serial.print("song_number=");
Serial.println(song_number);

if (song_number ==1)
{music.play("1.wav",10);} //从10秒开始播放第一首歌

if (song_number ==2)
{music.play("2.wav",33);} //从33秒开始播放第二首歌

if (song_number ==3)
{music.play("3.wav");}   //从开始位置播放第三首歌

if (song_number ==4)
{music.play("4.wav",25);}   //从25秒开始播放第四首歌

if (digitalRead(3)==LOW  && debounce2 == true) //Button 2 按下
{
music.pause();  Serial.println("PLAY / PAUSE");
debounce2=false;
}

if (digitalRead(2)==HIGH)   //防止误操作
debounce1=true;

if (digitalRead(3)==HIGH)  //防止误操作
debounce2=true;
}

}

至此基于Arduino UNO的SD卡音频播放器就完成了,有兴趣可将它与基于ATtiny85的SD卡音频播放器进行对比测试。