On discovering Volumio (Open Audiophile Music Player) I thought that it could be used to build a great Jukebox; and the rest is history.
The following instructable is more of a generally overview on how I built this project. As such some of the smaller, more obvious steps may have been skipped.
Initial project scope
- Be able to play local and streamed music.
- Touch screen and button controlled
- Colour changing LED tube
- Karaoke module
- Quality sound
What as not achieved
- Touch screen: While the display used is a touch screen I could not get it to work with Volumio. I am sure that this can be fixed but alas my knowledge of compiling Linux drivers is not good. If anyone is able to help me with this it would be appreciated but for now I will leave this until another time. As a work around, when necessary I connected via a wireless keyboard or mouse, or via a remote computer (as Volumio allows you to browser to the interface from anywhere).
- Karaoke module: I could not get the unit that I purchased from AliExpress to work but as the module would simply plug into the Jukebox amp, this will be easy to add in the future.
- 10mm plywood
- 4mm plywood
- 4mm masonite
- 10mm Acrylic
- 20mm MDF
- 2mm acrylic
- Wood glue
- Acrylic cement
- Spray paint
- Opaque/frosting glass spray paint
- Arduino mini
- Raspberry PI 3
- 70W, 5V, 14A PSU
- PIFI Digi DAC+ HIFI DAC Audio Sound Card Module
- Raspberry PI 3 GPIO extension board
- ODROID-VU7 Plus
- LED Strip (5V, WS2811)
- HDMI ribbon cable (90 degree)
- Chrome Plating 30mm LED Illuminated Push Buttons
- Stereo amplified (2nd hand, purchased from an online auction)
- Boxed speakers (2nd hand, purchased from an online auction)
- 2.5M hex standoffs
- Double-sided tape
- Miscellaneous: wire, solder, heat shrink tubing, screws, electrical junction box, crimps etc.
- Black vinyl
Main Tools Used
- Soldering Iron
- Vinyl cutter
- Laser Cutter
- CNC Machine
- Table saw
- Screw driver
- Glue gun
Step 1: Overall Design
The box was designed to be the same some as some historic models i.e. approximately 85x155cm.
The four areas on the front are:
- The neon tube (yellow)
- The speaker grid (gray and brown)
- The jukebox interface (Pink and white; Jukebox Jam)
- The semi-circle insert (pink, black and white with musical notes)
Initially I was going to put the speakers
- Behind the speaker grill
- Where the black circles are in the semi-circle insert
But my speakers were too large and I felt that trying to squash them all behind those locations would impact on the quality of the sound. In the end I decided that the speaker grill and semi-circle insert would simply be ornamental and that the speakers would be left in their speaker boxes, positioned so as to face out of the left and right hand sides of the jukebox. This also meant that if desired the speakers could be moved to be placed anywhere in the room.
Step 2: Neon Tube
This above CAD drawing shows how I cut the pieces that I used to create the front neon tube. This was determined by the size of my laser cutter and material availability. Using 10mm acrylic I exported the DXF file to an SVG and cut pieces using a CO2 laser cutter. Using acrylic cement I then stuck them together to form the tube as show in the above images.
Using 180 grit sandpaper on a random orbital, or delta sander, sand the outside of the neon tube. Then apply the frosting spray paint to it.
In hindsight it would have been better to sandblast the tube or to use opaque acrylic.
Step 3: Semi-cirlce Insert
Using 4mm plywood cutout "JukeBox-Top-Insert.svg" on the CO2 laser-cutter, where necessary etching lines (black) so that it will be easier to paint and line things up later.
- The semi-circle was painted pink
- The larger disks were painted white
- The smaller disks were painted black
The smaller black disks were glued onto the white disks and the white disks are then stuck onto the back of the pink semi-circle so that the black and white showed through (see above images).
"JukeBox-Music.svg" was cut out using a vinyl cutter and then stuck onto the pink semi-circle as above.
Step 4: Cutting the Speaker Grill
Using Blender, exported "Disc.blend" to an STL file. Using a CNC machines, cut the disc into a 20mm piece of MDF. The height of the STL file was adjusted so as to accommodate the thickness of the MDF.
Opening "Jukbox4.svg" and hiding all layers except for "Grill", cut the grill out of 4mm plywood using the laser-cutter.
Using wood glue, I stuck the disc onto the disk part of the grill, trying to line things up so the one of the star points is at the 12 o'clock position. Once the glue was dry, I spray painted the grill with silver/galvanizing paint.
Step 5: Prepaing the Grill Material
I made a wooden frame (bigger than that of the grill), pulling the hessian tightly over the frame and stapling it in place. applying glue (I used PVA wood glue but other types might be better). Once dry you will have a smooth but firm sheet sheet of hessian. Applying wood glue to the underside of the Grill, I stuck it down onto the hessian so that the non-glued side of the hessian showed through; applying a weight to the Grill until it all dried.
Step 6: Buttons
Using a vinyl cutter I cut "Buttons3.svg" out of black vinyl.
Then decided which buttons were needed and where they were to go.
Attached the desired symbol to the appropriate button.
- Up/Down Volume
- Next/Previous Track
- Power On/Off
- Change lights (this symbol was not used in this build)
Step 7: Jukebox Interface - Part 1
The font that I used was Broadway (see attached). You will need to have it installed if you use "Jukebox-Faceplate-1b.svg".
Hiding all layers in "Jukebox-Faceplate-1b.svg" except for:
I laser cut the the resulting shape on 4mm plywood.
Thin hiding all layers except for:
- Screen - Visible
- Screen - Cover
I laser cut the resulting shape on 4mm plywood. This piece I called the screen cover.
Please note that the above were designed with the ODROID-VU7 Plus screen in mind and will need to be modified if you are using a different screen.
Holding the screen in place, I positioned the screen cover on the face-plate so that the screen was properly covered and would display correctly once in use. Once the position was sorted, I glued and clamed them together. Once the glue had dried I noticed that I did not have the positioning 100% correct. This resulted in my needing to chisel/router some of the face-plate behind the screen cover so that I could realign the screen more precisely.
The entire face-plate was then spray painted pink.
I export the "JukeBoxTextBacking.dxf" to an SVG and cut it out of 4mm plywood. After spray painting this I stuck it to the back of the face plate so that the white showed through the text.
Strips of wood were then stuck onto the back, proving mounting points one which to screw the mounting board.
Step 8: Jukebox Interface - Part 2
Now I installed the buttons in the six holes, bolting them in.
Exported "Mounting Board.dxf" to and SVG and cut the mounting board out of 2mm acrylic. Using the brass standoffs, I assembled the screen and Raspberry PI as in the photograph (screen on one side and the Raspberry PI and other electronics on the other side).
The square hole meant for the 90 HDMI ribbon cable turned out to be too narrow and so the needs to be be made wider (the drawings still needs to be changed to reflect this).
Step 9: The Actual Box
Except for the round part which was done using 4mm masonite and the supporting corner blocks (15x25mm) the rest of the box was built using 10mm plywood. Overall dimensions were approximately 85x155x50xm. "Jukebox4.svg" gives the exact front dimensions used.
The top was created by first using a clamp to check that we could successfully bend the masonite sheet. We then glued and stapled it down on the top and slowly worked down the sides. We placed cover-strips over the ends to neaten it up as well as hold it down. From the photos you will see how we added extra arcs in order to proved a wider surface that we could glue and staple into.
The side sections were cutout so as the accommodate the speakers that I had purchased. A shelf was installed in the top section to hold the amplifier. Finally the back was left more or less open to provide access to the amplifier and other bits and pieces.
The base was made out of two sheets of 10mm plywood; One slightly larger than the next.
All edges where routed round.
I leave the photographs to provide the rest of the missing details.
Once assembled, the who lot was spray painted blue. In hindsite I should have spray painted the insides black as this would have made the project look more finished off. This said no one really sees the inside.
Lastly I screwed the semi-cirle insert and Jukebox faceplates in place and glued the grill in place.
Step 10: Installing and Configuring Volumio
Plugged the HDMI and USB from the the screen into the Raspberry PI and powered it all up.
Following the instruction at https://volumio.org/get-started/ I installed Volumio on your Raspberry PI.
During the setup process I chose Hifiberry DAC Plus for the I2S.
Once installed, I browsed again to my instance of Volumio (http://volumio.local), go to settings, plugins and installed the following:
- YouTube for Volumio
- TuneIn Radio
- Touch Display
- Backup & Restore Data
- GPIO Buttons Controller
While I did not use it, the miniDLNA plugin looks like another one worth installing. You can also install any other plugins that you might want. I found that installing the graphics equaliser resulted in my sound not working.
Once installed I configured each pluggin, setting the GPIOs as follows:
- Enable Play/pause: GPIO Pin 13
- Enable Vol+: GPIO Pin 16
- Enable Vol-: GPIO Pin 23
- Enable Previous: GPIO Pin 22
- Enable Next: GPIO Pin 27
- Enable Shutdown: GPIO Pin 12
To get the screen to display properly I ssh'd to volumio.local and added the below to boot/userconfig.txt:
- #Set output to DVI so the sound won't be sent through the HDMI cable
- #Set HDMI group to 2, no idea what it actually does
- #Set hdmi_mode to 87 which seems to be custom resolution
- #Set the screen parameters
- hdmi_cvt=1024 600 60 3 0 0 0
Screensaver settings can be set via the Touch Screen plugin in settings.
The following feedback was provided to be by GVOLT on the Volumio community forum. Once I have had a chance to apply this approach, I will update the above.
One hint regarding the modifications of /boot/config.txt: The hdmi* related changes could be placed in /boot/userconfig.txt instead. Using userconfig.txt has the advantage that this file remains untouched when Volumio gets updated. In contrast the /boot/config.txt file gets overwritten on each Volumio update (further information) and you would have to edit /boot/config.txt again.
Step 11: Connecting the LEDs
Upload the "Rainbow.ino" to the Arduino mini.
Positioning the neon tube where I wanted it to go, I traced around the outside. I then attach the LED strip along the middle line of the strip. It didn't lie perfectly flat on the rounded section but that did not matter.
The LED strip has three tracks i.e. +5V, Data, Ground (Red, Green, White; in my case). In order to keep the LED's illuminated evenly, power was connected to the tracks at the top of the semi-circle arch. This necessitated me drilling two small holes through the face just above and just below where the LED strip will run to which I soldered the power leads that were connected to the power supply.
Since LEDs can only work in one direction it is import which side of the strip you connect the data pin to. If you get this the wrong way round it will not work. At the correct end, drill a small hole that will allow you to solder a lead into the data track. This lead will connect to pin 12 on the arduino.
Step 12: Final Connections
The powersupply was used to drive the LEDs, Raspberry Pi (pins 1 (5V) and 6 (Ground)) and Arduino (Vin and Ground). An acrylic cover was placed over the the power supply terminals to protect users from accidentally touch them.
Buttons were connected following this guide i.e. one pin to the relavent GPIO pin (discussed earlier) and the other to ground. The LEDs on the buttons were wired in parallel directly into the power supply.
Loose cables were nailed into place or glued down using aglue-gun.
The amplifier was connected to the PIFI Digi DAC+ HIFI DAC Audio Sound Card Module and the speakers connected to the ampliier.
Finally a power bar was installed that would be used to powe up the entire box i.e. the amplifier, 70W, 5V, 14A power supply unit and any other accessories that I might install in the future.
Step 13: What Would I Do Differently?
While the screen that I purchased came recommended by the Volumio community I would probably use the Raspberry PI screen next time as the touch option should work out of the box.
As already mentioned, for the neon tube I would try sandblasting (this however would need to be varnished so as to keep it clean) or opaque acrylic.
I would also add a button to control the LED lighting a little (see attached Rainbow2 code; modifed by a friend of mine) or wire it into a controller that syncs the lights to the music being played.
My biggest change would be with how I mounted the electronics. I would create a shallow draw underneath the amplifier shelf that would slide out and hold all of the electronics and power supply. Besides making everything much neater it would also make things more robust and safe. A neatly bundled cable track would then run from the draw to the screen and buttons.