| 
  
 在我们的项目中添加声音或音乐总是会使其看起来更酷一些,听上去更有吸引力。特别是如果您使用的是Arduino开发板,并且有很多空余的引脚,只需要添加一个SD卡模块和一个普通的扬声器即可轻松添加音效。在本文中,我将向您展示使用您的Arduino开发板来播放音乐以及添加音效是多么容易。感谢Arduino社区开发了一些库,可以使用快速而简便的方式实现。。我们也在这里使用了LM386芯片进行放大和噪声消除。 
 需要的硬件:
 1.  Arduino UNO开发板
 2.  SD卡读卡器模块
 3.  SD卡
 4.  LM386音频放大器芯片
 5.  10uf电解电容
 6.  100uf电解电容
 7.   1K和10K电阻
 8.  按键
 9.  面包板
 10.  连接导线
 
 准备WAV音频文件:
 为了使用Arduino开发板从SD卡播放声音,我们需要.wav格式的音频文件,因为Arduino开发板可以播放wav特定格式的音频文件。要制作一个arduino mp3播放器,使用arduino开发板有很多可用的mp3扩展板。或者为了在arduino中播放mp3文件,有些网站可以用来将您计算机上的任何音频文件转换成特定的WAV文件。
 
 所以要将任何音频文件转换为wav格式,请按照以下步骤操作:
 步骤1:点击“Online Wav Converter”进入网站。
 
 步骤2:Arduino可以播放下列格式的wav文件。稍后您可以尝试各种设置,但以下这些设置经过验证是质量最好的。 |  位分辨率 |  8位 |  |  采样率 |  16000 Hz |  |  音频频道 |  单 |  |  PCM格式 |  PCM无符号8位 | 
 步骤3:在网站上点击“choose file”,选择要转换的文件。然后进入上述设置。一旦完成,它应该看起来类似下面的图像: 
  
 步骤4:现在,点击“Convert File”,您的音频文件将转换为.Wav文件格式。转换完成后也会自动下载。
 
 步骤5:最后格式化您的SD卡,并保存.wav音频文件。在添加此文件之前,请确保格式化。还要记住您的音频文件的名称。同样地,您可以选择任何四个音频,并使用名称1、2、3和4(名称不应更改)保存这些文件。我转换了四首歌,并将它们保存为1.wav、2.wav、3.wav和4.wav,如下所示。 
  
 电路原理和硬件:
 该Arduino音频文件播放器的电路原理图很简单。完整的电路图如下图所示。 
  
 我们知道我们的音频文件保存到SD卡中,因此我们将一个SD卡读卡模块连接到Arduino接口。 Arduino和SD卡使用SPI通信协议进行通信。因此,模块连接到Arduino的SPI引脚接口,如上图所示。在下表中进一步列出。 |  Arduino |  SD卡模块 |  |  +5V |  VCC |  |  GND |  GND |  |  12引脚 |  MISO(主进从出) |  |  11引脚 |  MOSI(主出从进) |  |  13引脚 |  SCK(同步时钟) |  |  4引脚 |  CS(芯片选择) | 
 
 现在,Arduino将可以从SD卡读取音乐文件,并将其在9引脚上播放。但是由Arduino的9脚上产生的音频信号不会发出声音。因此,我们使用LM386低电压音频放大器IC进行放大。
 上图所示的放大器设计为增益为200,Vdd(引脚6)由Arduino的5V引脚供电。如果要增加/减少音量,您可以增加/减少提供给此引脚的电压。它可以最大承受15V。点击此链接了解更多关于LM386的200增益放大配置。
 我们还有两个按钮连接到Arduino的引脚2和3。这些开关分别用于播放歌曲的下一曲目,和播放/暂停音乐。我已经测试过这些按钮了,您可以随时播放歌曲。
 
 您可以将此电路完全组装在面包板上,如下图所示 
  
 编程Arduino:
 一旦我们准备好了硬件和SD卡,我们就差一步来播放这些歌曲了。将SD卡插入SD卡模块中,然后按照以下步骤操作。
 步骤1:如前所述,我们将在该项目中使用库。库文件的链接如下。点击它,选择“Clone or download”,然后选择下载保存ZIP。
 ●  TMRpcm库 
 步骤2:通过选择Sketch-> Include Library - > Add .ZIP Library(如下所示),然后选择我们刚刚下载的ZIP文件,将此Zip文件添加到Arduino IDE中。 
  
 步骤3:本文末尾给出了arduino音乐播放器项目的完整程序,只需将其复制并粘贴到Arduino程序中即可。现在,点击上传并准备播放你的音频文件。
 
 程序很容易看懂,它们有注释行。但是,我在下面也解释了TMRpcm库的重要函数。
 
 播放音频文件:
 您可以使用以下代码播放SD卡模块内存储的Wav格式的任何音频。
 复制代码music.play( “3.wav”);
// object name.play(“FileName.wav”);
您可以在要播放音频的地方使用该代码行。 
 暂停音频文件:
 要暂停音频文件,您可以简单地调用下面的代码行。 复制代码music.pause();
//objectname.pause();
 快进/快退音频:
 没有直接的方式来快进或快退音频文件,但您可以使用下面的代码行在特定时间播放歌曲。这可以结合使用一些其他代码实现快进/快退音频。
 复制代码music.play( “2.wav”,33); //从第33秒播放歌曲
//objectname.play("Filename.wav",time in second);
 设置音频的质量:
 库给我们两个品质的音乐,一个是作为普通模式,另一个是2X采样。
 复制代码music.quality(0); //正常模式
music.quality(1); // 2X采样模式
 设置音频音量:
 是的,您可以通过软件来控制音频的音量。您可以使用下面的代码行简单地设置音量。较高的音量往往影响音频的质量,因此尽可能使用硬件控制。
 复制代码music.setVolume(5); //播放歌曲在音量5
//objectname.setVolume(Volume level);
 Arduino音乐播放器:
 在编程Arduino之后,只需按下连接到2引脚的按钮,您的Arduino将为您播放第一首歌曲(保存为1.wav)。现在,您可以再次按下按钮将您的曲目更改为要播放的下一首歌曲2.wav。同样,您可以导航到所有四首歌曲。
 您还可以通过按连接到3引脚的按钮来播放/暂停歌曲。按一下可暂停歌曲,然后再次按下可从停止的位置播放歌曲。
 
  希望你能喜欢这个项目。现在释放您的创造力,在您的项目中使用它们。你可以做一个说话时钟、语音助手、说话机器人、语音警报安全系统等等。如果你有任何问题,可以通过论坛与我联系。 
 代码 复制代码Arduino Based Music Player
 This example shows how to play three songs from SD card by pressing a push button
 The circuit:
 * Push Button on pin 2 and 3
 * Audio Out - pin 9
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4 
 created  25 Jun 2017
 by Aswinth Raj
 This example code was created for CircuitDigest.com
 */
 
#include "SD.h" //Lib to read SD card
#include "TMRpcm.h" //Lib to play auido
#include "SPI.h" //SPI lib for SD card
#define SD_ChipSelectPin 4 //Chip select is pin number 4
TMRpcm music; //Lib object is named "music"
int song_number=0;
boolean debounce1=true;
boolean debounce2=true;
boolean play_pause;
void setup(){
music.speakerPin = 9; //Auido out on pin 9
Serial.begin(9600); //Serial Com for debugging 
if (!SD.begin(SD_ChipSelectPin)) {
Serial.println("SD fail");
return;
}
pinMode(2, INPUT_PULLUP); //Button 1 with internal pull up to chage track
pinMode(3, INPUT_PULLUP); //Button 2 with internal pull up to play/pause
pinMode(3, INPUT_PULLUP); //Button 2 with internal pull up to fast forward
music.setVolume(5);    //   0 to 7. Set volume level
music.quality(1);        //  Set 1 for 2x oversampling Set 0 for normal
//music.volume(0);        //   1(up) or 0(down) to control volume
//music.play("filename",30); plays a file starting at 30 seconds into the track    
}
void loop()
{ 
  
  if (digitalRead(2)==LOW  && debounce1 == true) //Button 1 Pressed
  {
  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);} //Play song 1 from 10th second 
  if (song_number ==2)
  {music.play("2.wav",33);} //Play song 2 from 33rd second 
  if (song_number ==3)
  {music.play("3.wav");} //Play song 3 from start
  if (song_number ==4)
  {music.play("4.wav",25);} //Play song 4 from 25th second }
  if (digitalRead(3)==LOW  && debounce2 == true) //Button 2 Pressed
  {
  music.pause();  Serial.println("PLAY / PAUSE");
  debounce2=false;
  }
  if (digitalRead(2)==HIGH) //Avoid debounce
  debounce1=true;
  if (digitalRead(3)==HIGH)//Avoid debounce
  debounce2=true;
}
 
 本文翻译自:https://circuitdigest.com/microcontroller-projects/arduino-audio-music-player 
 |