Sherline Tommy Bar Handles

While putting the speed wrenches in the box with the Sherline four-jaw chuck, it occurred to me that I had all the makings of a handle for Sherline’s steel tommy bars:

Sherline Tommy Bar Handle - solid model
Sherline Tommy Bar Handle – solid model

Because these are intended for pushing, rather than twisting, I dialed the knurl back to 32 DP, reduced the depth to 0.5 mm, and ran the bar almost all the way through the handle for strength:

Sherline Tommy Bar Handles
Sherline Tommy Bar Handles

A dab of urethane adhesive inside the handle holds the bar in place. They started out a snug slip fit, so we’ll see how well that holds the bars in place.

A tommy bar holds the spindle against the torque from the collet pusher:

Sherline CNC mill - tommy bar and collet pusher
Sherline CNC mill – tommy bar and collet pusher

A pair will come in handy with the three-jaw chuck the next time that one appears.

The white slab is a very early 3D printed tool from my Thing-O-Matic, made to hold the pin at exactly the proper distance from the pulley so it fits squarely into the pusher and locks it to the spindle:

Locking pin holder - spindle end view
Locking pin holder – spindle end view

Other folks make much nicer tommy bar handles than mine, but I’d say my 3D printed handles beat a common nail any day!

The OpenSCAD source code:

// Knurled handles for Sherline tommy bars
// Ed Nisley - KE4ZNU - December 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.2;			// extra clearance

Protrusion = 0.1;			// make holes end cleanly

PI = 3.14159265358979;
inch = 25.4;

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

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

SocketDia = 4.0;				// tommy bar diameter
SocketDepth = 40.0;

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

DiamondDepth = 0.5;				//   ... 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);
}