Kids MP3 Music Box

When looking for some new DIY projects around arduino I found some nice ideas on RFID based MP3 players for Kids. And there is one great professional toy box on the market – these guys rule. They made a great business out of their smart idea. Check out – you’ll find their page!

As my two kids are getting into listening to audiobooks and music, more and more, and still are using good old compact discs with all the handling hassle, I decided to build such an MP3 player box with some nice features to make it a great individual toy for them. After I recently bought my first 3D printer this project seemed to be some good playground to also dive into 3D printing.

So I started into concept phase – which features would I want to implement – RFID, MP3 Player, WLAN (cancelled later), IMU control, LCD display, Alarmclock, wireless charging … Needed to do some research, what components I would need. Which components could I reuse? I still had an IMU, LCD module, some Arduino nanos.

With some experience in soldering and measuring the assembly is doable within 1-2 after work sessions.

The printing of the Box, consisting of a base, a cover plate and a charging station, takes some time (12+ hours depending on the printer and slicer settings), but I did that that during soldering.

Step 1: Components

The components are really mainstream meanwhile. Here is a list of components I used for this project.

1. LCD Display 1602 2×16 Big Characters 5 V 122*44 MM blue

2. RFID reader- NFC RFID-RC522 RF IC

3. MP3 Player – DFPlayer Mini MP3 Player Module MP3 Voice Decode Board For Arduino Supporting TF Card U- Disk IO/Serial Port/AD

4. Loudspeaker- 4 ohm 3Watts 53MM Square Speaker 36MM External Magnetic Foam Edge Silvery Cap

5. Micro SD Card 8GB

6. MPU6050 3 Axis Analog Gyroscope Sensor

7. MINI USB NANO V3.0 CH340 5 V 16 Mt Atmega328 Micro Controller Board (nearly all pins used!)

8. DS3231 Precision RTC – Alarmclock module

9. Powerbank JETech 3400 mAh

10. Universal DIY PCBA Qi Wireless Charger Receiver Module – Blue + Black

11. Prototype PCB Board Protoboard Tinned Universal Breadboard Prototyping Solderless FR4 PCB Double-Sided 5×7 cm 50x70mm FR4

12. 1x 2N 3904: Transistor NPN TO-92 40V 0,2A 0,5W

13. 1x1kOhm resistor to limit base current, 3x220Ohms 0,5 w (parallel! to cater for wattage – one can use a higher spec resistor, I had these) for current load between emitter and collector. 2x1kOhms for TX and RX line between Arduino and DFplayer to kill noise – I did not have an issue here.

14. Some standard DIY electronics stuff – soldering iron, solder, clipper, connectors, cables…

14. A lot of energy and a couple of hours to assemble 🙂

Total price for above components ~30-35€ – mostly from and Shipping takes some time, but price is great.

Step 2: Electronics Connectivity

I did not draw a layout, nor did I use any handy tool like Fritzing or similar. Probably at a later point in time. Description below shows the connectivity. All pins that are not mentioned are not connected.

During soldering I kept measuring connectivity of the lines, end check with components mounted was also done. Nothing more annoying than having to look for one bad connection after all is assembled. Most care on GND and voltage +.

The pin layout of any component is available through google.

LC Display


LED+—Via 220Ohm to 5V powerbank

DB7—Arduino D2

DB6—Arduino D3

DB5—Arduino D7

DB4—Arduino D8

E—Arduino A1/Pin 15


RS—Arduino A0/Pin 14

V0— 10Kohm potentiometer Rx (to adjust contrast)

VDD—Powerbank +5V


DFPlayer MP3 player

VCC—+5V Powerbank

RX— software serial Arduino D5 (potentially via 1kOhm resistor in case of noise problems)

TX— software serial Arduino D9 (potentially via 1kOhm resistor in case of noise problems)

SPK1—Speaker +

GND—Powerbank GND

SPK2—Speaker –

Busy—Arduino A7


NFC522 RFID reader

3.3V—Arduino 3.3V


MISO—Arduino D12

MOSI—Arduino D11

SCK—Arduino D13

SDA—Arduino D10

IMU 6050 gyro sensor

VCC—Arduino 3.3V

GND—GND Powerbank

SCL—Arduino A5/SCL

SDA—Arduino A4/SDA

ADO—+3.3V (High signal) for I2C address 0x69

DS3231 Real time clock

3,3V—Arduino 3.3V

SDA—Arduino A4/SDA

SCL—Arduino A5/SCL


Current load Trigger

2N3904 emitter — GND

2N3904 base — via 1kOhm to Arduino D6

2N3904 collector — via 3x220Ohms (parallel! – one can use a higher spec resistor, I had these) to +5V


V+ and GND lines of Powerbank connected through a female USB connector to power connector on board and connect to Vin/GND of Arduino). The powerbank is switched on via microswitch in the cover plate. I soldered a microswitch to V+ through a load resistor to GND to simulate a load state and switch it on. Thereafter the current load keeps it from switching off.

+5V — Power connector on board +5V

GND –Power connector on board GND

+5V of powerbank — load resistor — microswitch Pin A

GND — microswitch pin B

Step 3: Electronics Assembly

The board components – MP3 player, RTC, IMU, Arduino are mounted in sockets. Select and up/down keys, RFID, LCD and power are connected via self soldered ‘band cables’ long enough to fit into box later.

Microswitch to switch on powerbank is fixed coverplate – not shown in the pcitures.

I used a fixed power supply to test the setup.

While assembling I tested each component individually -> example Arduino sketches for the components are very helpful here.

As the powerbank had an auto-switch-off running with low current I included a transistor controlled load peak every 15 seconds for 100 ms via a 70 Ohm resistor (actually 3 parallel 220 Ohms to cater for sufficient wattage, it’s only a short peak but the three resistors will share the current and hence not be operated above specs).

Later it turned out that the Mini DFPlayer is pulling > 70mA continuously. As I used the powerbank auto-switch-off also for switching off of the box (by not triggering the current load anymore) I now need to re-think this.

Still having trouble with sleep mode of Arduino and DFplayer to drive down current – current does not drop below threshold to enable switch off. Feedback welcome.

Note: for the second Box I had to reorder another powerbank because I killed the electronics of my initial one. And look herer – this powerbank switches off 10 seconds after I stop triggering the load current -> switch off is working now.

The wireless charging receiver is plugged into the powerbank charging usb. The charger base is build into a charger box, printed with my 3D printer.

Step 4: Software

Software available on github

Programming is fun, I like to start with a quick nucleus of examples and to develop further. As I do not really do consequent specs, features planning and structured program plans I end up with some working but not really elegant code. This is always a todo -> go more into objects, separate in .h and .cpp …

However I do want to get the thing working quickly so in many cases I get there not on the most efficient path.

But the great thing is – as soon as the HW is working one can start doing all sorts of things.

I used the arduino IDE, a couple of libraries required – simply done with the arduino IDE library manager.

So my current version of the software supports:

Welcome message

Volume (duh)

Left/right tilt of box to switch to previous/next song and if RFID deactivated to next folder through back and forth.

Pause/Play (duh)

Initialize, learn new RFID – folder is assigned based on next RFID next SD card folder. Data is stored in Arduino EEPROM

Play folder assigned to RFID – assignment RFID-to-folder through learn function

Load and save parameters to enable settings saved. Factory reset 🙂

Clock and date setting.

Switch on/off alarm, setting alarm hour and minute, playing a fixed song for alarm.

Switch off RFID – play mp3 without it.

Some more ideas on my list – still to be implemented

Show temperature (the RTC can do that – it measures the temp to compensate impact to the quartz )

Start laughing when shaken,

Set song for alarm

Chose which folder is assigned to RFID in learn mode

Store folder assignment and last song played on RFID chip – reusability between boxes (I’m building another – two kids remember….?)

enable switch-off – this not working as of now without being connected to USB -> current load through Powerbank is reduced in this setting.

Info on folder structure on SD card

I had some mp3 audiobooks and music for my children stored. So I used some linux scripts to transform the songs to the right naming. Folders are to be named in sequence two-digit numbers (i.e. “00”, “01”, “02”…). Songs in there need to be named in sequence three digit numbers (i.e. “001.mp3”, “002.mp3”,…).

My switch-on-welcome mp3 (“Hello, I’m your toy box…”) is stored in folder “99” as “001.mp3”.

Script is not idiot proof and should be used only in a ‘copy’ directory and not on originals.

#!/bin/bash<br>let i=1
for file in *.mp3
 if (($i < 10)); then
	mv "$file" "00${i}.mp3"
 elif (($i < 100)); then
	mv "$file" "0${i}.mp3"
	mv "$file" "${i}.mp3"
let i++

Source: Kids MP3 Music Box

About The Author

Muhammad Bilal

I am highly skilled and motivated individual with a Master's degree in Computer Science. I have extensive experience in technical writing and a deep understanding of SEO practices.

Scroll to Top