Introduction: Atari Replica Joystick to Ball Conversion

About: Computer Enthusiast & programmer with some carpentry, sketching & electronic skills.

First of all this is my first instructable so It might not be very professional, but hey we all started somewhere!

The reason for this Instructable is that I just got into retro computing and decided that I needed a Commodore 64 to learn assembly language and (of course) retry some old games that I used to play when I was a kid.

To that end I got myself an Ultimate C64* (a very nice new modern Commodore 64, please google it) and to play I got myself a pair of Hyperkin joysticks that I found on Amazon, they are really nice made Atari replica joysticks, but sadly this Atari joysticks design perforate your palm after a long game session, so I decided that I could do better and transform them into a nicer arcade type joystick with a ball handle.

These joysticks are used with old Commodore (64, Vic-20, Amiga) Computers, Atari line of computers (400,800,1200, ST) Atari consoles, so hopefully this instructable can serve many enthusiasts!


Here's what I used:

1. An Hyperkin Trooper Joystick, which is nice and not too expensive, here's the link to get them on amazon

2. A 3D printer to print the pieces I need for the mod

3. ABS filament of your prefered color (I chose ABS for structural integrity, I haven´t tried PLA but it might work well too)

4. A 3D modeler to design the pieces, in my case I choose OpenSCAD software since it's freeware and I tend to like since it uses a pseudo language to define the objects and has some already made libraries that make your life easier, here's the link to the software:

Step 1: Remove the Original Stick !

When I bought this pair of joysticks I never imagined that the stick could be disasembled, as a matter of fact I only realized this after playing a while and noticing that the stick turned a bit, so I kept on turning and surprise, It could be unscrewed!, this design choice is the main reason why this instructable is possible!

So go ahead, unscrew the stick!

If you are only interested in printing one set and transform your joystick you can go ahead to Step 5 and follow the instructions from that step, but for those interested in creating 3d pieces of your own I'll describe in the intermediate steps the design process and some mistakes I made which hopefully will teach you something

Step 2: Measure & Design Your New Stick

After you unscrew the stick please measure all parts so that when you design your piece it fits the existing threads in the joystick base.

If your model does not match the threads in the base there's no way to attach your new design to the base. In contrast the upper part of your Joystick can be changed to your hearts desire.

I took some measures and proceded to set the bases of my design:

1. I Needed a thread on the base equivalent to a M11 screw (initially I tought M10, but a couple of prints later I realized that I needed to scale the threads a bit)

2. For my design I wanted a thinner stick so that it resembles more arcade controls

3. In order to try different handles I decided to add on the top part of the stick another thread so I could screw different types of handles (pear shaped, ball, or any other handle that I came up with)

Step 3: Modeling the Stick in 3D

I proceded to fire OpenSCAD, (and learn a bit more about it), I had played around with it before, but never actually modeled anything useful.

The Stick is fairly easy to model using one of the primitives of the program

cylinder(h=40,r=5) *h = height, r=radius

Now the thread was the main challenge, until I realized that someone had already created a library for creating threads, you can download it here

The library has its own instructions on wher you should put the files, and you need to add an include in your program

use threadlib.scad

this library provides a bolt command that allows you to create threads

bolt(type, turns, higbee_arc=higbee_arc);

Where type is a text containing one of the standards measures for screws such as "M3", "M5", in my case "M11"

My stick is formed of a series of bolts and cylinders, their poisition determined by translate([x,y,z]) commands that sets the coordinate where the next object is created

Finally all objects are fused together into one piece using the union()command that combines objects

The full code for the stick ended like this:

use <threadlib.scad>

type = "M11x1.5"; 

turns = 7; 

higbee_arc = 45;

union() {

bolt(type, turns, higbee_arc=higbee_arc);


cylinder (h=1, r=8, center=false);


cylinder(h=1,r=10.3, center=false);

translate([0,0,+10]) cylinder(h=5,r1=9, r2=5, center=false);

translate ([0,0,15]) cylinder(h=40,r=5);

translate ([0,0,55.5]) bolt("M10",6,higbee_arc=45);


Step 4: Model the Ball Handle

Modeling the Ball seemed as easy as just creating an sphere with the primitive command for spheres


and proceding to add threads...

Well to add threads you need to remove a portion of the sphere solid, so for this instead of a union() command you use a difference() command which effectively substracts the second figure from the first .

In the end due to some issues that I'll explain in Step 6 I had to modify the bottom part of the ball to make it more slanted instead of a perfect curve.

Again my code is compromised of threads spheres, a few cilinders and a cube used with the difference() command to achieve the desired result

use <treadlib.scad>






translate([0,0,17.5]) // Sphere with thread, note the thread does not reach the surface sphere


type = "M12";

turns = 6;

higbee_arc = 45;


bolt(type, turns, higbee_arc=higbee_arc);


translate([0,0,-3]) // Cylinder to bore a channel from sphere surface to initial part of thread



difference() // This code creates the slanted bottom of the sphere


cube([36,36,18],center=true); // creates a cube


cylinder(20,d1=0,d2=46); // Bores the cube with an upside down cone to create the cutting piece for the 

                         // slanted bottom of the sphere


Step 5: 3D Print the Stick and Ball & Put Them Together

Slicing Software

I use Cura to slice my files, I won't dare to say that it's better than other options, but it is what I have and gives me good results so some of the tweaks discussed in this section refers to some Cura parameters. I know some of these parameters exists on other slicing software but they might be named differently.

Due to the difference in usage of both pieces it is best to print them separately since I used different options on the slicer program for each one

A. Slicing & Printing The Stick

For the stick I added supports to the model and added a Brim of 10mm around the object this will provide enough adhesion to the bed so that it prints successfully

Additionally remember that the stick will bear all your frenetic joystick moves, so please make yourself a favor and use a 100% infill to make it as strong as you can!

B. Slicing & Printing The Ball

The ball can be printed with no supports, make sure the threads are facing down to your print bed, but in order to make it stick to the bed add a brim of 10mm around the model, this was enough in my case

You can make the ball as heavy as you want according to your own preferences, while you could easily use a 100% infill for an indestructible ball, I find that 20% is good enough and your joystick will still be light enough for you to pick up

STL files are included for the Stick (NewStick.stl) and the Ball(JoyBall.stl)

C. Puting it all Together

One all parts are printed just screw them all together to form your Joystick, make sure that you thread it all the way so that it holds firmly in place. Just a word of advice, don't force the threads on the joystick base, if you damage that piece, well.. you just can't print another, so you'll need to buy a new joystick

Step 6: Lessons Learned

Repeat Until... Success!

All the previous steps should get you the pieces printed with enough strength to work, you really don´t need to read this, but I made a few mistakes before I got these pieces perfect and I believe it would be interesting to share my mistakes

Breaking your newly created joystick

1. When I finally got all measures right I printed my Stick, screwed on the joystick and played for like an hour until it sudenly broke.. That's when I realized that I had been printing all pieces with the default infill of 20% and the union of the stick and the thread simply couldn´t take the punishment and broke.. That's how I came up with the 100% infill

Melting Balls

2. My first design of the ball was.. well just a ball!, but every time I 3d printed the ball it was badly deformed at the bottom, and adding supports just made it worse. It turns out that the cooling fan can't fully cool the bottom part of the sphere and the plastic just melts a bit and deforms.., this was solved after I decided to make the bottom of the sphere slanted, this geometry allows the layers to cool much better and are thus prevented from melting and deforming

Step 7: Conclusion

Final Toughts

It took me a couple of days to perfect the joystick design, print it correctly and make sure it is repeatable. considering all, I'm very satisfied with it.

Hopefully you find this instructable useful, and have some use for this joystick mod, on any case I'm happy with my mod, now my two joysticks have ball handles and I'm all ready to stress test them!

Besides I'm Happy to have finally put together my first instuctable!