Created
October 28, 2020 15:31
-
-
Save ednisley/e92e550154cdfb436cc98dbe2ae02274 to your computer and use it in GitHub Desktop.
OpenSCAD source code: Ball-drilling fixture for mini-lathe three-jaw chuck
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Lathe Ball Drilling Fixture | |
// Ed Nisley KE4ZNU 2020-11 | |
/* [Layout options] */ | |
Layout = "Build"; // [Build, Show, Body, Jaws] | |
BallDia = 10.0; // [5.0:0.5:25.0] | |
/* [Extrusion parameters] */ | |
/* [Hidden] */ | |
ThreadThick = 0.25; | |
ThreadWidth = 0.40; | |
HoleWindage = 0.2; | |
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); | |
function IntegerLessMultiple(Size,Unit) = Unit * floor(Size / Unit); | |
Protrusion = 0.1; // make holes end cleanly | |
inch = 25.4; | |
ID = 0; | |
OD = 1; | |
LENGTH = 2; | |
//* [Basic dimensions] */ | |
Chuck = [21.0,100.0,20.0]; // chuck bore, OD, jaw length | |
Jaw = [Chuck[LENGTH],15.0,12.0]; // jaw free length, base width, first step radius | |
JawInclAngle = 112; // < 120 degrees for clearance! | |
JawAngle = JawInclAngle/2; // angle from radius | |
WallThick = 5.0; // min wall thickness | |
Kerf = 0.75; // space between clamp blocks | |
ClampSides = 8*(2*3); | |
ClampBore = BallDia/2; // clear bore through clamp | |
ClampAngle = asin(ClampBore/BallDia); // angle from lathe axis to clamp front | |
Plate = [ClampBore, | |
BallDia + 2*WallThick + 2*Jaw.z, | |
Jaw.x]; | |
LegendDepth = 1*ThreadWidth; | |
ShaftOD = 3.6; // sample shaft | |
ShowGap = 1.5; | |
//---------------------- | |
// Chuck jaws | |
// Real jaws have a concave radiused tip we simply ignore | |
module ChuckJaws(l=Jaw.x,r=10) { | |
for (a=[0:120:240]) | |
rotate(a) | |
linear_extrude(height=l) | |
translate([r,0]) | |
difference() { | |
translate([Chuck[OD]/4,0]) | |
square([Chuck[OD]/2,Jaw.y],center=true); | |
for (i=[-1,1]) | |
rotate(i*(90 - JawAngle)) | |
translate([-Jaw.z/2,0]) | |
square([Jaw.z,2*Jaw.y],center=true); | |
} | |
} | |
//---------------------- | |
// Clamp body | |
module ClampBlocks() { | |
difference() { | |
cylinder(d=Plate[OD],h=Plate[LENGTH],$fn=ClampSides); // main disk | |
translate([0,0,-Protrusion]) // central bore | |
cylinder(d=ClampBore,h=2*Plate[LENGTH],$fn=ClampSides); | |
for (a=[0:120:240]) // kerf slits | |
rotate(60 + a) | |
translate([Plate[OD]/2,0,Protrusion]) | |
cube([Plate[OD],Kerf,2*Plate[LENGTH]],center=true); | |
translate([0,0,BallDia/2 * cos(ClampAngle)]) // ball socket | |
sphere(d=BallDia,$fn=ClampSides); | |
for (a=[0:120:240]) { // legend | |
rotate(4.5*360/ClampSides + a) | |
translate([Plate[OD]/2 - LegendDepth,0,Plate[LENGTH]/2]) | |
rotate([0,90,0]) | |
linear_extrude(height=LegendDepth + Protrusion,convexity=10) | |
mirror([0,0,0]) | |
text(text=str(BallDia," mm"),size=2.5,spacing=1.20,font="Arial:style:Bold",halign="center",valign="center"); | |
rotate(-4.5*360/ClampSides + a) | |
translate([Plate[OD]/2 - LegendDepth,0,Plate[LENGTH]/2]) | |
rotate([0,90,0]) | |
linear_extrude(height=LegendDepth + Protrusion,convexity=10) | |
mirror([0,0,0]) | |
text(text="KE4ZNU",size=2.5,spacing=1.20,font="Arial:style:Bold",halign="center",valign="center"); | |
} | |
} | |
} | |
//---------------------- | |
// Clamp with jaw cutouts | |
module ClampBody() { | |
difference() { | |
ClampBlocks(); | |
translate([0,0,-Protrusion]) | |
ChuckJaws(l=Jaw.x + 2*Protrusion,r=BallDia/2 + WallThick); | |
} | |
} | |
//---------------------- | |
// Lash it together | |
if (Layout == "Body") { | |
ClampBlocks(); | |
} | |
if (Layout == "Jaws") { | |
ChuckJaws(); | |
} | |
if (Layout == "Build") { | |
ClampBody(); | |
} | |
if (Layout == "Show") { | |
ClampBody(); | |
color("ivory",0.2) | |
ChuckJaws(r=BallDia/2 + WallThick + ShowGap); // move out for E-Z viewing | |
color("red",0.4) | |
translate([0,0,-Jaw.x/2]) | |
cylinder(d=ShaftOD,h=2*Jaw.x,$fn=ClampSides,center=false); | |
color("white",0.5) | |
translate([0,0,BallDia/2 * cos(ClampAngle)]) // ball socket | |
sphere(d=BallDia,$fn=ClampSides); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
More details on my blog at https://wp.me/poZKh-9zB