Update: As seen in The MagPi Magazine, Issue No. 105
InspirationI'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.
Attribution
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 learn.sparkfun.com.
OverviewThis 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
- 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
- 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
(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
OR
- 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.
EffortThe 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.
DownloadsDocumentation, code and 3D print files are available on github.
3D print files are also available on thingiverse.
3D PrintingThere are a total of 21 separate STL parts files. Some parts will require 2 copies/prints.
Getting StartedMake 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
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 BoardThe 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.
NeopixelsRemove 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).
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.
ArduinoIf 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.
Connections
- 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 PrintingCheck 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
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.
EnclosureThe 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.
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 PhotoUse 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.
NeoPixelsGlue 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 ScreenScrew 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 HolderThe 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.
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 FeltTo 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 SwitchesIn 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.
SpeakersThe 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.
DecorationsThere 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.
OperationVolumio 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.
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:
Comments
Please log in or sign up to comment.