DJ Controller
A DIY DJ controller with the same functionality as an FLX-10 (and more!!), but with precise decks, and modular parts (so I can fit it all in my backpack)
Created by
Micah 🚀
No Grant
168 views
1 follower
Timeline
Micah 🚀
added to the journal ago
Starting jogv2
Yes I haven't finished v1
I may finish it, but oh my god was it bad.
After reflecting, I realized I didn't wanna use FSRs and am instead transitioning to a button approach.
And I wanna make the design less jank, more printable and other stuff but yeah...
I spent a lot of time figuring out how to translate the up/down motion while keeping the amt / shaft / jogwheel coupled. But I realized at like 9pm what I needed to do lol.
The final design is going to have my amt102 encoder moving, but I will either glue it or mount it super secure (i found a good way) to the shaft. It goes in a housing that allows the AMT102 to move up / down, while maintaining little rotational backlash.
The nice thing about this design is that I can adjust it kinda at will, without a reprint of the top parts.

This is the final design. It features a "floating" jogwheel design (so it feels more like a proper cdj), but I still have to change 1-2 things before I print!!
So i'm gonna start a print after this journal (overnight) and see how it goes
Micah 🚀
added to the journal ago
Jogwheel saga (it was a lot an now my brain is fried)
I knew from day one that the jogwheel would be the most complicated part of this, but I didn't realize it would be this bad...
After finishing the CADS (while I was working on the EQ modules) I started printing the different parts for the jogwheel:
- Top mount (~4 hr print time)
- Jogwheel (~2.5 hr print time)
- Bottom plate (~6 hr print time)
The jogwheel was printed before this log, but the top / bottom plates were printed while I was figuring out EQ.
IMG20251019195616 (1).heic
^^^ Top plate.
Okay, so after I got the top plate, I printed a quick TPU shaft design (literally just a cylinder), and placed it through the top plate + jogwheel.
One issue I noticed right away is that the bearing size was a bit off, so it just fell through the shaft (which wouldn't allow the top bearing to stay, and I aint about to super glue it.
So I did a reprint with a tiny part of the shaft being extruded to prevent the bearing from lowering (and the shaft from going higher than it should be in the top.
.jpg)
What resulted was this awesome thing! I ended up taking it for a spin and it scratched pretty well!
Then I printed the bottom plate.
Now because I didn't think this through, I added some notches to better fit the top / bottom plates together

Except I only had 3 notches, and they were on the outside, and they were <2mm in width...
So the top plate fit (not well) on the other piece. It's okay, my v2 design will either have some screws or a better mounting system, but that's for todays work!
.jpg)
Also I used my tri color filament so it looked kinda jank...
So after that I mounted the shaft and because it was TPU, the tiny wiggle the encoder had actually didn't matter, which was pretty cool. Once I got everything wired up (like wiring my 3v->5v convertor for the encoder), it ended up spinning in my code YAY!!!
So once I got code that was able to register it would be easy to get it working (right???)
The first issue is that rekordbox actually locked behind functionality so that 3rd parties couldn't build controllers for them...
except there was a workaround. By naming your controller the same name as an old controller, it would think you have it plugged in and thus use the signals. I used some python scripts to try and get it working but a lot of it was janky and didn't work well.
I may go back to this but for now I went to mixxx
This was also an issue.
Mixxx has a built in midi scripting language, except for some reason I literally could not get it working. I'd get a bunch of errors like "couldn't find function "" ", so it was just calling a blank function for some reason???
I spent like 2 hours (late at night) debugging, but then I slept and fixed it in like 30m in the morning, so I guess late night building did not work at all lol
That wasn't the end of my problems yet though, because I realized I could scratch, but while the controller was in scratch mode, it would stop the track. Valid, most controllers do this anyways.
So what I ended up doing (temp solution until v2 because I have something awesome planned), is using an FSR (force sensing resistor) to measure when I press.
Then it would just send 127 on cc8 (or 65 if it wasn't scratching), which would be determined by a voltage threshold
This didn't work at first because I mounted it close to the sensor, but after mounting it further, it worked perfectly!
After all of that, I have a working jogwheel.
I will now finish a few more models (like a base for all the eq modules) and the hub module (which has the crossfader), but will start on V2. (I'll put my plans for v2 in the next entry.)
Micah 🚀
added to the journal ago
V2/3 EQ modules
(this journal was written late)
The case was too small :(
Because of that, I raised the 3d print so that it would have ~20mm of clearance between the bottom of the pcb and the bottom of the print.
This was my "V2" design.
After printing it, I realized it sucked to get the ADC module inside, so I cut part of the bottom off and slipped it inside.
It didnt fit either (or more accurately, it fit just not well.)
That's when I cadded the v3 design (the best one)

My intention was to place the ADC inside the area where the three holes were, but it really only fit in that tiny gap where it lifts up. It fit so well though, that I ended up just printing an endcap, and using the holes as passthrough (which will work amazing soon I swear!!)

Once I finished that, the EQ module ended up looking awesome!
(I may add a cover, but I actually really like the way it looks rn.

It would be done, but because I wired the slider separately, I need to put it through the passthrough into a breadboard. Not too hard, but will do that later in the build process
Micah 🚀
added to the journal ago
EQ MODULE WORKS!
Today I started by printing the eq module housing.
I don't really have photos of it, but it's similar to the one below, just without the connection points. The issue is that after I printed it, I noticed it wasn't deep enough, and the pcb had a slight wiggle.
Both are solvable issues, but that wasn't the main focus of today.
The main focus was: Making the EQ module PCB work.
I received my pinecil (yayay), and so I soldered the board properly, and took it to a coworking space!

The pins are standard hobby connection pins (idk what theyre actually called), and thats the case beside it.
After that I loaded up some quick circuitpy code on my rp2040, which allowed me to read the pins. Then I just added some quick normalization to it, so it would return 0-127 (needed for midi)

Once I had it normalized, I sent it via midi, but this is where rekordbox problems came up.
Rekordbox doesn't really have the best docs, but I finally figured out how to get midi working (after about 45 min), and so I got a signal through.
The pots have a stopping point in the middle, but when it was there, the reading was slightly high, so I just made it so that if it was outside of a certain range it was normal, else it was 64.
The last change I made is having the midi only send CC messages when a knob was moved, making it so that I could run the code faster.
Heres a vid of it working!!
Im excited I think I can finish the V1 very soon, and I seriously can't wait to take it for a spin (even if I only have 1 deck!)
Micah 🚀
added to the journal ago
Test prints + Got my PCBS!!!
After creating the button panels, I decided to make sure everything was working...
I printed one of the button holders, and then the curved shell piece (for the play,cue,shift buttons).
It seemed to be going well, the printed turned out nicely. However, after slotting the button in (failing to do so), I realized the tolerance was too small.
I actually ended up bending the pins on the button oops...

After adjusting the tolerance by around 1mm, I reprinted, and it fit super snug.

Once I nailed that, I printed the support / holder piece. That (even though there was .25mm tolerance) fit perfectly.

Then my PCBs arrived...

woaahhh so aesthetic!! I ended up ordering A Lot, but in my testing I realized the eq modules may have the potentiometers a little to close to each other (but it's okay I'll use that one as a compact module!)
It just means I have little room for my fingers (which is fine).
I started soldering it but realized my irons tip was cooked (I would touch the solder to further back on the iron and then move it slowly forward while still burning and onto the pcb), it was wack ah so I picked up a new one.
Afterwards I printed the first JOGWHEEL!!!

I'm really happy with how it turned out. I used a glow in the dark filament so it would look cool!!

(the image qual is cooked).
Now I'm refining the CAD a bit, and getting ready to print the deck out!
Micah 🚀
added to the journal ago
Buttons mounting and more
Since the last journal I did what I did last time, but twice.
I wanted to put all the buttons on and make the mounting plates so I could easily visualize. Unfortunately that gave the project a lot of clutter (or I don't know how to use the rollback bar well).

This is the home stretch of the CAD phase, and I get my PCBs tomorrow, which means I'm gonna be going as fast as possible to get these things printed.
In terms of cadding I still have to:
- Create the PCB mount
- Finish the last button plate
- Make the encoder mount
- Check w/ friends to make sure construction looks good b4 printing
Ideally I finish this cad tonight so that I can print everything and have it ready for a demo I'm going to be doing on saturday. If not, at least I'll have some eq modules.
Micah 🚀
added to the journal ago
Layer 3 mounting plate
oh my goodness...

that sucked. but I fixed it!
Now that I've made the button mounts I decided to create an under spacing mount to help it stay stable. This is the piece that will allow me to take apart the press fits. I didn't add too much clearance (about 0.5mm) for the button mounts, so it may be hard to take apart...

This is the third layer of my stack, this one will have small supports running all the way to the bottom plate (hopefully not a large area), as well as space for wires to be routed.
To fix some printing support issues that may arise, I may have to have two of these parts that snap fit together. Nonetheless it should work, just might be annoying.
Micah 🚀
added to the journal ago
button mounting spots
This didn't take me too long, but i figured out I can press fit the buttons into place so that it's nice and snug.
I realized that I needed to make a multilayered design for the controller, that allows me to space my buttons and such correctly while allowing for some other important things, which is what made me realize I'll keep the button slots SEPERATE from the top casing, as the top should be able to be taken off (for easy access), and the bottom / side plating will be fixed. This also means that the wiring will be a lot easier.
Here's the button mounting spots.

Micah 🚀
added to the journal ago
I MADE IT PRINTABLE
After a bit of rearranging, I figured out how to redesign it to be printable in two parts, while still feeling relatively the same.
The key was ditching the square layout and moving to a more rectangular layout.
The biggest problem I had doing this was figuring out how to split it without cutting any of the jogwheel part out, since that part will have significant pressure on it at all times (especially if i decide to do a FSR based jogwheel instead of conductive.

This (imo) looks a lot better, cleaner, and will feel nicer to play.
Micah 🚀
added to the journal ago
Adding buttons + messing up
After cadding the top panel, I went and added a few buttons

This means that I only have to print 3 distinct button types which is really nice!
The problem comes to the build size...
I thought I would be in the clear but after looking at my build dimensions, it was too big for my printer

My build plate only works for 220x220 xy, and this has 270x250. I will have to figure out a way to split up the deck or redesign it.
Micah 🚀
added to the journal ago
Main Deck layout
Now that I had some momentum with the jogwheel, I decided to start working on the deck layout / top plate!
The top plate is gonna be the resting spot for the jogwheel, and it will feature holes for all the buttons!
The only issue is that I decided it would be a great idea to do this all in one sketch, which may cause issues later.
The deck design features 4 programmable tactile buttons (at the bottom), as well as 5 top buttons (for track movement and looping), a shift button, a cue and play button set (which may be cncd), a tempo lock button, and a 100mm slider for hyper precise bpm matching!


Time to add button toppers, and a few other things. After that I'll figure out what the encoder mount looks like!
Micah 🚀
added to the journal ago
New Jogwheel design
The old jogwheel design was pretty bad.
I've improved my CAD skills by trying to make the platter, as well as making sure its mountable. In reality, idk if I'll be able to mount via set screw (at least for the platter) so for now it's just a press fit. Yes this will wear down over time but nothing a little glue can't fix.
Eventually I'll make it better but this is fine for the v1, especially with a 3d printed shaft!

A lot of the time was spent trying to pattern and figuring out how to mount it. I gave up on those parts lol
Micah 🚀
added to the journal ago
first PCB housing
After learning a bit more about how to work in onshape faster, I decided to create the housing for the EQ module.
While I wish I added some silkscreen pieces to show the markings (like near center), I do actually like the idea of me adding different "skinned" pieces depending on how I want the modules to look.
Nonetheless I built a pretty basic shell with minimal mounting points and about .5mm tolerance.

The connector piece is looking a little bit eh, so I plan to upgrade that soon!
Micah 🚀
added to the journal ago
Ordered PCBs + New Deck ideas
After I did that solder I checked all the connections and half of them weren't working... so I decided to cut my losses and order from JLBPCB.
After checking my gerber files, I noticed there was a chance that my holes were too small, so I enlarged them by 0.2mm, just to play it safe (shipping is the most expensive part so I wanted to reduce that if possible).
I should get the PCBs in a few days!
In the mean time, I've been learning OnShape to try and build out my decks before I get the PCBS (normally I would just take measurements, put it into tinkercad and call it a day, but my CAD goated friend convinced me to use it for a month), so I built my first model:

Literally 2 shapes lol
But this isn't my final design by far. I plan to create an interchangeable deck system so I can swap between a more modern design, and a vinyl (flat) design for my decks
On that note I did use it to test the shaft size with my encoder

Which ended up working great!
Im excited to learn more of CAD and hopefully finish the designs of some of the more complicated modules... that being said imma start with the EQ module because it's the easiest
Micah 🚀
added to the journal ago
The worst solder of my life
Soo I decided INSTEAD of ordering a pcb (expensive), I exported it from EasyEDA as a STL, and then got to working.
The holes on the print were too small, so I took a Dremel to open them up a bit, which actually ended up working quite well!

However, once I got all the pots (including the slider) in, they got stuck, so instead of soldering them normally, I soldered them right next to the heat sensitive plastic.
That was only the first issues
The second was that my solder joints WOULDNT STICK because theres no copper (bc not pcb), so I ended thinking "hmm what if I just used more pla to stick it down (big mistake)

Yeahhhhhh This SUCKS and I'm never doing it again. Luckily when I return to the workstation I will reprint and solder the second EQ module in a better way. + I'll have a case!
Micah 🚀
added to the journal ago
4 new PCBs
I started by making my full EQ module

This was great.. until I looked at the price. Surprisingly it would be better to have each thing individually.
I also have 100mm pots to worry about (for BPM changing exclusively), so I will be printing extra of those!

(Those are the 100mm ones!)
Then I spent 1.5 hours trying to manually lay where the holes of a component went, only to realize there was one already on EasyEDAs directory smh...
Anyways these are the other ones:


Micah 🚀
added to the journal ago
First PCB
So I ordered some parts from digikey! (See: handpicked parts), but I realized I wanted to make some "backpack" type 1-2 layer PCBs so that I wouldn't have to mount it in a wonky way.
The problem with these, is that if I build ones specifically for modules such as the EQ module, I can't add much more onto it!
That being said, I'm pretty clear on what I want the v1 to look like, so I can most likely just print a full eq module out and not have too many failed pieces. Seems like shipping will be an issue, so I'm going to print some single encoder pieces that I can use for either this or a future project.
I finally learnt how to properly use EasyEDA, so I designed a simple piece with it!


It's a very simple 3 encoder design!
I will need to make sure it all works, and will end up exporting so I can check with Onshape (because I know that better than easyeda), however this is a good first step!
Micah 🚀
added to the journal ago
Sketching wiring
This was the sketch of the EQ module, which is going to have 5 rotary pots and 1 horizontal pot

Then I decided "hold up why don't I make it a little modular so it's easier to move?
so i'm doing it modular now !! (I keep making this more complicated for myself lol)
If I want to make this modular, I'm gonna need quite a few extra features to make it happen. One of them, is to create connection points on every main module, each with some type of index so the control board can figure out what is where.
Then I figured out at least where the connection points will go, and how passthrough wires will work. Passthroughs are going to be hard, but because I'm only making a few modules (2 deck EQ, Browser / fx, Screen (x2), Decks (x2), and the hotcues (and the control board one)) I can just size things so there's only 5 spots for a connection point type, and just make them have diff connectors.
The screens can go anywhere on the top so I just wire passthrough from the control to the tops of decks. The hotcues are on the bottom, but need diff voltages because they will work differently at different spots.
Those are the complicated ones, the rest are passthrough.

Micah 🚀
added to the journal ago
handpicked parts
The nunchuk works, but I can't do much more with it, hence why I am moving to proper parts for the remainder of the project!
I decided to order it in the hope that I can offset some of the costs with the grant, but it's completely fine if that's a small portion (I ordered a lot because of Digikey's bulk pricing).
The biggest purchase risk I'm taking is ordering a $45 encoder for the jogwheel. It's risky because i can't really use it for other projects (or at least I don't need something that precise). I'm getting a 2223-AMT102-D2048-I6000-S-ND, which 2048 pulses per rotation, meaning I get hyper precise movement data.
This is the full cart:

It's crazy how a lot of bits and bobbers is $160 now, but it's actually so chill since this should carry me through the whole project.
It's interesting because I can most likely implement as many features as a CDJ3000 has (minus the screen because I don't want one), but for a tiny fraction of the price!
Micah 🚀
added to the journal ago
Working nunchuk control
I finished the nunchuk interfacing, which ended up being super cool! However, this is only step 1 of the project, because I know I can make it much much cooler!
As of now, with the nunchuk you can press the Z key (bottom back button) and move the joystick to move the selected track forward / backward. I also added in the ability to hotcue by pressing c with the joystick in one of 8 outer positions. You can press c with the joystick in the center to pause the selected deck.
Deck selection defaults at deck 1 (d0 in the code), but can be changed by shaking the nunchuk.

False shows it's not in deck switch debounce time, the three numbers following are acceleration, then it shows the current deck, and the joystick positions.
I also added in a screen to show which deck is active!

Here's a video of all the features working on conjunction:
As of now you can't change bpm with the controller. This is something I will work on after I pick up some horizontal potentiometers ;)
Micah 🚀
added to the journal ago
Nunchuk input detection
I figured out somewhat how to get gestures detected. In the code I have it where if the velocity of certain things crosses a threshold, it will activate a gesture, followed by a debounce time.

What this will allow me to do is switch decks without allocating a while key to it! With a very quick flick, I can move from deck to deck (however, it doesn't actually interface with rekordbox yet).
Yay, okay, idk if videos work here but this is it working!
Micah 🚀
added to the journal ago
Figuring out how to interface w/ rekordbox
Writing this because I theorized this project a few days ago (and printed one thing for it), but it's still pretty early.
I planned to build a simple MIDI controller for this that uses a Wii Nunchuk so I can scratch with a joystick! However, Rekordbox (the dj software) blocks MIDI functionality behind a paywall :(

^^ They're so mean for this
I decided I would (instead of doing a MIDI controller) emulate a keyboard instead, since free Rekordbox allows you to DJ with your keyboard. For scratching, I'll just register how fast the rotation is and then keypress that many times. It's limited to how fast I can send keyboard inputs tho.
I hope this isn't the final solution, because I may eventually get Rekordbox, but for now this will have to do
Micah 🚀
started DJ Controller ago