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!


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.


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:

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:

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


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 


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.


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: