When DJing, the biggest limitation is having your hands occupied. If DJs were more free to use their hands, they would be able to come up with much more complex, creative, and pleasing transitions. Even some of the most common transitions have your hands fully tied up. An example of a simple transition is the bass swap where you turn the bass of one track down while bringing in the bass of a new track. On all DJ controllers, the low frequencies for the two tracks are controlled by two different knobs and this requires you to use two different hands to accomplish the transitions. Since such a transition might take place over 10+ seconds, and a DJ often needs to also apply some additional effects, what ends up happening is the DJ will turn the bass knobs in more discrete increments allowing them fractions of a second to play with some other effect. This is noticeable to the crowd and is not acoustically pleasing. We set out to find a solution that lets you control two things simultaneously with just one hand. We decided the best way to do this was to allow users to map the 2 axes of a touch screen to any two controls they desired. In our demo, you can see we have a fully built out DJ controller but with the addition of the touch screen to replace the two bass knobs. This allows DJs to now do bass swap transitions with just one hand which tremendously increases the amount of creative effects they can apply with their other hand. In fact, the whole setup is modular, so if a DJ’s preferred song genre isn’t Electronic Dance Music or some other bass heavy music, they could map the touchscreen to instead control the mid range frequencies so that now they could do vocal swaps with one hand.
Related Work:While individual components of this project are well-established technologies (Arduino controller, capacitive touch, and MIDI-based DJ controllers), the novelty of this work is in the specific interaction design contribution: the use of a 2D continuous gesture surface to enable simultaneous, coordinated multi-parameter control across audio tracks. Existing XY gesture controllers for DJs provide two-dimensional touch control but are limited to applying effects to a single track at a time. Similarly, modern DJ software touchscreen integrations map gesture axes to parameters within one song’s effect chain. No commercially available or widely-studied system maps the two axes of a gesture surface to parameters spanning two different tracks.
Online, many people have built custom microcontroller-based dj controllers such as https://www.youtube.com/watch?v=gbPC8Bg0U9I
https://www.youtube.com/watch?v=orAAT4ew4GM
https://www.youtube.com/watch?v=Z1Fl6ekkipE, but again, these do not have a system for cross-track gesture mapping.
Hardware:3D printingFor the main design we decided to use 2 big parts. One is the box for breadboards, microcontroller and all wiring - we tried to make it somewhat slick, but with all the wiring going on we had to double the height of the box to make sure we don’t bend/damage any wires/connections. Other than that the printing for the box was pretty straightforward.
The second major part is the cover with mounts for all the individual components: 2 sliders, 4 buttons, 4 knobs and the screen. This part had a few small details that didn’t print well the first time (some parts were too thin). Getting spaces for individual pins and small components (knobs and buttons) took longer than expected, especially spacing for those 0.1-0.2mm parts and they ended up being a bit too loose in the end, so we had to use hot glue to keep those parts intact.
WiringWiring was not as bad as anticipated. Originally we were hoping to have more controls, but when we started planning our wiring we realized that the microcontroller might not have enough usable pins, so we had to simplify our setup a bit by removing some controls. We explored using an arduino mega to give us more pins to work with but this was not compatible with the library we used to interface with the screen.
Overall, the components we used had decent documentation, so wiring was not a problem, except for the knobs. Unfortunately, the version of knobs we purchased was not soldered and by the time we realized it was too late to fix. We were able to connect wires directly, but the connection was too loose. We considered soldering them ourselves, but in the end we just used pliers to squish each connector around its pin, which made those connections somewhat permanent. While this was not a perfect solution, it was the easiest one. Soldering would be preferred if we had more time.
For each of our components (screen, rotary knobs, buttons, faders) we first began by creating a CAD model that is used to hold each class of component. We were able to find generic models for most of the components, but later (after the first print iteration) realized that the sizes were a little off, so we had to make manual adjustments. Overall we had 3 iterations for just the housing (individual parts that we later combined into a single design). The 1st iteration mostly failed, 2nd was ok with a few minor changes and the 3rd worked mostly well. At 3rd iteration we realized that even if we were to design perfect fit - we still would need to use something else to make components immovable (especially considering our loose wiring).
Based on the individual component housings, we created a housing that was used to hold all of our interfaces in a singular piece. This was designed by first creating a sketch to place all components in their correct locations, then using the individual housings completed earlier to cut out a housing in this singular piece. While these individual housings gave a good starting point, we often had to modify the housings for the complete board to include space for wires. The housing for the screen and sliders also contain holes that we placed screws in to hold them in place - the button and rotary knob do not support this.
The top section of the housing is just meant to be a way to hold each of our interfaces.
In order to have all of our wiring contained, we designed a bottom portion of our controller, similar to a box. This bottom section is a big empty box so that we can easily connect each of our interfaces to the microcontroller, and contains a hole on the side to connect the microcontroller to a laptop using USB-C. Both the cover and the box have holes in the corner that allow us to place screws connecting these sections and hold them in place.
The software reads signals from each control from the arduino and converts them into MIDI messages. MIDI messages are the standard communication protocol used to talk between controllers and music software. The DJ software we connected it to is Mixxx. Mixxx is an open source DJ mixing software. Our controller is actually universally compatible with any DJ software including the popular ones like Serato and Rekordbox, you just have to pay for the premium subscription to be allowed to map our custom MIDI messages to their software. In Mixxx though, the user is allowed to map any of our physical controls to any control in the software. So they could for example choose to remap the lower set of knobs to control track volume and remap the sliders to control the medium frequencies. This modularity and flexibility was really important to us. Also, on the signal processing side we have easy to edit code to set deadzones and smoothing amounts to ensure a user’s inputs are more reliably sent to Mixxx.
Future WorkWishlist of things we would want to add or do differently in the future.
Try friction fitting buttons for a better fit
- Try friction fitting buttons for a better fit
Add waterproofing
- Add waterproofing
Make it a standalone controller (not require a laptop)
- Make it a standalone controller (not require a laptop)
Add more controls or let users combine multiple of these to control 4 decks instead of 2
- Add more controls or let users combine multiple of these to control 4 decks instead of 2
Shrink down case size
- Shrink down case size
Solder wires for better reliability
- Solder wires for better reliability
Motorized knobs
- Motorized knobs
Allow MIDI function remapping on the fly
- Allow MIDI function remapping on the fly
Show useful data or song waveforms on the touchscreen
- Show useful data or song waveforms on the touchscreen










_t9PF3orMPd.png?auto=compress%2Cformat&w=40&h=40&fit=fillmax&bg=fff&dpr=2)


Comments