Project tutorial

Modern Jukebox © CC BY-NC

A 3D-printed mini jukebox powered by Volumio. Streams your music, Pandora, Spotify and AirPlay. Sound-reactive LEDs dance to your music!

  • 33 respects

Components and supplies

Pi 3 02
Raspberry Pi 3 Model B
Adafruit Pi Perma Proto Hat NO EEPROM
Ard nano
Arduino Nano R3
I used an ancient, no-longer made Arduino Micro. You'll have to make sure your pinout works if you use a different board. An Adafruit Metro Mini also works.
26y8460 40
LED Strip, NeoPixel Digital RGB
I used a 60 LED per meter strip from Adafruit. You'll need two pieces: 36 LEDs and 22 LEDs. The 60 LED/meter strings look better than the 30 LEDs/meter.
Uctronics 5in HDMI LCD with Touch Screen
You might be able to use a Waveshare or other brand. MUST be 5 in, and the mount points could change in the 3D model if you don't use this exact LCD.
HDMI Flat Male-Male 270 degree 1 ft cable
HDMI Combo 90 and 270 Degree Converter
Left Angle Micro to USB A 9in cable
For touch interface on LCD. "Left" is the side where the cable comes out when the plug is inserted.
Short Micro to USB A Cable
Attach Arduino to Raspberry Pi USB A, for power
Panasonic eca 1em102
Capacitor 1000 µF
On power rail from Pi/Audio Amplifier
IQAudio Pi Digi Amp Plus
Late Breaking News! IQAudio is now part of Raspberry Pi. You can get the Pi Digi Amp Plus for the bargain price of $30 USD. I used old stock that was much more expensive. This build uses a 5V feed from the Amp Plus to power the LEDs.
08377 02 l
Resistor 330 ohm
For NeoPixel/LED string
14262 01
SparkFun Sound Detector (with Headers)
The one component YOU MUST HAVE for sound-reactive LEDs!
Dayton Audio RS100-8 Speakers
Excellent small speakers, with a quirk: they have a protruding cone in the center of the speaker, to they can't fit flush on a speaker grille. I have a fix for that! Two 3D printed speaker stand-offs specifically for the RS100's
Speaker Wire 18AWG
Parts Express SPDT Mini Rocker Switch Center Off
Parts Express SPST Rocker Switch
CAUTION! I used a SIMILAR UXCELL rocker switch that is no longer available. Check the Parts Express dimensions, may be different than what I used. That MAY REQUIRE a change to the jukebox base component because the switch is friction fit by size.
Adafruit Female Header - Pack of Five
31ac4603 40
Hook Up Wire Kit, 22 AWG
For wiring the Perma-Proto board and soldering to the NeoPixel Strand
M2.5 Standoffs - 20mm Threaded Male one end, Female other
Attach Adafruit Perma-Proto Board to IQAudio Digi Amp Plus
M2.5 Standoffs - 5mm Threaded Male one end, Female other, plus 4x nuts
Attach 4 standoffs to IQAudio Pi Digi Amp to Raspberry Pi and 4 standoffs (plus 4 nuts) to mount the board to the Jukebox case.
53m8605 40
Machine Screw, M2.5
To attach Perma-Proto board to IQAudio board, LENGTH = 4-5mm
Micro SD Card
For Raspberry Pi
Adafruit Panel Mount 2.1mm DC Barrel Jack
For external power brick input
DC Power Extension Cable
Used inside the case to connect the barrel connector to the IQAudio Amp. That in turn powers both the RPI and the Perma-Proto board.
Velvet Adhesive Liner, Multi-Pack
I used a different, but similar, product I had on hand. This is used as a baffle/light blocker behind the LEDs. You could glue on anything opaque, probably even black paper works.
3D Filament
I used five different colors of filament, no post processing: red, white, Fillamentum Vertigo Galaxy, Fillamentum Rapunzel Silver, and brown. If you are going to post-process, you'll probably need at least 2x 1kg reels. Best would be white because it's needed as a diffuser for the LEDs
Adafruit Slow Fade 5mm Diffused LED
Used to illuminate the "star" in the speaker grille. This will indicate if the power is on or off to the jukebox (via the switch).
Acrylic Sheet 3mm - 6mm
To make a window at the top of the jukebox. I put a photo in back of this to look like the record changer on the jukebox.
53m8605 40
Machine Screw, M2.5
For mounting the speakers, at least 15mm long, black, flat head (to fit as countersunk. You will also need the same number of nuts. Six each speaker, 2x speakers.
3.4A Power Supply
The IQAudio Digi-Amp Plus required a strong power supply. The one I used is similar to this one (in the store link). It is 19V which is dropped down to 5V to power the RPI. The Digi-Amp had a jumper block to ouput 5V/GND and I used those to power the LEDs directly, via a header block on the Perma-Proto board.
Parts Express Speaker Grille Cloth
Give the jukebox a vintage look...
Acrylic Sheet 3mm to 6mm thick
Used to create a windows in the arch at the top of jukebox. Once cut to fit, you can put a photo or drawing behind the acrylic.
3 pin screw terminal block 5.08mm pitch for PCB
Attach selection switch and LED wires
53m8605 40
Machine Screw, M2.5
Used for an optional 3D printed back cover, M2.5 x 5mm., recommend Pan Head.

Necessary tools and machines

3D Printer (generic)
I used a Prusa I3 MK3S. You'll need a printer of similar or greater build volume to be able to print the parts.
Hy gluegun
Hot glue gun (generic)
Glue the parts together to form the case.
09507 01
Soldering iron (generic)
Wire up the Adafruit Perma-Proto board to run the LED strips
Zap-a-Gap Medium CA Glue
Great adhesive, used to glue small parts together. Used to attach the decorative pieces on the front of the jukebox.

Apps and online services

Ide web
Arduino IDE
GIMP Drawing Program
If you want to add a photo or drawing at the top of the jukebox, in the window, you'll need some kind of drawing program for original art or to size a jpg to fit. I used Corel Draw X7.

About this project

Update: As seen in The MagPi Magazine, Issue No. 105


I've been in love with classic jukeboxes for years. As far back as 2014, I was trying to make one, but I didn't have the skills for a good-looking build. Fast forward to today, when I've learned some 3D printing and design skills.

Passion, curiosity and desire drove this effort. If you're thinking you'd like to have a mini jukebox like this, there are mass-market offerings that are muchcheaper, like this tabletop Victrola model for $65 USD. Hackster maker flyingangel has a great jukebox build. On the other hand, there are ready-made modern jukeboxes that are larger (105cm /41.3 in H) but much more expensive at around $795 USD. Check the Cost and Effort sections below to see how much is involved in this project.


This project would not have been possible without the excellent 3D jukebox design by Marco Gregorio on grabcad. It's a beautifully detailed piece of work, made all the more amazing since Marco didn't have a physical jukebox to model from, just what he could find on the internet! You owe it to yourself to check out Marco's work...

Also essential to the jukebox is the Arduino code used to make the LEDs light up to music, by Michael Bartlett at


This is a music player powered by free Volumio software. Volumio features AirPlay, Spotify, Pandora, web radio, and your own music controlled from your computer, tablet or phone - just download and install. What did I add? A 3D case, a touch panel LCD and LEDs that light up to music. The LCD is powered from a Raspberry Pi 3 or 4. The LEDs are controlled by an Arduino Micro on an Adafruit Perma-Proto board attached at the top of a hardware stack: Raspberry Pi and IQAudio Pi Digi Amp.

I'm using old hardware, the IQAudio amp board and an Arduino Micro, that I had in inventory. As of this writing, IQAudio is now part of Raspberry Pi, and the Pi Digi Amp Plus is still available, AND for less than what I paid for it. The Arduino Micro is obsolete, but you could use an Arduino Nano or Adafruit Itsy-Bitsy. You'll have to make adjustments for analog and digital pin usage and feeding 5V power from the Digi Amp to the daughter board (Arduino). Finally, a Sparkfun Sound Detector magically transforms sound into digital bits.

Marco provided a STEP file for all the components of the jukebox that I could import into the Fusion 360 3D design application. What I did was:

  • Scale the model to 25% size from Marco's full-sized model
  • Review the model components and decide what to keep and what to add
  • Hid the parts of the model I didn’t use
  • Add and modify features to make a useful enclosure
  • Print the 3D bodies that form the enclosure
  • Add electronics to power Volumio and the LEDs

Design Objectives

  • Be about 15 inches/381 mm high
  • Touch screen that shows Now Playing/Album Art
  • Decent sounding speakers
  • Lights... It had to have lots of lovely, animated LEDs
  • Actually LOOK LIKE it was 3D printed (no post-processing of the print); that meant printing in different filament colors
  • No 3D prints longer than about 12 hours (no overnight prints)
  • Hide or minimize joints of parts

Skill Level: Advanced

  • Over 75 hours total print time for 3D parts
  • Critical assembly - you have to get things "just right", do things in a certain order
  • Confined space to work inside the case when finished

Cost: Expensive

(All costs USD)

At a bare minimum:

  • If you post-process, you'll need 2-3 reels of white 3D filament and finishing supplies, estimate $70-90


  • Depends on what you have. I just had to purchase a spool of red filament, around $30. I've been 3D printing since 2017 and it's an important pastime for me. I had silver, white, brown and black filament in inventory. Those, plus a spool of red would be at least around $100.
  • Arduino Nano or Adafruit Mini Metro, around $20 (I had Arduino Micro in inventory)
  • Adafruit Raspberry Pi Perma Proto Hat $5
  • HDMI Touch Screen (Uctronics) 5 inch, $53
  • Raspberry Pi 3B Plus $35 (on hand)
  • Parts Express Dayton Audio RS100-8 Speakers, 2x $60 total (in inventory)
  • Parts Express Speaker Wire, 18AWG about $20 (in inventory)
  • Parts Express Speaker Grille Cloth, $30 (in inventory)

Figure on another $40 or more for HDMI cables/connectors, switches, mounting hardware, jumper wires, female header, etc. I had a lot of that in inventory. For me, the current out-of-pocket cost was about $150, spread over months, because I had so many supplies on hand. If you had to go out and buy all those supplies... Well, you do the math.

For me, the cost was worth it.


The 3D prints will take 75 hours or more, depending on your printer. There are 21 different parts with about 12 that take multiple hours to print. The remaining parts take around 1-2 hours each. And that is assuming you have no prints to do over.

I used hot glue to prep and bond the sections of the case together, in 4 phases. Assume 3-4 hours. for that. Gluing the LED strings takes about an hour for setup and execution. There is also precise gluing of small decorative parts (with CA glue) to complete the jukebox.

For the electronics, figure at least 5 hours to:

  • Install Volumio
  • Install Arduino sketch
  • Layout and solder the circuit board
  • Test that everything works before final assembly!
  • Mount the LCD panel
  • Mount the RPi, IQAudio Digi Amp Plus and Perma Proto board in a stack
  • Soldering and mounting the switches and power jack
  • Mount the speakers and speaker wires

Final gluing could take 1-2 hours.

Summing up, besides the time to print all the parts, assembly could take about 12 hours or more.


Documentation, code and 3D print files are available on github.

3D print files are also available on thingiverse.

3D Printing

There are a total of 21 separate STL parts files. Some parts will require 2 copies/prints.

Getting Started

Make sure you read the comments in the "Things" sections carefully. They give necessary information on the exact components to use. If you make parts substitutions, you'll have to figure out what changes need to be made.

To make sure everything works, test that all the electronics work together before assembling the case:

  • Install and configure Volumio
  • Solder the circuit board
  • Wire up components: NeoPixels, slow-fade RGB LED, and switches
  • Add components to the board
  • Download the Arduino sketch from github
  • Upload the sketch to the Arduino, mounted on the board
  • Try it all out

Install Volumio

Go to the Volumio Getting Started page and follow the setup guide for your Raspberry Pi. To get started testing, mount the IQAudio Pi Digi Amp on the Raspberry Pi, Plug the Amp into the female header on the Pi and use standoffs from the Pi to the IQAudio Amp as shown in the photo below. Later, refer to this guide to mount them into the 3D printed jukebox bottom.

Connect two Female to Male jumper wires to the +5V and GND terminals of the Digi Amp Plus, shown in the photo below. These will be connected to the Perma-Proto Board to power the NeoPixels directly from the Pi Digi Amp Plus.

The latest model Digi Amp has all the header pins from the Pi exposed, so the 5V and GND pins will be in the standard Pi header pin location.

To set up the speakers, cut two pair of speaker wires (14-26 AWG) approximately 7in/18cm long and attach to your speaker terminals and the IQAudio screw terminals. The Pi will be powered from the IQAudio - DO NOT plug power into the Pi power jack.. Plug a power brick into the IQaudio and try playing some web radio from volumio.

The gallery below shows Volumio settings for the IQAudio Pi Digi Amp Plus and the Touch Screen plugin (Settings/Plugins/Miscellanea):

To get started using Volumio, check the Quick Start Guide and First Steps with Volumio.

Prepare the Circuit Board

The form-factor of the Adafruit Perma-proto board was a nice fit when stacked on top of the Pi and the IQAudio amp, and made a good carrier/daughter board for the Arduino.

The board is only connected to the IQAudio 5V and GND for power. So, the usual female header to connect to a Pi was not used.

For best use of available space on the proto board, orient the board so the rail marked “3.3V” is at the top.

I'm modifying the proto board in ways that are a little less common than just wiring point-to-point:

  • The 3.3V rail will actually be used for 5V input.
  • Cutting board traces to place multiple pin connections in one column
  • Cutting rail traces on the lower, board-marked 5V rail, to add multiple pins in one row

These things contributed to a well laid out board, when populated.

Consult this photo gallery for wiring connections and modifications:

Note: The 3-pin terminals have a pin-to-pin pitch of 5.08mm. That is exactly 2x the standard 2.54mm pitch of vias on the proto board. So, the screw terminals/pins are each 2 board vias apart. The board layout and trace cutting is dependent on that spacing. You can't substitute a 3 pin/2.54mm pitch terminal without changing the board layout.

Animation Selection Switch

You also need to wire up a three-position rocker switch, shown in the photos. Cut 3 pieces of hook-up wire about 7in/18cm for this switch, preferably two black (GND) and one red (+V).

More on this switch below.


Remove the silicone covering from a one meter Neopixel string. Cut the Neopixel strip into two sections, one 36 LEDs and one with 22 LEDs. The short strip will surround the front grille. The 36 LED length strip will be in the outer tubes (Neon Tubes). Cut 3 pieces of hook-up wire about 7in/18cm for each string (you can shorten these later). Wire up each section with wires for GND, +V and DIN, making sure to match the DIN direction on the string. Add a resistor in-line with the DIN connection (330 Ohm works).

Star Light

In the front Grille, there's a 3D printed insert shaped like a 6-pointed star (Star Light). An RGB slow-fade LED that uses +V and GND mounts behind this Star Light, inserted into a 3D printed baffle to prevent light bleed. Patch in a 120 ohm resistor in-line on the +V jumper wire. This will drop current from 5V to about 3.4V to the LED. This will be used in the section Assembly/Grille Cloth, below.


If you haven’t already installed the Arduino IDE, download and install it using these instructions.

You‘ll need the Neopixel Library to make the LEDs work.

The sound-reactive Neopixels are based on the Interactive LED Music Visualizer sketch by Michael Bartlett on Sparkfun. I used the "Full Visualizer" without buttons, I added a rocker switch that has three functions:

  • LEDs react to music - switch position 1
  • LEDs in a color-changing "chaser" pattern, NOT sound reactive - switch position 2
  • LEDs off - switch position center

The LEDs won't work unless the switch is connected.

Download the Jukebox LEDs sketch from github.


  • Mount your Arduino on the proto board female headers
  • Attach the 36-LED strip to the terminal connected to digital pin 7.
  • Attach the 22-LED strip to the terminal connected to digital pin 13
  • Insert the Sparkfun Sound Detector.
  • Attach the Rocker Switch: center pole to GND, position 1 to pin D2, position 2 to pin D4
  • Connect the IQAudio Digi Amp Plus +V and GND into the female headers for the 5V rail on the Perma Proto Board (in photos above)
  • Connect the slow fade RGB to the +V and GND female headers

Upload the Jukebox LEDs sketch to your Arduino board. The grille LEDs run through a RainbowCycle routine in the sketch setup function, which takes a little time. So the sound reactive LEDs won't work immediately. After the setup function runs, the grille LEDs will always remain on, unaffected by the position of the rocker switch. With music playing from Volumio, the Neon tubes should react to music with the 3-position rocker switch set to position one. Switch position two passes a color-wheel/chaser pattern through the Neon tubes. Center position on this switch turns the Neon LEDs off.

3D Printing

Check the docs folder of the github download for part identification (Parts List) and Print Times for each part. There are also screenshots of the Prusa Slicer parameters and orientation to guide how to print each part. Find those in the 3D-Prints folder.

NOTE: All images are of the prototype jukebox I built. These will look different from the published Fusion 360 design archive and STL files. The final release STL files include improvements for the following:

  • Increase the size of the bezel on the LCD touch screen
  • Increase the size of the mounting plate to allow more clearance
  • Remove the 3D printed standoffs on the mounting plate and just use holes with screws inserted from the bottom of the mounting plate
  • Simplified the back cover


Assembly Guide


I used a fine-tipped hot glue gun so I could get into smaller spaces. These use smaller diameter glue sticks, and lots of them.

I used some tape I had on hand to temporarily hold the parts together for gluing. I found Scotch Gift-Wrap tape was actually pretty good for this. It has good adhesion and strong shear strength.


The parts are glued in starting from the inside, the Grille, and moving to the outside, the Neon Tubes, as shown in the video below.

Pause after gluing the Neon Tubes and mount the following hardware. This will give you more space to work in, before you glue in the back case. Refer to the Assembly Gallery photos below for details.

  • Acrylic Window with photo
  • NeoPixels
  • LCD Touch Screen
  • Grille Cloth and Star Light Holder
  • Raspberry Pi/IQAudio Pi Digi Amp/Arduino
  • Adhesive Felt (or paper) backing
  • Base with switches

Then continue gluing the Case and Base to the other assembled parts.

After the case is fully assembled and glued together, mount the Speakers and add Decorations.

There is an optional two-piece 3D printed case cover that screws into the back of the case.

Mounting the Hardware

In the following, all the hardware mentioned is found in the "Things" section.

“Right” and “Left“ are your right and leftas you face the front of the jukebox.

Acrylic Window and Photo

Use a rotary tool (eg., Dremel) at slow speed to cut a piece of clear acrylic. There is a template for this in the github download. Tape the template down on the acrylic and cut around the outside. Sand the edges and use CA to glue into the top of the Arch. Print a photo of your choice that will fill up the visible area and glue that in back of the acrylic.


Glue the long LED strip edge-on to the Neon Tubes, so that the LEDs are facing inward to the Tubes. There is a small space between the LED and the edge of the strip that can help fit the string against the Neon Tubes. Align that to glue down.

The Grille Tube NeoPixels will be glued onto the Left and Right Bottom, with a "U" shape near the board mounting plate. Hold the strip down with pieces of tape and tack spots with hot glue. When those are solid, remove the tape and fill in the spots where the tape was with more glue.

LCD Touch Screen

Screw the Touch Screen into the mounting posts at the top of the Arch, below the Acrylic window. The HDMI Touch Screen input is on the top of the screen. You need to insert a 90 degree to 270 degree HDMI adapter there, Plug the HDMI 1 ft. Male-to-Male flat cable into the adapter. The other end plugs into a Raspberry Pi 3. (If you're using a Raspberry Pi 4, you need a different cable that has a Micro HDMI in one end). Insert the Left-angle Micro USB to the Touch port on the LCD, and the USB-A end to a Raspberry Pi port. Thread this cable through the left Neon Tube.

Grille Cloth and Star Light Holder

The Grille will be backed with "speaker cloth" to hide the inside of the jukebox. There will be an LED holder behind the Star Light to prevent light bleed, and a hole needs to be cut into the cloth for that.

Cut a piece of speaker cloth large enough to cover the Grille and the edges of the Grille tubes. Use the Star Light LED 3D printed holder as a guide and mark the speaker cloth in a circle for the outside of the holder. Mark a cross in the center of the circle Cut the two lines of the cross to make 4 sections. Cut the rounded part of each section to make a hole for the LED holder.

Mount the color-changing LED mentioned in the section Prepare the Circuit Board/Star Light, above. Insert the LED into the holder and glue it to the Star Light. CA will work well here.

With the LED holder glued in place, fit the speaker cloth over the holder and the Grille. Stretch and glue the edges of the cloth to the Grille Tubes.

Raspberry Pi/IQAudio Pi Digi Amp/Arduino

Mount the Pi and other boards (you assembled and tested it in Getting Started, Right?) onto the mounting plate with screws into the Pi's 5mm bottom standoffs. Plug the LCD HDMI and USB cables into the mounted Pi. There's an additional 6 inch Micro USB to Micro A cable. Plug the Micro end into the Arduino and the other end into the Pi to power the Arduino.

The Star Light +5V and GND plug into the power from the Digi Amp Plus +5V/GND rails.

Adhesive Felt

To prevent light bleed, cover the inside with craft felt, which has its own adhesive backing Test fit the felt and cut holes to allow for cables and wires to pass through.

Base with Switches

In addition to the Animation Selector Switch, there is an on-off rocker switch that is connected to a panel-mount jack.

Cut one GND (black) wire at least 80 mm long for this switch. Strip the insulating jacket off the power extension cable (white) in pictures about 80 mm long to expose a red and a black wire. Insert the barrel power connector and the on-off rocker switch into the base.

Solder the cut black wire to the terminal marked "O" on one end, the other end to the active GND pin on the barrel power connector. The other terminal "I" is soldered to the GND (black) of the power extension cable for the Digi Amp Plus Finally, the +V (red) of the power extension cable is soldered to the +V terminal of the barrel connector.

Plug the extension connector into the Pi Digi Amp Plus. Glue the Base onto the Bottom and Case.


The Dayton Audio RS100-8 speakers have a cone in the middle that prevents them from being mounted flush to a solid grille, as on this jukebox. If you're using these speakers (or some where the center protrudes), you'll have to use a mounting ring (3D file supplied) so the speakers can mount properly.

For the last step of assembly, screw the speakers in with 15 mm M2.5 metal screws and nuts.

Tip: To make assembly easier, mount the speaker rings to the case with the screws pushed in for alignment in the holes. Tack down with hot glue or CA glue. When solid, mount the speakers to the rings.

I had pretty good luck holding the tiny nuts down with my index finger and turning the screw to get the nuts started.

However, there is one screw hole straight back on each side that has very little clearance. It is hard to get the nut started on that screw. Putting blu-tack or tape on the nut may help position it to get it started.

Eventually, I did get all the nuts fastened.


There are decorations on top and the two sides of the jukebox, with details in the github 3D Parts List document:

  • Neon Tube Red Cover
  • Neon Tube Fan Decoration
  • Neon Tube Ornament
  • Case Joint Cover
  • Top Red Ornament
  • Top Ornament

Repeat for Left & Right:

For the Neon Tubes, use a small ruler to mark the halfway point on the side of the Red Cover with a pencil. Then, match that to the Neon Tube joints and glue with CA.

The long Case Joint Cover aligns to the Neon Tube Red Cover and glues down to the case.

Gllue the Fan Decoration and Ornament at the top and bottom of the Red Cover

The Top Ornament (2 separate pieces) fits into the Top Red Ornament and is glued together as an assembly.

For alignment, make a pencil mark midway at the top of the Arch and another mark midway on the Top Red Cover. Align these two marks and glue.


Volumio has a fairly intuitive user interface that's easy to use.

To get started, press/select the 'Home' icon or the 'Browse' button from the 'Playback' window..You'll see something like the image below, depending on what options you have installed.

For Pandora and Spotify (paid subscription required), go to Settings/Plugins/Music Services. You can connect to Volumio from AirPlay with the Apple Music player.

Jukebox Operation

Update September 20, 2021:

Raimund Trierscheid made a version of the Modern Jukebox, with improvements! Raimund added 5mm wood panels to the sides of the case to hold the heavy speakers and improve the sound.

Here are some photos:


Custom parts and enclosures

Modern Jukebox R1V2 F360 File
Fusion 360 design


Similar projects you might like

Arduino Jukebox for My Rock Band

Project tutorial by Roni Bandini

  • 1 comment
  • 16 respects

Art Deco FM Radio Project Using Arduino

Project tutorial by Nick Koumaris

  • 27 respects

Minimal MIDI Drum Kit with 3D Printer

Project tutorial by ryokosaka

  • 52 respects

Portable Range Detection Device

Project tutorial by Viktor S

  • 26 respects

COVID-19 and PM10 Levels!

Project tutorial by Mario Soranno

  • 17 respects

Uke on fire

Project tutorial by torstengeppert

  • 4 respects
Add projectSign up / Login