Introduction: Arduino MP3 Alarm Clock

A while ago, I stumbled over a component called DFPlayer. It's a tiny component that allows to play mp3 from an micro SD card (for less that 10€!).

http://www.dfrobot.com/wiki/index.php/DFPlayer_Min...

Since I was sick of using my smartphone as an alarm clock just to have music to wake me, I decided to build an alarm clock with it.

Step 1: Required Components

  • 1x DFPlayer (7,80 Euro)
  • 1x Arduino UNI (20 Euro)
  • 1x LCD Display (20x4, ~10 Euro)
  • 4x 10k Resistors
  • 2x 1k Resistors
  • 1x 10k Poti
  • 1x Rotary Encoder (1,50 Euro)
  • 3x Push Buttons
  • 1x Visaton FRS 8 Speaker (10 Euro)
  • Some cables for wiring and circuit board(s)

Additionally you may want an adjusting knob for the rotary encoder, a frame for the display and a case. My father made an oak case for me which looks pretty nice.

Step 2: Arduino Setup

  • Connect the Arduino via USB to your PC.
  • Make sure that you have the Arduino IDE installed.
  • Download the .ino the attached .ino file and the additional 3x zip files
  • The Arduino IDE provides a wizard where can select the zip file to include a new library.(Sketch -> Include Libraries ...): Install all 3x libraries using this wizard

The .ino file should compile now and you can upload it to your arduino.

Step 3: Wire Components

Before soldering everything together, I recommend using a breadboard to prototype everything.

I created a fritzing image to help with that. You should check the correct wiring of the DFPlayer by using the provided link. You can find a description of the DFPlayer's pins there, but assuming the 5V+ pin is in the upper left corner, the wiring should match as shown on the picture.

Step 4: Build Everything Into the Case

The step varies depending on what case you have chosen to use. I've added some pictures here to show the steps I've done to wire everything into my oak case. I decided to build smaller circuits on smaller circuit boards to have checkpoints where I can verify that everything is still working.

Comments

author
mfaust (author)2016-04-23

Ups, my fault. I build this clock a year ago so excuse me if I forgot something.

You have to install the timer library.

How To: http://playground.arduino.cc/Code/Timer

Download: https://github.com/JChristensen/Timer

The Arduino IDE also provides a wizard where can select the zip file to include a new library.(Sketch -> Include Libraries ...)

author
KamilG4 (author)mfaust2016-04-24

Thanks for a quick reply, I managed to upload your code, however I'm experiencing another problem. After wiring my lcd according to arduino, all I get on display are 2 rows of blocks (no characters) and no illumination. I checked the specification for my lcd here
https://www.adafruit.com/datasheets/TC2004A-01.pdf
And I can tell that the backlight pins are 15 and 16, whereas pin 15 on your diagram goes to arduino and does something else I presume.
I assume that other pins will be different too.
I'd appreciate it if you can help me out here, otherwise I'll just give up with this project.

author
mfaust (author)KamilG42016-04-24

I compared the datasheet with the one I used:

http://www.produktinfo.conrad.com/datenblaetter/17...

From what I can see the pins are the same. I recommend to prototype the lcd without any other components. I used the Adafruit tutorial for this:

https://learn.adafruit.com/character-lcds/wiring-a...

The first step is to get the backlight running, so I hope this will help you.

author
Kawajohn (author)2017-03-30

anyone can confirm this instructable works?
building it atm, got the screen working but using some old parts...
so would be nice if someone can confirm and i have to check parts

had it working but started up and it was frozen in ouhr menu, now i fried my 10k pot ;-p
waiting for parts

author
P-L (author)2017-02-18

Hi, Time.h attached to this tutorial is outdated. The new one can be found here:

https://github.com/PaulStoffregen/Time

author
KamilG4 (author)2016-04-23

Hi again, Ive been trying to upload your program to my Arduino and it keeps saying

Arduino: 1.6.8 (Windows 7), Board: "Arduino/Genuino Uno"

C:\Users\Golomp\Desktop\mephisto_V\mephisto_V.ino:3:19: fatal error: Timer.h: No such file or directory

#include "Timer.h"

^

compilation terminated.

exit status 1

I installed some Time library but it hasnt resolved the issue.

Also I see that you have included a

#include <DFPlayer_Mini_Mp3.h> Library, where do I get it from?

Sorry to be a pain, I'm not a programmer so I dont have a clue.

Thanks!

author
mfaust (author)2016-04-20

To be honest, I can only guess since I only have some basic skills and I had to play around with rotary encoders a lot before I got a successful combination of code and hardware. My approach would be to connect the rotary encoder to the arduino and play around with the connections. Create a separate sketch for it using this logic:

/**

* The rotary encoder implementation

*/

void updateEncoder(){

int MSB = digitalRead(encoderPin1); //MSB = most significant bit

int LSB = digitalRead(encoderPin2); //LSB = least significant bit

int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number

int sum = (lastEncoded << 2) | encoded; //adding it to the previous encoded value

//if(sum == 13 || sum == 4 || sum == 2 || sum == 11) encoderValue ++;

if(sum == 2) encoderValue --;//skip updates

//if(sum == 14 || sum == 7 || sum == 1 || sum == 8 ) encoderValue --;

if(sum == 1) encoderValue ++;//skip updates

}

Use the Serial.print to log the encoderValue and check if it is working as expected (I had to google this code, but can't remember where I got it).

author
KamilG4 (author)2016-04-20

Hi, I'm preparing to make this mp3 player, I have almost all needed parts. I'm just wondering how to connect my encoder as it seems to have a different pinout than yours. Here is the eBay auction number
181956049541
Many thanks in advance.

author
jalenw215 (author)2016-04-09

Are these momentary switch buttons or latch switch?

author
mfaust (author)jalenw2152016-04-10

Momentary switch buttons, this one:

http://www.conrad.com/ce/en/Search.html;jsessionid=07DD185D114B945F9143B6859DBF3877.ASTPCEN23?search=2050000219405&searchType=mainSearchBar

author
QS27 (author)2016-04-07

Is it possible to use a potentiometer instead of a rotary encoder?

author
mfaust (author)QS272016-04-07

Technically yes, but I wouldn't recommend it. It is just to complicate to use the position of the potentiometer to calculate the current input value.

author
jalenw215 (author)2016-03-18

Does the microSD go in the back? or do you have to take it apart to put one in. Either way I love this project.

author
mfaust (author)jalenw2152016-03-19

There is one photo of the last step where you can see a small opening on the back. This is where you can access the sd card. The dfplayer has a little spring inside the sd slot, so it jumps out.

A little bit of a hassle though: the mp3 files on the SD card must be numbered, starting with 0001_.., 0002_... etc. I've written a small program that renames the mp3 files I've selected automatically before I copy them on the SD.

author
tiunkabouter (author)2016-03-14

the 10K pot is for dimming the screen i assume?

author
mfaust (author)tiunkabouter2016-03-14

Yes, its for dimming the screen. I followed the adafruit tutorial for wiring lcds.

author
wold630 (author)2016-03-11

It looks so professional! Nice job!

author
mfaust (author)wold6302016-03-11

Thanks!

About This Instructable

5,838views

56favorites

License:

More by mfaust:The Maven Box: an Arduino Controller for Software DevelopersArduino MP3 Alarm Clock
Add instructable to: