Volume Controller
This is an independent personal project
Current Iteration:
Taking notes from this current iteration, I've created a new version. Check it out at the link below!
Background
When the world transitioned to one spent in front of a camera and behind a screen in early 2020, unsurprisingly computer use increased. As my use of virtual communication platforms such as Zoom, Slack, Teams, and Discord increased, a sonic hinderance emerged and quickly blossomed into a full-on grievance: volume levels of specific applications would vary greatly, some were too soft to hear, others would be deafeningly loud.
The specific volume levels of these applications can be adjusted using Window's Volume Mixer application; however, this requires opening a separate app and cannot be performed quickly to make small adjustments as needed.
Example of Windows 10 Volume Mixer with Discord and Google Chrome running
Problem Statement:
Create a physical interface to quickly change and balance the volume levels of specific applications on my computer so that no specific application was too loud or too quiet. This interaction should not require switching the active window and work with every application.
Process:
Design a physical controller that implements the Deej project as the interface between controller and computer. An Arduino microcontroller reads potentiometer values and relays them to the computer via serial connection. A desktop application interprets the potentiometer values and changes the volume in Windows
Concept 1
My initial design was designed to modulate volume by utilizing four slide potentiometers. A slot is cut into the back to allow the Arduino microcontroller to be connected via USB-C. The case is composed of two parts, held together via a friction fit. On the bottom half, a series of mounts have been included to secure weights.
Need for Revision:
Overly tall:
The height of the device prevented it from being placed in a convenient location without obscuring visibility or interfering with other desk fixtures (monitor, lamp, etc.)
Slide Potentiometers
The slide potentiometers require a lot of space to function as desired and were overly susceptible to being knocked by accidental bumps
Travel distance of slide potentiometers made the adjustment process uncomfortable
To adjust the potentiometers, the entire unit was prone to sliding or tipping from the slide action of the potentiometers
Initial Design Concept Utilizing Linear Slide Potentiometers
Second Design Concept Utilizing Four Rotary Potentiometers
Concept 2
A second design was created to remedy the issues of the first design. The slide potentiometers were replaced with rotary potentiometers and two M3 screws were added to securely seal the product. The threads are installed using heat-set inserts for PLA.
Need for Revision:
potentiometers placed too close together
Difficult to interact with "inside" knobs
Potentiometer knob size too small
Makes fine tuning the position difficult
Different potentiometers are used more frequently than others
Begs for a "priority" system so more commonly used knobs are easier to use
PCB and Potentiometers are mounted on different components
Makes installing, servicing, and fitment difficult
Concept 3
Changed the shape of the design to prioritize one knob over the others, adding space to allow for larger knobs, shifted all components to one part with the other acting as a lid, and reduced the overall height more.
Second Design Concept Utilizing Four Rotary Potentiometers
Results
Final Product
The final project is manufactured using FDM additive manufacturing with five aftermarket knobs installed. Each knob has been delegated to adjust the volume of a specific application. The silver knob is assigned to "other" to adjust the volume of the currently active application if it has not been assigned to a different knob.
GitHub link to original project: https://github.com/omriharel/deej
Software
The software for this project was adapted from an open-source github project. The project provides the computer-side software to interface with Window's volume mixer and the controller-side software to read the potentiometer inputs.
The Arduino code is fairly simple: it reads potentiometer values from 0-100 and sends that information out via a serial connection.
The desktop application reads the serial data from a specified port. The program then modifies the volume in Window's Volume Mixer to reflect the values read from the serial connection.
Outcome:
This iterative design process resulted in a final product that has seen continuous use. As online conferences became less frequent for me, a way too loud game or slightly too quiet Youtube video remained all-too-common occurrences.
Around the same time, other computer hardware companies had identified the same issue and started releasing similar hardware solutions costing >$100 (eg. Elgato Stream Deck). Simultaneously, many of my peers saw the appeal of such a product which led to the creation of multiple additional copies.
Future Expansion:
After using the product for a number of weeks, a few changes could be made to expand the functionality and usability of the device:
Add support for rotary encoders (no longer bound to 270° range of potentiometers)
Stores the current volume value in file
Changes value as encoder is turned
Increase distance between knobs
Add lighting for use in low-light applications