A few weeks ago I came across a LTT video about cheap tech everyone needs. One of the items was the Deej, an open source hardware volume mixer for Windows and Linux. It allows the user to control the volumes of different applications and input sources by using physical sliders or dials. The project’s Github page has all the documentation you need to build your own, so I won’t go into too much detail here. But considering the parts are cheap (an Arduino Nano and some linear 10K potentiometers), I decided to build one to see if it would benefit my workflow. Naturally it did, and so began my quick 2 day build to make my personal ideal Deej-based volume controller.
Test setup
As most of these projects, I first started off with a basic breadboard build. This allowed me to determine how many dials I would need in daily use, as well experiment with knob distances. In the end I settled on 4 dials:
- Master volume: self explanatory. I mean, why wouldn’t you want this?
- Media volume: controls all media player application volume (ie Spotify, Winamp/WACUP, MPC-HC, VLC).
- Web volume: controls the volume of all web browsers installed on my system.
- Mic input volume: controls raw microphone input volume. This then gets chained to Nvidia RTX Broadcast for noise cancellation and Voicemod for EQ and soundboard spam.
I considered experimenting with other options such as buttons for muting, but ultimately decided against it. Dials are quick to turn and adding buttons would only add more bulk. Especially as I already had a vision for the shape and size of the final build.
Designing the enclosure
For the design I played around with a few options. I experimented with adding a plate to my Stream Deck setup, but couldn’t find a way that would work for my already cluttered desk. Adding a box underneath my custom monitor riser like I did with an USB hub felt uncomfortable to use. Adding it to the top of my keyboard was an option, but ultimately I decided to add it along the side of my keyboard. With the placement now settled, I started designing my enclosure in Fusion 360 with the following rules in mind:
- It needs to fit perfectly along the side of my keyboard, a Keychron C1 in terms of height and slope.
- The enclosure needs to able to be taken apart again, so glue was off limits.
- No screws should be visible from the top.
My original design tried to add 5 dials instead of 4 and mimicked the bezels of my keyboard. However, printing this design (flat on paper) showed it should be wider to be comfortable to use. I also found the placement of the knobs to be “off”. Using pen and paper and physically moving the knobs, I ultimately figured out a spacing that “felt right” to me. New to me were these m3 threaded brass inserts, and I’m happy to have finally given them a shot. Utilising 2D prints of the schematic at scale 1:1 also allowed me to spot several problems with my model without the need to redo a bunch of 3D prints. Of course there’s always that one problem you don’t notice, but that’s part of the 3D printing game. With everything “good enough” it was now time to print and build.
Print and Build
Printing was pretty straight-forward. Just slice in Cura, send to printer and come back to a nice bowl of PLA spaghetti. Whoops. As it turns out my printer has a failing thermistor on the heatbed, resulting in the bed, which is also convex even with a glass plate, constantly over and underheating. As my printer has grown quite weary throughout the years, I sinned and used hair spray on the glass bed and choose not to deal with yet another repair. If anything I’m likely going to replace this printer with something more modern. Luckily, the hairspray did the trick and allowed me to complete the 2 prints for this project.
Adding the components was simple. You just run a 5v and ground line across the 10K potentiometers, and a wire from each to an analog input on an Arduino nano. If anything, deciding between going with bundled wires or loose wires was the hardest part of this build. Definitely a nice project for people looking to get into soldering. The brass inserts were also easy to insert. I printed 4mm holes for these 5mm inserts and pressed them into the plastic with a soldering iron. The code required only 1 change, which was to set it up to use only 4 potiometers instead of the default value of 5. With it uploaded to the Arduino Nano, the build was now complete.
Demo and Final thoughts
I really like this build for what it is: a quick and simple tool for volume control. It doesn’t require a lot of technical know how and while my Stream Deck can perform all the same tasks, I just like the physical feedback you get from a dial and knob. I did make some mistakes however with the model. I forgot to widen the part between the screw inserts where the Arduino sits, meaning I was short 1mm. I also thought the USB type-C connector had a proper connection, but it needed to be pushed in 1 mm more. I crudely fixed both problems by taking a soldering iron with an old tip and scratching away at the print. It’s not the prettiest, but considering it’s only visible on the inside and likely wont remake this project I find it to be good enough. If you wish to print this version, I’ve uploaded to STL to my 3D printing category. Otherwise I highly recommend browsing the Deej tag over at Thingiverse for inspiration and other/better models.