Arduino Audio Player and Amplifier. How to?

Programming, Tutorial, Coding, New Design, and/or any project for your Arduino and Raspberry Pi can post your topic /suggestion here.
User avatar
dondon pramis
Inventor
Inventor
Contact:
Location: Philippines
Posts: 51
Joined: Sun Feb 12, 2017 8:28 am

Arduino Audio Player and Amplifier. How to?

Fri Nov 23, 2018 8:55 pm

In this article I will show you how easy it is to Play music/add sound effects using your Arduino Board. Thanks to the Arduino community who have developed some libraries to build this in a fast and easy way. We have also used IC LM386 here for amplification and noise cancelation purpose.
Simple-Arduino-Audio-Player-with-LM386-amplifier.jpg
Simple-Arduino-Audio-Player-with-LM386-amplifier.jpg (49.74 KiB) Viewed 34 times
Hardware Required:
~ Arduino UNO
~ SD Card Reader module
~ SD card
~ LM386 Audio Amplifier
~ 10uf Capacitor (2 Nos)
~ 100uf Capacitor (2 Nos)
~ 1K,10K Resistor
~ Push buttons (2 Nos)
~ Breadboard
~ Connecting Wires

Getting ready with your WAV audio files:
For playing sounds from SD Card using Arduino, we need audio files in .wav format because Arduino Board can play an audio file in a specific format that is wav format. To make an arduino mp3 player, there are a lot of mp3 shields are available which you can use with arduino. Or else to play mp3 files in arduino, there are websites which you can be used to convert any audio file on your computer into that specific WAV file.



So to convert any audio file into wav format, follow the below steps:

Step 1: Click on “Online Wav Converter” to enter into the website. (Use google to search for online converter)
Step 2: Arduino can play a wav file in the following format. You can toy around with the settings later, but these settings were experiment to be the best in quality.

Bit Resolution: 8 Bit
Sampling Rate: 16000 Hz
Audio Channel: Mono
PCM format: PCM unsigned 8-bit

Step 3: In the website click on “choose file” and select the file you want to convert. Then feed in the above settings.

Step 4: Now, click on “Convert File” and your Audio file will be converter to .Wav file format.

Step 5: Finally format your SD card and save your .wav audio file into it. Make sure you format it before you add this file. Also remember the name of your audio file. Similarly you can select any of your four audios and save them with names 1, 2, 3 and 4(Names should not be changed). I have converted four songs and have saved them as 1.wav, 2.wav, 3.wav and 4.wav

Circuit Diagram for this Arduino Audio File Player. The complete circuit diagram is shown in the Image below.
Simple-Arduino-Audio-Player-with-LM386-amplifier-circuit-diagram.png
Simple-Arduino-Audio-Player-with-LM386-amplifier-circuit-diagram.png (69.89 KiB) Viewed 34 times
Hence the Module is interfaced with the SPI pins of the Arduino as shown above in the diagram. It is further listed in the table below.

Arduino
~ +5V
~ Gnd
~ Pin 12
~ Pin 11
~ Pin 13
~ Pin 4

SD card module
~~Vcc
~~Gnd
~~MISO (Master In Slave out)
~~MOSI (Master Out Slave In)
~~SCK (Synchronous Clock)
~~CS (Chip Select)

Now the Arduino will be able to read the music file from the SD card and play it on the pin number 9. But the audio signals produced by the Arduino on pin 9 will not be audible much. Hence we amplify it by using the LM386 Low voltage Audio amplifier IC.

The amplifier shown above is designed for a Gain of 200 and the Vdd (pin 6) is powered by the 5V pin of the Arduino. If you want to increase/decrease the sound you can increase/decrease the voltage provided to this pin. It can withstand a maximum of 15V.

We also have two push buttons connected to the pin 2 and 3 of the Arduino. These switches are used to play the next track of the song and play/pause the music respectively. I have used these buttons just to demonstrate its abilities; you can play the song whenever required. Check the Demo Video at the end.

You can assemble this circuit completely over a Breadboard as shown in the picture below:
Simple-Arduino-music-Player-fritzing-breadboard-image.png
Simple-Arduino-music-Player-fritzing-breadboard-image.png (90.2 KiB) Viewed 34 times
Programming your Arduino:

Once we are ready with the Hardware and the SD card, we are just one step away playing those songs. Insert the card into your SD card module and follow the steps below.

Step 1: As said earlier we will be using a library to make this project work. The link for the library is given below. Click on it and select “Clone or download” and choose download as ZIP. Download Here---> TMRpcm library.

Step 2: Add this Zip file into your Arduino IDE by selecting Sketch->Include Library -> Add .ZIP Library

Step 3: The complete program of the arduino music player project is given at the end of this article, simply copy it and paste it in the Arduino Program. Now, click on Upload and get ready to play your audio files.

The program is self explanatory since they have the comment lines. But, I have also explained the ability of the TMRpcm library below.

Playing an audio file:

You can play any audio that is stored in Wav format inside the SD card module by using the line below.
music.play("3.wav");
//object name.play (“FileName.wav”);
You can use this line at places where you want to trigger the Audio

Pause an audio File:

To pause an Audio file, you can simply call the line below.
music.pause();
//objectname.pause();
Forwarding/Rewinding an Audio:

There are not direct ways to forward or rewind an Audio file, but you can use the line below to play a song at a particular time. This can be used to forward/rewind with some additional programming.
music.play("2.wav",33); //Plays the song from 33rd second
//objectname.play(“Filename.wav”,time in second);
Setting the quality of the audio:

The library gives us two qualities to play the music, one is to play as normal mode the other to play with 2X oversampling.
music.quality(0); //Normal Mode
music.quality(1); //2X over sampling mode
Setting the Volume of the audio:

Yes, you can control the volume of the audio through software. You can simply set the volume by using the line below. Higher music volumes tend to affect the quality of the audio, hence use hardware control when possible.
music.setVolume(5); //Plays the song at volume 5
//objectname.setVolume(Volume level);
After programming your Arduino simply press the button connected to pin 2 and your Arduino will play the first song (saved as 1.wav) for you. Now you can press the button again to change your track to the next song that is to play 2.wav. Likewise you can navigate to all four songs.

You can also play/Pause the song by pressing the button connected to pin 3. Press it once to pause the song and press it again to play it from where it stopped.

Hope you enjoyed the project. Now it is up to your creativity to use them in your projects. Let me know how you are planning to use it through the comment section and also if you have any problems in getting this thing work you can reach me through the forums comments.

Complete Code:

Code: Select all

/*
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  24 Nov 2018
 by dohangout.com

 This example code was created for dohangout.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 change 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;
}

}

/code]


Return to “ARDUINO AND RASPBERRY PI”

Links

In total there are 5 users online :: 1 registered, 0 hidden and 4 guests
Registered users: Bing [Bot]
Most users ever online was 156 on Sun Jun 17, 2018 7:42 am
Total posts 460
Total topics 339
Total members 69
Our newest member svetikvow
No birthdays today