OpenSCAD project: Replacement analog sticks

My introduction to OpenSCAD through a quick, practical project

OpenSCAD project - Logitech WingMan Rumble Pad

My friend Alex came to me with a project last week. His Logitech WingMan Rumble Pad gamepad was missing an analog stick and could I possibly print a replacement? (Answer: yes!)

It came up when talking with Andrew Plumb – if you’ve got something small and measurable to do, OpenSCAD is a great way to go. It lets you precisely script 3D primitives into position to make cool stuff. And of course it exports to STL format, perfect for your home 3D printer or your Personal Factory!

First I’ll show what the printing process on my MakerBot Cupcake was like, then I’ll walk through making a similar stick in OpenSCAD. Here’s gamepad as I received it:

Original gamepad

My MakerBot has done some nice prints, but it has trouble with narrow items. Like this:

Printing fail

ReplicatorG can fill in support material though, so as a comedy option I tried the model standing-up “T”-style and it worked!

Print with support structure

There was a lot of cleanup afterwards, but the sticks turned out pretty well.

Finished sticks

How did I do it? Easy! I measured the remaining original stick with calipers and started placing cylinders in OpenSCAD. Here’s the main UI, just paste in what I’m writing and press F5 to refresh the 3D view after each step:

Blank UI

The analog stick has three main parts: the stick, the wider base of the stick, and the head of the stick. First I’ll enter these measurements that I took earlier:

// Measurements (in mm)
post_height = 10.30;
post_radius = 2.55;

post_base_height = 1.78;
post_base_radius_narrow = 2.55;
post_base_radius_wide = 3.88;

head_height = 3.5;
head_radius = 10;

$fn = 100; // special variable that affects output quality

Now I’ll define the cylinder for the main part of the stick and press F5:

// Stick
cylinder(h = post_height, r1 = post_radius, r2 = post_radius);

Cylinder

Then the overlapping base of the stick:

// Stick base
cylinder(h = post_base_height, r1 = post_base_radius_wide, r2 = post_base_radius_narrow);

Stick base

And finally the head of the stick:

// Head
cylinder(h = head_height, r1 = head_radius, r2 = head_radius);

Oops

Oops, that’s not right. Use the translate() function on the cylinder() function to fix it:

// Head
translate([0, 0, -head_height]) cylinder(h = head_height, r1 = head_radius, r2 = head_radius);

Assembled

That’s it, a functional analog stick replacement in three lines of code. In the final version I added rounding on the head, a depression for the thumb, and a hole for attaching to the gamepad. Check it out on Thingiverse: http://www.thingiverse.com/thing:8544

Looking at other people’s OpenSCAD scripts was intimidating at first, but it really does start very simply. Keep the language reference handy and you’ll be making stuff in no time.


Derek Quenneville is a 3D printing evangelist who posts weekly on the Ponoko blog. Follow him on Twitter @techknight.

Related posts:

One Response to “OpenSCAD project: Replacement analog sticks”

  1. OpenSCAD project: Files to Physicals « Ponoko – Blog Says:

    [...] things on our computers (music, photos, programs) as physical objects. After learning OpenSCAD for last week’s analog stick project, I tried my hand at a script for taking any file and turning it into a unique 3D [...]