diff --git a/screws.scad b/screws.scad index 38f39cc..2cc3f09 100644 --- a/screws.scad +++ b/screws.scad @@ -76,7 +76,7 @@ include <screw_drive.scad> // . // |ISO|UTS|Head | Drive | // |---|---|--------------- | ----------------------------| -// |X|X|"none" | hex, torx| +// |X|X|"none" | hex, torx, slot (UTS only)| // |X|X|"hex" | *none*| // |X|X|"socket" | hex, torx| // |X|X|"button" | hex, torx| @@ -228,6 +228,7 @@ Torx values: https://www.stanleyengineeredfastening.com/-/media/web/sef/resourc // ydistribute(spacing=15){ // screw("1/4", thread=0,length=8, anchor=TOP, head="none", drive="hex"); // screw("1/4", thread=0,length=8, anchor=TOP, head="none", drive="torx"); +// screw("1/4", thread=0,length=8, anchor=TOP, head="none", drive="slot"); // screw("1/4", thread=0,length=8, anchor=TOP, head="none"); // } // screw("1/4", thread=0, length=8, anchor=TOP, head="hex"); @@ -687,7 +688,10 @@ module _driver(spec) if (drive=="phillips") phillips_mask(drive_size,anchor=BOTTOM); if (drive=="torx") torx_mask(size=drive_size, l=drive_depth+1, center=false); if (drive=="hex") hex_drive_mask(drive_size,drive_depth+1,anchor=BOT); - if (drive=="slot") cuboid([2*struct_val(spec,"head_size"), drive_width, drive_depth+1],anchor=BOTTOM); + if (drive=="slot") { + head_width = first_defined([struct_val(spec, "head_size"), diameter]); + cuboid([2*head_width, drive_width, drive_depth+1],anchor=BOTTOM); + } } } } @@ -1187,36 +1191,41 @@ function _screw_info_english(diam, threadcount, head, thread, drive) = INCH / tentry[tind], head_data = head=="none" ? let ( - UTS_setscrew = [ // hex width, hex depth - ["#0", [0.028, 0.050]], - ["#1", [0.035, 0.060]], - ["#2", [0.035, 0.060]], - ["#3", [0.05 , 0.070]], - ["#4", [0.05 , 0.045, 6, 0.027]], - ["#5", [1/16 , 0.080, 7, 0.036]], - ["#6", [1/16 , 0.080, 7, 0.036]], - ["#8", [5/64 , 0.090, 8, 0.041]], - ["#10",[3/32 , 0.100, 10, 0.049]], - [1/4, [1/8 , 0.125, 15, 0.068]], - [5/16, [5/32 , 0.156, 25, 0.088]], - [3/8, [3/16 , 0.188, 30, 0.097]], - [7/16, [7/32 , 0.219, 40, 0.117]], - [1/2, [1/4 , 0.250, 45, 0.137]], - [5/8, [5/16 , 0.312, 55, 0.202]], - [3/4, [3/8 , 0.375, 60, 0.202]], - [7/8, [1/2 , 0.500, 70, 0.291]], - [1, [9/16 , 0.562, 70, 0.291]], - [1.125,[9/16 , 0.562]], - [1.25, [5/8 , 0.625]], - [1.375,[5/8 , 0.625]], - [1.5, [3/4 , 0.750]], - [1.75, [1 , 1.000]], - [2, [1 , 1.000]], + UTS_setscrew = [ + // hex width, hex depth torx, torx depth slot width slot depth + ["#0", [0.028, 0.050, undef, undef, 0.012, 0.018]], + ["#1", [0.035, 0.060, undef, undef, 0.014, 0.018]], + ["#2", [0.035, 0.060, undef, undef, 0.016, 0.022]], + ["#3", [0.05 , 0.070, undef, undef, 0.018, 0.025]], + ["#4", [0.05 , 0.045, 6, 0.027, 0.021, 0.028]], + ["#5", [1/16 , 0.080, 7, 0.036, 0.023, 0.031]], + ["#6", [1/16 , 0.080, 7, 0.036, 0.025, 0.035]], + ["#8", [5/64 , 0.090, 8, 0.041, 0.029, 0.041]], + ["#10",[3/32 , 0.100, 10, 0.049, 0.032, 0.048]], + ["#12",[undef, undef, undef, undef, 0.038, 0.056]], + [1/4, [1/8 , 0.125, 15, 0.068, 0.045, 0.063]], + [5/16, [5/32 , 0.156, 25, 0.088, 0.051, 0.078]], + [3/8, [3/16 , 0.188, 30, 0.097, 0.064, 0.094]], + [7/16, [7/32 , 0.219, 40, 0.117, 0.072, 0.109]], + [1/2, [1/4 , 0.250, 45, 0.137, 0.081, 0.125]], + [9/16, [undef, undef, undef, undef, 0.091, 0.141]], + [5/8, [5/16 , 0.312, 55, 0.202, 0.102, 0.156]], + [3/4, [3/8 , 0.375, 60, 0.202, 0.129, 0.188]], + [7/8, [1/2 , 0.500, 70, 0.291]], + [1, [9/16 , 0.562, 70, 0.291]], + [1.125,[9/16 , 0.562]], + [1.25, [5/8 , 0.625]], + [1.375,[5/8 , 0.625]], + [1.5, [3/4 , 0.750]], + [1.75, [1 , 1.000]], + [2, [1 , 1.000]], ], entry = struct_val(UTS_setscrew, diam), dummy=assert(is_def(entry), str("Screw size ",diam," unsupported for headless screws")), - drive_dims = drive == "hex" ? [["drive_size", INCH*entry[0]], ["drive_depth", INCH*entry[1]]] : - drive == "torx" ? [["drive_size", entry[2]], ["drive_depth", INCH*entry[3]]] : [] + drive_dims = drive == "hex" ? [["drive_size", INCH*entry[0]], ["drive_depth", INCH*entry[1]]] + : drive == "torx" ? [["drive_size", entry[2]], ["drive_depth", INCH*entry[3]]] + : drive == "slot" ? [["drive_width", INCH*entry[4]], ["drive_depth", INCH*entry[5]]] + : [] ) concat([["head","none"]], drive_dims) : head=="hex" ? let( UTS_hex = [ @@ -1259,13 +1268,13 @@ function _screw_info_english(diam, threadcount, head, thread, drive) = ["#6", [ 0.226, 7/64, 15, 0.064, 0.058]], ["#8", [ 0.270, 9/64, 25, 0.077, 0.078]], ["#10",[ 5/16, 5/32, 27, undef, 0.088]], - ["#12",[ 0.324, 5/32, undef, undef, undef]], + ["#12",[ 0.324, 5/32, 27, undef, 0.088]], [1/4, [ 3/8, 3/16, 30, undef, 0.097]], [5/16, [ 15/32, 1/4, 45, undef, 0.137]], [3/8, [ 9/16, 5/16, 50, undef, 0.155]], [7/16, [ 21/32, 3/8, 55, undef, 0.202]], [1/2, [ 3/4, 3/8, 55, undef, 0.202]], - [9/16, [ 27/32, 7/16, undef, undef, undef]], + [9/16, [ 27/32, 7/16, 60, undef, 0.240]], [5/8, [ 15/16, 1/2, 70, undef, 0.291]], [3/4, [ 1.125, 5/8, 80, undef, 0.332]], [7/8, [ 1+5/16, 3/4, 100, undef, 0.425]], @@ -1312,24 +1321,24 @@ function _screw_info_english(diam, threadcount, head, thread, drive) = concat([["head","pan round"], ["head_size", INCH*entry[0]], ["head_height", INCH*entry[htind]]], drive_size) : head=="button" || head=="round" ? let( UTS_button = [ // button, hex or torx drive - // head diam, height, phillips, hex, torx, hex depth - ["#0", [0.114, 0.032, undef, 0.035,5 , 0.020, 0.017]], - ["#1", [0.139, 0.039, undef, 3/64, 5 , 0.028, 0.020]], - ["#2", [0.164, 0.046, undef, 3/64, 6 , 0.028, 0.023]], - ["#3", [0.188, 0.052, undef, 1/16, undef, 0.035, undef]], - ["#4", [0.213, 0.059, undef, 1/16, 8 , 0.035, 0.032]], - ["#5", [0.238, 0.066, undef, 5/64, undef, 0.044, undef]], - ["#6", [0.262, 0.073, undef, 5/64, 10 , 0.044, 0.038]], - ["#8", [0.312, 0.087, undef, 3/32, 15 , 0.052, 0.045]], - ["#10",[0.361, 0.101, undef, 1/8, 25 , 0.070, 0.052]], - ["#12",[0.413, 0.114, undef, 1/8, undef, 0.070, undef]], // also 0.410, .115, 9/64, hex depth guessed - [1/4, [0.437, 0.132, undef, 5/32, 27 , 0.087, 0.068]], - [5/16, [0.547, 0.166, undef, 3/16, 40 , 0.105, 0.090]], - [3/8, [0.656, 0.199, undef, 7/32, 45 , 0.122, 0.106]], - [7/16, [0.750, 0.220, undef, 1/4, undef, 0.193, undef]], // hex depth interpolated - [1/2, [0.875, 0.265, undef, 5/16, 55 , 0.175, 0.158]], - [5/8, [1.000, 0.331, undef, 3/8, 60 , 0.210, 0.192]], - [3/4, [1.1, 0.375, undef, 7/16, undef, 0.241]], // hex depth extrapolated + // head diam, height, phillips, hex, torx, hex depth + ["#0", [0.114, 0.032, undef, 0.035, 5 , 0.020, 0.015]], + ["#1", [0.139, 0.039, undef, 3/64, 5 , 0.028, 0.022]], + ["#2", [0.164, 0.046, undef, 3/64, 6 , 0.028, 0.023]], + ["#3", [0.188, 0.052, undef, 1/16, undef, 0.035, undef]], + ["#4", [0.213, 0.059, undef, 1/16, 8 , 0.035, 0.032]], + ["#5", [0.238, 0.066, undef, 5/64, 10 , 0.044, 0.038]], + ["#6", [0.262, 0.073, undef, 5/64, 10 , 0.044, 0.038]], + ["#8", [0.312, 0.087, undef, 3/32, 15 , 0.052, 0.045]], + ["#10",[0.361, 0.101, undef, 1/8, 25 , 0.070, 0.052]], + ["#12",[0.413, 0.114, undef, 1/8, undef, 0.070, undef]], // also 0.410, .115, 9/64, hex depth guessed + [1/4, [0.437, 0.132, undef, 5/32, 27 , 0.087, 0.068]], + [5/16, [0.547, 0.166, undef, 3/16, 40 , 0.105, 0.090]], + [3/8, [0.656, 0.199, undef, 7/32, 45 , 0.122, 0.106]], + [7/16, [0.750, 0.220, undef, 1/4, undef, 0.193, undef]], // hex depth interpolated + [1/2, [0.875, 0.265, undef, 5/16, 55 , 0.175, 0.158]], + [5/8, [1.000, 0.331, undef, 3/8, 60 , 0.210, 0.192]], + [3/4, [1.1, 0.375, undef, 7/16, undef, 0.241]], // hex depth extrapolated ], UTS_round = [ // slotted, phillips // head diam, head height, phillips drive, hex, torx, ph diam, ph width, ph depth, slot width, slot depth @@ -1593,25 +1602,30 @@ function _screw_info_metric(diam, pitch, head, thread, drive) = head=="none" ? let( metric_setscrew = [ - [1.4, [0.7]], - [1.6, [0.7]], - [1.8, [0.7]], - [2, [0.9]], - [2.5, [1.3]], - [3, [1.5, 6, 0.77]], - [4, [2, 8, 1.05]], - [5, [2.5, 10, 1.24]], - [6, [3, 15, 1.74]], - [8, [4, 25, 2.24]], - [10, [5, 40, 2.97]], - [12, [6, 45, 3.48]], - [16, [8, 55, 5.15]], - [20, [10, undef, undef]], + // hex torx, torx depth, slot width, slot depth + [1.2, [undef, undef, undef, 0.330, 0.460]], + [1.4, [0.7, undef, undef, undef, undef]], + [1.6, [0.7, undef, undef, 0.380, 0.650]], + [1.8, [0.7, undef, undef, undef, undef]], + [2, [0.9, undef, undef, 0.380, 0.740]], + [2.5, [1.3, undef, undef, 0.530, 0.835]], + [3, [1.5, 6, 0.77, 0.530, 0.925]], + [3.5, [undef, undef, undef, 0.630, 1.085]], + [4, [2, 8, 1.05, 0.730, 1.270]], + [5, [2.5, 10, 1.24, 0.930, 1.455]], + [6, [3, 15, 1.74, 1.130, 1.800]], + [8, [4, 25, 2.24, 1.385, 2.250]], + [10, [5, 40, 2.97, 1.785, 2.700]], + [12, [6, 45, 3.48, 2.185, 3.200]], + [16, [8, 55, 5.15]], + [20, [10, undef, undef]], ], entry = struct_val(metric_setscrew, diam), dummy=assert(is_def(entry), str("Screw size M",diam," unsupported for headless screws")), - drive_dim = drive=="hex" ? [["drive_size", entry[0]], ["drive_depth", diam/2]] : - drive=="torx" ? [["drive_size", entry[1]], ["drive_depth", entry[2]]] : [] + drive_dim = drive=="hex" ? [["drive_size", entry[0]], ["drive_depth", diam/2]] + : drive=="torx" ? [["drive_size", entry[1]], ["drive_depth", entry[2]]] + : drive=="slot" ? [["drive_width", entry[3]], ["drive_depth", entry[4]]] + : [] ) concat([["head","none"]], drive_dim) : head=="hex" ? let(