|
在我们的项目中添加声音或音乐总是会使其看起来更酷一些,听上去更有吸引力。特别是如果您使用的是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
|