原文地址:https://circuitdigest.com/microcontroller-projects/arduino-audio-music-player

使用LM386的简单Arduino音频播放器和放大器

ARDUINO的

经过**阿斯温斯·拉吉(Aswinth Raj)** 2017年6月26日117
在这里插入图片描述

在我们的项目中添加声音或音乐将始终使它看起来很酷,而且听起来更具吸引力。特别是如果您使用的是Arduino,并且有许多可用的引脚,则只需投资额外的SD卡模块和普通扬声器,即可轻松为项目添加声音效果。在本文中,我将向您展示使用Arduino开发板播放音乐/添加声音效果有多么容易。感谢Arduino社区,他们开发了一些库来快速方便地构建它。我们这里也使用IC LM386来放大和消除噪声。

在此项目中,我们将播放存储在SD卡中的.wav音乐文件。我们将对Arduino进行编程,以读取这些.wav文件,并通过LM386音频放大器在扬声器上播放音频。现在,由于此代码只能读取.wav文件,因此从技术上讲,该项目不能称为Arduino Mp3 Player,但是,您仍然可以听到带有它的歌曲。如果您正在寻找诸如不带SD卡Arduio音乐播放器之类的简单替代品,则应查看我们之前构建的Arduino旋律播放器

所需硬件:

  1. Arduino UNO
  2. SD卡读卡器模块
  3. SD卡
  4. LM386音频放大器
  5. 10uf电容器(2号)
  6. 100uf电容器(2号)
  7. 1K,10K电阻
  8. 按钮(2个)
  9. 面包板
  10. 连接线

准备好WAV音频文件:

为了使用Arduino从SD卡播放声音,我们需要.wav格式的音频文件,因为Arduino板可以播放wav格式的特定格式的音频文件。要制作arduino mp3播放器,可以使用很多mp3防护罩,您可以将它们与arduino一起使用。或者在arduino中播放mp3文件,您可以使用一些网站将计算机上的任何音频文件转换为该特定WAV文件。

因此,要将任何音频文件转换为wav格式,请按照以下步骤操作:

**步骤1:**点击“在线Wav转换器”进入网站。

第2步: Arduino可以播放以下格式的wav文件。您可以稍后使用这些设置进行修改,但是这些设置是经过实验证明质量最好的。

位分辨率8位
采样率16000赫兹
音讯频道单核细胞增多症
PCM格式PCM无符号8位

**步骤3:**在网站上,单击“选择文件”,然后选择要转换的文件。然后输入以上设置。完成后,在下图中应该看起来像这样
在这里插入图片描述
步骤4: 现在,单击“转换文件”,您的音频文件将转换为.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卡模块
+5伏Vcc
ndnd
针脚12MISO(主进从出)
销11MOSI(主从从入)
销13SCK(同步时钟)
销4CS(芯片选择)

现在,Arduino将能够从SD卡读取音乐文件并在9号插针上播放。但是,在9号插针上由Arduino产生的音频信号听不到很多。因此,我们使用LM386低压音频放大器IC对其进行放大

上面显示的放大器的增益设计为200,而Vdd(引脚6)由Arduino的5V引脚供电。如果要增加/减少声音,可以增加/减少提供给该引脚的电压。最高可承受15V电压。在此处了解有关LM386的200增益放大配置的更多信息。

我们还有两个按钮连接到Arduino的引脚2和3。这些开关用于分别播放歌曲的下一首曲目和播放/暂停音乐。我使用这些按钮只是为了演示其功能。您可以在需要时播放歌曲。最后查看演示视频。

您可以将电路完全组装在面包板上,如下图所示
在这里插入图片描述

编程Arduino:

一旦我们准备好硬件和SD卡,就可以轻松播放这些歌曲。将卡插入SD卡模块,然后按照以下步骤操作。

**步骤1:**如前所述,我们将使用一个库来使该项目正常工作。该库的链接在下面给出。单击它,然后选择“克隆或下载”,然后选择以ZIP格式下载。

**步骤2:**选择“草图”->“包含库”->“添加.ZIP库”,将此Zip文件添加到您的Arduino IDE中,如下所示,然后选择我们刚刚下载的ZIP文件。
在这里插入图片描述

步骤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”,以秒为单位的时间);

设置音频质量:

该库为我们提供了两种播放音乐的特质,一种是正常播放,另一种是2倍过采样。

music.quality(0); //正常模式
music.quality(1); // 2X过采样模式

设置音频音量:

是的,您可以通过软件控制音频的音量。您只需使用下面的行即可设置音量。较高的音乐音量会影响音频质量,因此请尽可能使用硬件控制。

music.setVolume(5); //以第5卷播放歌曲
//objectname.setVolume(音量级别);

该Arduino音乐播放器的工作原理:

对Arduino进行编程后,只需按连接到引脚2的按钮,您的Arduino就会为您播放第一首歌曲(保存为1.wav)。现在,您可以再次按下按钮,将曲目更改为播放2.wav的下一首歌曲。同样,您可以浏览所有四首歌曲。

您也可以通过按连接到引脚3的按钮来播放/暂停歌曲。按一次以暂停歌曲,然后再次按从停止处播放。观看下面的**视频,**了解完整的工作原理(或者放松一下自己的歌)。

使用Arduino播放SD卡中的歌曲

希望您喜欢这个项目。现在,在项目中使用它们取决于您的创造力。您可以制作口语时钟,语音助手,会说话的机器人,语音警报安全系统等等。让我知道您打算如何通过评论部分来使用它,并且如果在使该功能正常工作时遇到任何问题,可以通过下面的论坛或评论部分与我联系。

/*
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;
}

}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐