Sherline Four-Jaw Chuck Speed Wrenches: 3D Printed Edition

A Home Shop Machinist article (A Speed Key for Your Four-Jaw Chuck, p 67 Nov-Dec 2013, David Morrow) showed some lovely knurled steel knobs. These 3D printed knobs aren’t nearly as pretty, but they do much the same thing:

Sherline Knobs - in 4 jaw chuck
Sherline Knobs – in 4 jaw chuck

The solid model resembles the illegitimate offspring of a wine bottle and a pineapple:

Sherline Knob - solid model
Sherline Knob – solid model

The knurling comes from aubenc’s Knurled Surface Library v2. I ran off a prototype (on the left), then tweaked the dimensions to get the final version on the right:

Sherline Knobs - knurl depth variation
Sherline Knobs – knurl depth variation

Being that type of guy, I define the knurl in terms of its diametral pitch, compute the diamond width & length to fit in the available space, then hand those measurements to the knurling library… which recomputes everything and decides on one less diamond than I do: NumSides has a Finagle Constant of -1 to make the answer come out right. We may be using a different diameter or something, but I haven’t deciphered the source code. It’s parametric out the wazoo, as usual, so you can spin up what you like, how you like it.

Anyhow, a 24 DP knurl with 1.0 mm depth looks and feels pretty good; the XY resolution isn’t good enough for a 48 DP knurl around that knob diameter. The diamonds don’t come out as crisp and pointy as crushed steel knurls, but they’re OK for my fingers.

Doing half a dozen doesn’t take much longer than doing a few, because there’s a 20 second minimum layer time in effect and those things don’t have much plastic, so now I have one for the hold-down clamps and another for Show-n-Tell sessions:

Sherline Knobs - M2 platform
Sherline Knobs – M2 platform

I chopped a 5/32 inch hex key into five 15 mm lengths with a Dremel cutoff wheel, then filed both ends flat and broke the edges. The hex stubs were a press fit in the hex holes, so I finger-started them, grabbed the hex in the drill press, aligned the handle below, and rammed the stub about 5 mm deep. The final depth comes from jamming the wrench into the chuck and pressing firmly, so the stubs project exactly as far as possible:

Sherline Knobs - hex key inserted
Sherline Knobs – hex key inserted

One might quibble about the infill on the end; one may go adjust one’s own printer as one prefers.

There’s 0.1 mm more HoleWindage than usual, because these holes must fix a hex shaft, not a circular pin, and the corners need some clearance. They came out a firm press fit: exactly what’s needed.

They’re no good for final tightening of those chuck jaws, but that’s not their purpose…

The OpenSCAD source code:

// Knurled handles for Sherline hex keys
// Ed Nisley - KE4ZNU - November 2013

use <knurledFinishLib_v2.scad>

//- Extrusion parameters must match reality!
//  Print with 2 shells and 3 solid layers

ThreadThick = 0.20;
ThreadWidth = 0.40;

HoleWindage = 0.3;			// extra clearance to improve hex socket fit

Protrusion = 0.1;			// make holes end cleanly

PI = 3.14159265358979;
inch = 25.4;

//----------------------
// Dimensions

ShaftDia = 10.5;				// un-knurled section diameter
ShaftLength = 15.0;				//  ... length

SocketDia = (5/32) * inch;		// hex key size
SocketDepth = 10.0;

KnurlLen = 20.0;				// length of knurled section
KnurlDia = 15.0;				//   ... diameter
KnurlDPNom = 24;				// Nominal diametral pitch = (# diamonds) / (OD inches)

DiamondDepth = 1.0;				//   ... depth of diamonds
DiamondAspect = 2;				// length to width ratio

NumDiamonds = floor(KnurlDPNom * KnurlDia / inch);
echo(str("Num diamonds: ",NumDiamonds));

NumSides = 4*(NumDiamonds - 1);		// 4 facets per diamond. Library computes diamonds separately!

KnurlDP = NumDiamonds / (KnurlDia / inch);				// actual DP
echo(str("DP Nom: ",KnurlDPNom," actual: ",KnurlDP));

DiamondWidth = (KnurlDia * PI) / NumDiamonds;

DiamondLenNom = DiamondAspect * DiamondWidth;					// nominal diamond length
DiamondLength = KnurlLen / round(KnurlLen/DiamondLenNom);		//  ... actual

TaperLength = 0.75*DiamondLength;

//----------------------
// Useful routines

module PolyCyl(Dia,Height,ForceSides=0) {			// based on nophead's polyholes

  Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);

  FixDia = Dia / cos(180/Sides);

  cylinder(r=(FixDia + HoleWindage)/2,
           h=Height,
	   $fn=Sides);
}

module ShowPegGrid(Space = 10.0,Size = 1.0) {

  Range = floor(50 / Space);

	for (x=[-Range:Range])
	  for (y=[-Range:Range])
		translate([x*Space,y*Space,Size/2])
		  %cube(Size,center=true);
}

//- Build it

ShowPegGrid();

difference() {
	union() {
		render(convexity=10)
		translate([0,0,TaperLength])
			knurl(k_cyl_hg=KnurlLen,
				  k_cyl_od=KnurlDia,
				  knurl_wd=DiamondWidth,
				  knurl_hg=DiamondLength,
				  knurl_dp=DiamondDepth,
				  e_smooth=DiamondLength/2);
		color("Orange")
		cylinder(r1=ShaftDia/2,
					r2=(KnurlDia - DiamondDepth)/2,
					h=(TaperLength + Protrusion),
					$fn=NumSides);
		color("Orange")
		translate([0,0,(TaperLength + KnurlLen - Protrusion)])
			cylinder(r2=ShaftDia/2,
					r1=(KnurlDia - DiamondDepth)/2,
					h=(TaperLength + Protrusion),
					$fn=NumSides);
		color("Moccasin")
		translate([0,0,(2*TaperLength + KnurlLen - Protrusion)])
			cylinder(r=ShaftDia/2,h=(ShaftLength + Protrusion),$fn=NumSides);

	}
	translate([0,0,(2*TaperLength + KnurlLen + ShaftLength - SocketDepth + Protrusion)])
		PolyCyl(SocketDia,(SocketDepth + Protrusion),6);
}

This might be a good stocking stuffer for that guy who has everything, but you’d need his shop to make it, so what’s the point in that?