My first independent electronics project — and my introduction to building a working system from the ground up: wiring, soldering, circuit design, Arduino programming, and hardware troubleshooting.
Take my interest in electronics beyond just writing code, and understand how individual components work together to turn an idea into something physical.
The MP3 player was my first chance to design, build, test, troubleshoot, and solder a complete system on my own. The goal was small and concrete: a working player controlled with physical buttons, a display for feedback, and a speaker for audio — simple enough to actually finish, and rich enough to learn every basic skill a hardware build needs.
Buttons tell the Arduino what to do; the Arduino commands the DFPlayer over serial to play tracks from an SD card, drives the speaker, and shows what's happening on the display.
Physical buttons drive play, pause, and track skipping — the whole interface is tactile, no screen menus to navigate.
A DFPlayer Mini reads MP3 tracks from an SD card and drives the speaker, handling decoding so the Arduino just sends simple serial commands.
A small display gives the user feedback on the current state, closing the loop between a button press and something visible happening.
A deliberately small parts list — the point was to learn each one properly.
Each part validated on its own before combining — the habit this project taught me, which every build since has used.
A. Buttons
Confirmed each button registered a clean press before wiring them to any action.
B. Display
Verified the display could show text and state readouts.
C. Audio
Tested the DFPlayer + speaker playing a track on their own.
D. Full system
Integrated buttons, display, DFPlayer, and speaker into one working player.
One problem defined this whole project — and taught me the lesson I've leaned on in every build since.
The DFPlayer Mini simply didn't react to any serial command the Arduino sent — no audio, no acknowledgement.
I assumed it was me: a wiring mistake, the wrong pins, or a bug in my code — so I spent a long time rewriting the sketch and re-running the connections.
After isolating every other possibility, the module itself turned out to be defective. No amount of code or rewiring was ever going to fix it.
Swapped in a known-good DFPlayer and the system worked. From then on I check hardware first — voltage and continuity with a multimeter — before assuming the software is at fault.
Not every bug is in your code. Verifying that a part actually works before debugging around it saves hours — and it's why I now retest modularly, one component at a time.