From f740051ad113022332a578ef5274a0ae66a239c9 Mon Sep 17 00:00:00 2001 From: Revar Desmera <revarbat@gmail.com> Date: Mon, 27 Jan 2020 04:09:06 -0800 Subject: [PATCH] Rewrote phillips_driver() to an actual spec. --- phillips_drive.scad | 68 ++++++++++++++++++++++----------------------- version.scad | 2 +- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/phillips_drive.scad b/phillips_drive.scad index 9be80ec..efe68d3 100644 --- a/phillips_drive.scad +++ b/phillips_drive.scad @@ -15,7 +15,7 @@ // Module: phillips_drive() // Description: Creates a model of a phillips driver bit of a given named size. // Arguments: -// size = The size of the bit. "#1", "#2", or "#3" +// size = The size of the bit as a string. "#0", "#1", "#2", "#3", or "#4" // shaft = The diameter of the drive bit's shaft. // l = The length of the drive bit. // anchor = Translate so anchor point is at origin (0,0,0). See [anchor](attachments.scad#anchor). Default: `CENTER` @@ -27,44 +27,44 @@ // phillips_drive(size="#2", shaft=6, l=20); // phillips_drive(size="#3", shaft=6, l=20); // } -module phillips_drive(size="#2", shaft=6, l=20, anchor=BOTTOM, spin=0, orient=UP) { - // These are my best guess reverse-engineered measurements of - // the tip diameters of various phillips screwdriver sizes. - ang = 11; - rads = [["#1", 1.25], ["#2", 1.77], ["#3", 2.65]]; - radidx = search([size], rads)[0]; - r = radidx == []? 0 : rads[radidx][1]; - h = (r/2)/tan(ang); - cr = r/2; - orient_and_anchor([shaft, shaft, l], orient, anchor, chain=true) { +module phillips_drive(size="#2", shaft=6, l=20, $fn=36, anchor=BOTTOM, spin=0, orient=UP) { + assert(is_string(size)); + assert(in_list(size,["#0","#1","#2","#3","#4"])); + + num = ord(size[1]) - ord("0"); + b = [0.61, 0.97, 1.47, 2.41, 3.48][num]; + e = [0.31, 0.43, 0.81, 2.00, 2.41][num]; + g = [0.81, 1.27, 2.29, 3.81, 5.08][num]; + //f = [0.33, 0.53, 0.70, 0.82, 1.23][num]; + //r = [0.30, 0.50, 0.60, 0.80, 1.00][num]; + alpha = [ 136, 138, 140, 146, 153][num]; + beta = [7.00, 7.00, 5.75, 5.75, 7.00][num]; + gamma = 92.0; + ang1 = 28.0; + ang2 = 26.5; + h1 = adj_ang_to_opp(g/2, ang1); + h2 = adj_ang_to_opp((shaft-g)/2, 90-ang2); + h3 = adj_ang_to_opp(b/2, ang1); + p0 = [0,0]; + p1 = [e/2, adj_ang_to_opp(e/2, 90-alpha/2)]; + p2 = p1 + [(shaft-e)/2, adj_ang_to_hyp((shaft-e)/2, 90-gamma/2)]; + orient_and_anchor([shaft,shaft,l], anchor=anchor, spin=spin, orient=orient, geometry="cylinder", chain=true) { down(l/2) { difference() { - intersection() { - union() { - clip = (shaft-1.2*r)/2/tan(26.5); - zrot(360/8/2) cylinder(h=clip, d1=1.2*r/cos(360/8/2), d2=shaft/cos(360/8/2), center=false, $fn=8); - up(clip-0.01) cylinder(h=l-clip, d=shaft, center=false, $fn=24); + union() { + cyl(d1=0, d2=g, h=h1, anchor=BOT); + up(h1) { + cyl(d1=g, d2=shaft, h=h2, anchor=BOT); + up(h2) cyl(d=shaft, h=l-h1-h2, anchor=BOT); } - cylinder(d=shaft, h=l, center=false, $fn=24); } zrot(45) - zrot_copies(n=4) { - yrot(ang) { - zrot(-45) { - off = (r/2-cr*(sqrt(2)-1))/sqrt(2); - translate([off, off, 0]) { - linear_extrude(height=l, convexity=4) { - difference() { - union() { - square([shaft/2, shaft/2], center=false); - mirror_copy([1,-1]) back(cr) zrot(1.125) square([shaft/2, shaft/2], center=false); - } - difference() { - square([cr*2, cr*2], center=true); - translate([cr,cr,0]) circle(r=cr, $fn=8); - } - } - } + zrot_copies(n=4, r=b/2/cos(90-alpha/2), sa=90) { + up(h3) { + xrot(-beta) { + linear_extrude(height=(h1+h2)*20, convexity=4, center=true) { + path = [p0, p1, p2, [-p2.x,p2.y], [-p1.x,p1.y]]; + polygon(path); } } } diff --git a/version.scad b/version.scad index ab8ca8e..7b37ec5 100644 --- a/version.scad +++ b/version.scad @@ -8,7 +8,7 @@ ////////////////////////////////////////////////////////////////////// -BOSL_VERSION = [2,0,96]; +BOSL_VERSION = [2,0,97]; // Section: BOSL Library Version Functions