Bumpy is a small homemade mp3 player, with features similar to an iPod shuffle. The entire design is open-source, from the firmware to the circuit board to the 3D-printed case.


Bumpy plays .mp3 files off of a micro-SD card. You can load files onto the card then plug it into Bumpy, or plug Bumpy into your computer: it will show up like a flash drive (though it's a bit slower).


The UI is simple and minimalistic. A scroll/click wheel lets you change volume, play and pause, and move foward and back through your .mp3s. Eight LEDs glow through the case and show the player's status; eight-bit animations give feedback when you change songs.


Bumpy recharges with a standard USB-mini plug. With typical use, it will play for over 24 hours on a single charge.




Bumpy's PCB is smaller than a typical business card. It's a two-layer board designed in Eagle and manufactured by OSH Park. Components are only placed on the board top; the battery is pressed flat against the other side.


I'm using an Atmega32U4 running at 8 MHz and the VS1003 for mp3 decoding.

Bumpy is powered by a 1000 mAh lithium ion battery. I use a Max1555 to manage battery charging and a TPS2112APW to automatically switch between USB and battery power.

The bill of materials contains a more detailed list of parts. The parts cost is $58 to build a single board; the price drops to $35 in quantity 100.


The firmware for playing .mp3 files is fairly simple. I use Roland Riegel's sd-reader library to interface with the microSD card and get files from its FAT32 filesystem.

The mp3 decoder chip also speaks SPI; this portion of the firmware is similar to my fab boombox project from a few years back.

Implementing a USB mass storage device proved much more challenging. I started with the LUFA library's mass storage class driver, adapted the DataFlash-based example to an SD card, and wrote new sd_raw functions to do efficient multi-block reading and writing.


Bumpy has a eponymous 3D-printed case. It was printed in-house at Formlabs, where I'm gainfully employed.

I printed it at 50 micron layer resolution in white resin, using PreForm's automatically generated support structures.



Bumpy's firmware and PCB are both hosted on Github.

The case was designed in blender. You can download the original .blend file, or the exported .stls for the top and bottom.

The PCB is available for purchase on OSH Park.