diff --git a/libtest.png b/libtest.png index 9c9b205..a163168 100644 Binary files a/libtest.png and b/libtest.png differ diff --git a/readme.md b/readme.md index 620db7f..c2588e8 100644 --- a/readme.md +++ b/readme.md @@ -963,34 +963,47 @@ Brackets for joining extrusions at a corner. | Function | Description | |:--- |:--- | | `extrusion_corner_bracket_base_thickness(type)` | Thickness of base of bracket | +| `extrusion_corner_bracket_extrusion(type)` | Default extrusion this bracket is for | | `extrusion_corner_bracket_hole_offset(type)` | Hole offset from corner | | `extrusion_corner_bracket_side_thickness(type)` | Thickness of side of bracket | | `extrusion_corner_bracket_size(type)` | Size of bracket | +| `extrusion_corner_bracket_tnut(type)` | The sliding t-nut to use in the assembly | +| `extrusion_inner_corner_bracket_extrusion(type)` | Default extrusion this bracket is for | +| `extrusion_inner_corner_bracket_screw_offsets(type)` | Screw offsets from the ends | | `extrusion_inner_corner_bracket_size(type)` | Size of inner bracket | +| `extrusion_inner_corner_bracket_tnut(type)` | The sliding t-nut it is based on | ### Modules | Module | Description | |:--- |:--- | | `extrusion_corner_bracket(type)` | Corner bracket for extrusion | -| `extrusion_corner_bracket_assembly(type, part_thickness = 2, screw_type = M4_cap_screw, nut_type = M4_sliding_t_nut, max_screw_depth = 6)` | Assembly with fasteners in place | +| `extrusion_corner_bracket_assembly(type, part_thickness = undef, screw_type = undef, nut_type = undef, max_screw_depth = undef)` | Assembly with fasteners in place | | `extrusion_corner_bracket_hole_positions(type)` | Place children at hole positions | -| `extrusion_inner_corner_bracket(type, grub_screws = true)` | Inner corner bracket for extrusion | +| `extrusion_inner_corner_bracket(type, grub_screws = true, backwards = false)` | Inner corner bracket for extrusion | ![extrusion_brackets](tests/png/extrusion_brackets.png) ### Vitamins | Qty | Module call | BOM entry | | ---:|:--- |:---| -| 1 | `extrusion(E2020, 20)` | Extrusion E2020 x 20mm | -| 1 | `extrusion(E2020, 30)` | Extrusion E2020 x 30mm | -| 1 | `extrusion(E2020, 40)` | Extrusion E2020 x 40mm | -| 1 | `extrusion(E2020, 50)` | Extrusion E2020 x 50mm | -| 2 | `extrusion_corner_bracket(E20_corner_bracket)` | Extrusion corner bracket 20 | -| 2 | `extrusion_inner_corner_bracket(E20_inner_corner_bracket, true)` | Extrusion inner corner bracket 4.5 | -| 1 | `extrusion_inner_corner_bracket(E20_inner_corner_bracket, false)` | Extrusion inner corner bracket 4.5 | +| 2 | `extrusion(E2020, 20.3)` | Extrusion E2020 x 20.3mm | +| 1 | `extrusion(E2020, 28)` | Extrusion E2020 x 28mm | +| 2 | `extrusion(E2020, 39.3)` | Extrusion E2020 x 39.3mm | +| 1 | `extrusion(E2020, 48)` | Extrusion E2020 x 48mm | +| 1 | `extrusion(E4040, 25.9)` | Extrusion E4040 x 25.9mm | +| 1 | `extrusion(E4040, 40)` | Extrusion E4040 x 40mm | +| 1 | `extrusion(E4040, 58.9)` | Extrusion E4040 x 58.9mm | +| 1 | `extrusion(E4040, 80)` | Extrusion E4040 x 80mm | +| 2 | `extrusion_corner_bracket(E20_corner_bracket)` | Extrusion corner bracket 20mm for E2020 | +| 2 | `extrusion_corner_bracket(E40_corner_bracket)` | Extrusion corner bracket 35mm for E4040 | +| 4 | `extrusion_inner_corner_bracket(E20_inner_corner_bracket)` | Extrusion inner corner bracket for E2020 | +| 2 | `extrusion_inner_corner_bracket(E40_inner_corner_bracket)` | Extrusion inner corner bracket for E4040 | | 4 | `sliding_t_nut(M4_sliding_t_nut)` | Nut M4 sliding T | +| 4 | `sliding_t_nut(M8_sliding_ball_t_nut)` | Nut M8 sliding T with spring loaded ball | | 4 | `screw(M4_cap_screw, 8)` | Screw M4 cap x 8mm | +| 4 | `screw(M8_cap_screw, 16)` | Screw M8 cap x 16mm | | 4 | `washer(M4_washer)` | Washer M4 x 9mm x 0.8mm | +| 4 | `washer(M8_washer)` | Washer M8 x 17mm x 1.6mm | Top @@ -2048,6 +2061,7 @@ If a nut is given a child then it gets placed on its top surface. | `nut_thickness(type, nyloc = false)` | Thickness of plain or nyloc version | | `nut_trap_flat_radius(nut, horizontal = false)` | Radius across the flats of a nut trap | | `nut_trap_radius(nut, horizontal = false)` | Radius across the corners of a nut trap | +| `t_nut_tab(type)` | Sliding t-nut T dimensions | ### Modules | Module | Description | @@ -2083,10 +2097,12 @@ If a nut is given a child then it gets placed on its top surface. | 1 | `nut(M5_nut)` | Nut M5 x 4mm | | 1 | `nut(M5_nut, nyloc = true)` | Nut M5 x 4mm nyloc | | 1 | `nut(M5nS_thin_nut)` | Nut M5nS 8 x 2.7mm | +| 1 | `sliding_t_nut(M6_sliding_t_nut)` | Nut M6 hammer | | 1 | `nut(M6_half_nut)` | Nut M6 x 3mm | | 1 | `nut(M6_nut)` | Nut M6 x 5mm | | 1 | `nut(M6_nut, nyloc = true)` | Nut M6 x 5mm nyloc | | 1 | `nut(M6nS_thin_nut)` | Nut M6nS 10 x 3.2mm | +| 1 | `sliding_t_nut(M8_sliding_ball_t_nut)` | Nut M8 sliding T with spring loaded ball | | 1 | `nut(M8_nut)` | Nut M8 x 6.5mm | | 1 | `nut(M8_nut, nyloc = true)` | Nut M8 x 6.5mm nyloc | | 1 | `nut(M8nS_thin_nut)` | Nut M8nS 13 x 4mm | diff --git a/tests/extrusion_brackets.scad b/tests/extrusion_brackets.scad index a16da34..42f509a 100644 --- a/tests/extrusion_brackets.scad +++ b/tests/extrusion_brackets.scad @@ -16,13 +16,49 @@ // You should have received a copy of the GNU General Public License along with NopSCADlib. // If not, see . // -include <../utils/core/core.scad> +include <../core.scad> -include <../vitamins/extrusion_brackets.scad> include <../vitamins/extrusions.scad> +include <../vitamins/extrusion_brackets.scad> include <../vitamins/washers.scad> include <../vitamins/nuts.scad> +module inner_bracket_test(bracket, extrusion, backwards = false) + rotate([90, 0, 180]) { + eWidth = extrusion_width(extrusion); + size = extrusion_inner_corner_bracket_size(bracket); + tnut = extrusion_inner_corner_bracket_tnut(bracket); + + translate([backwards ? -eWidth : 0, 0]) + extrusion_inner_corner_bracket(bracket, backwards = backwards); + + translate([-eWidth / 2, 0]) + rotate([-90, 0, 0]) + extrusion(extrusion, size.x - nut_thickness(tnut) - extrusion_tab_thickness(extrusion), false); + + translate([-eWidth, -eWidth / 2]) + rotate([0, 90, 0]) + extrusion(extrusion, eWidth + size.y - nut_thickness(tnut) - extrusion_tab_thickness(extrusion), false); + } + + +module bracket_test(bracket, extrusion) + rotate([90, 0, 180]) { + eWidth = extrusion_width(extrusion); + size = extrusion_corner_bracket_size(bracket); + + extrusion_corner_bracket_assembly(bracket); + + translate([-eWidth / 2, 0]) + rotate([-90, 0, 0]) + extrusion(extrusion, size.y, false); + + translate([-eWidth, -eWidth / 2]) + rotate([0, 90, 0]) + extrusion(extrusion, eWidth + size.x, false); + } + + module extrusion_brackets(examples = false) { extrusion_inner_corner_bracket(E20_inner_corner_bracket); @@ -32,34 +68,30 @@ module extrusion_brackets(examples = false) { translate([60, 0]) extrusion_corner_bracket_assembly(E20_corner_bracket); - eWidth = extrusion_width(E2020); + translate([110, 0]) + extrusion_inner_corner_bracket(E40_inner_corner_bracket); + + translate([140, 0]) + extrusion_corner_bracket_assembly(E40_corner_bracket); if(examples) { - translate([20, 60, 10]) rotate([90, 0, 180]) { - extrusion_inner_corner_bracket(E20_inner_corner_bracket); + translate([20, 50, 10]) + inner_bracket_test(E20_inner_corner_bracket, E2020, true); - translate([-eWidth / 2, 0, 0]) - rotate([-90, 0, 0]) - extrusion(E2020, 20, false); + translate([20, 80, 10]) + inner_bracket_test(E20_inner_corner_bracket, E2020); - translate([-eWidth, -eWidth / 2, 0]) - rotate([0, 90, 0]) - extrusion(E2020, 40, false); - } + translate([20, 120, 10]) + bracket_test(E20_corner_bracket, E2020); - translate([100, 60, 10]) rotate([90, 0, 180]) { - extrusion_corner_bracket_assembly(E20_corner_bracket); + translate([100, 70, 10]) + inner_bracket_test(E40_inner_corner_bracket, E4040); - translate([-eWidth / 2, 0, 0]) - rotate([-90, 0, 0]) - extrusion(E2020, 30, false); - - translate([-eWidth, -eWidth / 2, 0]) - rotate([0, 90, 0]) - extrusion(E2020, 50, false); - } + translate([100, 130, 10]) + bracket_test(E40_corner_bracket, E4040); } } if($preview) - extrusion_brackets(true); + let($show_threads = true) + extrusion_brackets(true); diff --git a/tests/nuts.scad b/tests/nuts.scad index 82383fb..0db380a 100644 --- a/tests/nuts.scad +++ b/tests/nuts.scad @@ -52,6 +52,12 @@ module nuts() { if(n == M5_nut) sliding_t_nut(M5_sliding_t_nut); + + if(n == M6_nut) + sliding_t_nut(M6_sliding_t_nut); + + if(n == M8_nut) + sliding_t_nut(M8_sliding_ball_t_nut); } translate([0, 80]) { diff --git a/tests/png/extrusion_brackets.png b/tests/png/extrusion_brackets.png index 0246350..3f0fc38 100644 Binary files a/tests/png/extrusion_brackets.png and b/tests/png/extrusion_brackets.png differ diff --git a/tests/png/nuts.png b/tests/png/nuts.png index 93dc9b0..fc4a0c4 100644 Binary files a/tests/png/nuts.png and b/tests/png/nuts.png differ diff --git a/tests/png/pillow_blocks.png b/tests/png/pillow_blocks.png index d46132a..265abaf 100644 Binary files a/tests/png/pillow_blocks.png and b/tests/png/pillow_blocks.png differ diff --git a/tests/png/sk_brackets.png b/tests/png/sk_brackets.png index 20f8bd7..b3be3e7 100644 Binary files a/tests/png/sk_brackets.png and b/tests/png/sk_brackets.png differ diff --git a/vitamins/extrusion_bracket.scad b/vitamins/extrusion_bracket.scad index 15b238e..b16c406 100644 --- a/vitamins/extrusion_bracket.scad +++ b/vitamins/extrusion_bracket.scad @@ -20,44 +20,65 @@ //! Brackets for joining extrusions at a corner. include <../core.scad> +use -function extrusion_inner_corner_bracket_size(type) = type[1]; //! Size of inner bracket +function extrusion_inner_corner_bracket_size(type) = type[1]; //! Size of inner bracket +function extrusion_inner_corner_bracket_tnut(type) = type[2]; //! The sliding t-nut it is based on +function extrusion_inner_corner_bracket_extrusion(type) = type[3]; //! Default extrusion this bracket is for +function extrusion_inner_corner_bracket_screw_offsets(type) = type[4]; //! Screw offsets from the ends -module extrusion_inner_corner_bracket(type, grub_screws = true) { //! Inner corner bracket for extrusion - vitamin(str("extrusion_inner_corner_bracket(", type[0], ", ", grub_screws, "): Extrusion inner corner bracket ", type[1].z)); +module extrusion_inner_corner_bracket(type, grub_screws = true, backwards = false) { //! Inner corner bracket for extrusion + extrusion = extrusion_inner_corner_bracket_extrusion(type); + vitamin(str("extrusion_inner_corner_bracket(", type[0], "): Extrusion inner corner bracket for ", extrusion[0])); size = extrusion_inner_corner_bracket_size(type); - armLength = size.x; + tnut = extrusion_inner_corner_bracket_tnut(type); + screw_offsets = extrusion_inner_corner_bracket_screw_offsets(type); bottomTabOffset = 4; topTabOffset = 10; - sizeBottom = [armLength - bottomTabOffset, 6, size.z]; - sizeTop = [armLength - topTabOffset, 6, size.z]; - tabSizeY1 = 10; - tabSizeY2 = 6; - tabSizeZ = 3.25; - holeRadius = M4_tap_radius; + sizeBottom = [size.y - bottomTabOffset, nut_square_width(tnut), size.z]; + sizeTop = [size.x - topTabOffset, nut_square_width(tnut), size.z]; + tab = t_nut_tab(tnut); + tabSizeZ = nut_thickness(tnut); + screw = find_screw(hs_grub, nut_size(tnut)); + holeRadius = screw_pilot_hole(screw); + depth = (extrusion_width(extrusion) - extrusion_center_square(extrusion)) / 2; - translate([-size.z - 0.75, -size.z - 0.75, 0]) + offset = extrusion_tab_thickness(extrusion) + tabSizeZ; + offset2 = extrusion_tab_thickness(extrusion) - nut_thickness(tnut, true) + nut_thickness(tnut); + translate([backwards ? offset2 : -offset, -offset]) rotate([-90, 0, 0]) { color("silver") { - translate([(armLength + bottomTabOffset) / 2, 0, tabSizeZ]) + translate([(size.y + bottomTabOffset) / 2, 0, tabSizeZ]) rotate([0, 180, 0]) - extrusionSlidingNut(sizeBottom, tabSizeY1, tabSizeY2, tabSizeZ, holeRadius, (bottomTabOffset - armLength) / 2 + 5); - translate([tabSizeZ, 0, (armLength + topTabOffset) / 2]) + extrusionSlidingNut(sizeBottom, tab[0], tab[1], tabSizeZ, holeRadius, (bottomTabOffset - size.y) / 2 + screw_offsets.y); + + translate([tabSizeZ, 0, (size.x + topTabOffset) / 2]) rotate([0, -90, 0]) - extrusionSlidingNut(sizeTop, tabSizeY1, tabSizeY2, tabSizeZ, holeRadius,-(topTabOffset - armLength) / 2 - 5); - translate([0, -size.z / 2, 0]) { - cube([bottomTabOffset, size.z, size.z]); - cube([size.z, size.z, topTabOffset]); + extrusionSlidingNut(sizeTop, tab[0], tab[0], tabSizeZ, holeRadius, -(topTabOffset - size.x) / 2 - screw_offsets.x); + + translate([0, -tab[1] / 2]) { + cube([bottomTabOffset, tab[1], size.z]); + cube([size.z, tab[1], topTabOffset]); } } if(grub_screws) not_on_bom() no_explode() { - grubScrewLength = 6; - for(angle = [[0, 0, 0], [0, -90, 180]]) - rotate(angle) - translate([armLength - 5, 0, size.z]) - screw(M3_grub_screw, grubScrewLength); + screw_len = screw_shorter_than(depth); + gap = depth - screw_len; + screw_z = offset - gap; + + rotate([0, -90, 180]) + if(backwards) + translate([size.x - screw_offsets.x, 0, -offset2 + gap]) + vflip() + screw(screw, screw_len); + else + translate([size.x - screw_offsets.x, 0, screw_z]) + screw(screw, screw_len); + + translate([size.y - screw_offsets.y, 0, screw_z]) + screw(screw, screw_len); } } } @@ -66,24 +87,29 @@ function extrusion_corner_bracket_size(type) = type[1]; //! Size of function extrusion_corner_bracket_base_thickness(type) = type[2]; //! Thickness of base of bracket function extrusion_corner_bracket_side_thickness(type) = type[3]; //! Thickness of side of bracket function extrusion_corner_bracket_hole_offset(type) = type[4]; //! Hole offset from corner +function extrusion_corner_bracket_tnut(type) = type[5]; //! The sliding t-nut to use in the assembly +function extrusion_corner_bracket_extrusion(type) = type[6]; //! Default extrusion this bracket is for module extrusion_corner_bracket(type) { //! Corner bracket for extrusion - vitamin(str("extrusion_corner_bracket(", type[0], "): Extrusion corner bracket ", type[1].z)); + vitamin(str("extrusion_corner_bracket(", type[0], "): Extrusion corner bracket ", type[1].z, "mm for ", extrusion_corner_bracket_extrusion(type)[0])); eSize = extrusion_corner_bracket_size(type).z; cbSize = extrusion_corner_bracket_size(type).x; baseThickness = extrusion_corner_bracket_base_thickness(type); + hole_r = screw_clearance_radius(find_screw(hs_cap, nut_size(extrusion_corner_bracket_tnut(type)))); module base() { linear_extrude(baseThickness) difference() { - translate([0, -eSize / 2, 0]) + translate([0, -eSize / 2]) square([cbSize, eSize]); + hull() { - translate([extrusion_corner_bracket_hole_offset(type) + 1.5, 0, 0]) - circle(r = M5_clearance_radius); - translate([extrusion_corner_bracket_hole_offset(type) - 1.5, 0, 0]) - circle(r = M5_clearance_radius); + translate([extrusion_corner_bracket_hole_offset(type) + 1.5, 0]) + circle(hole_r); + + translate([extrusion_corner_bracket_hole_offset(type) - 1.5, 0]) + circle(hole_r); } } } @@ -91,9 +117,11 @@ module extrusion_corner_bracket(type) { //! Corner bracket for extrusion color("silver") { rotate([90, 0, 90]) base(); - translate([0, baseThickness, 0]) + + translate([0, baseThickness]) rotate([90, 0, 0]) base(); + sideThickness = extrusion_corner_bracket_side_thickness(type); for(z = [-eSize / 2, eSize / 2 - sideThickness]) { translate_z(z) { @@ -112,25 +140,31 @@ module extrusion_corner_bracket_hole_positions(type) { //! Place children at hol children(); } -module extrusion_corner_bracket_assembly(type, part_thickness = 2, screw_type = M4_cap_screw, nut_type = M4_sliding_t_nut, max_screw_depth = 6) { //! Assembly with fasteners in place +module extrusion_corner_bracket_assembly(type, part_thickness = undef, screw_type = undef, nut_type = undef, max_screw_depth = undef) { //! Assembly with fasteners in place extrusion_corner_bracket(type); + extrusion = extrusion_corner_bracket_extrusion(type); - screw_washer_thickness = washer_thickness(screw_washer(screw_type)); - nut_washer_type = nut_washer(nut_type); + nut = is_undef(nut_type) ? extrusion_corner_bracket_tnut(type) : nut_type; + screw = is_undef(screw_type) ? find_screw(hs_cap, nut_size(nut)) : screw_type; + thickness = is_undef(part_thickness) ? extrusion_tab_thickness(extrusion) : part_thickness; + depth = is_undef(max_screw_depth) ? (extrusion_width(extrusion) - extrusion_center_square(extrusion)) / 2 - eps : max_screw_depth; + + screw_washer_thickness = washer_thickness(screw_washer(screw)); + nut_washer_type = nut_washer(nut); nut_washer_thickness = nut_washer_type ? washer_thickness(nut_washer_type) : 0; - nut_offset = extrusion_corner_bracket_base_thickness(type) + part_thickness; - screw_length = max_screw_depth ? screw_shorter_than(extrusion_corner_bracket_base_thickness(type) + screw_washer_thickness + max_screw_depth) - : screw_longer_than(nut_offset + screw_washer_thickness + nut_washer_thickness + nut_thickness(nut_type)); + nut_offset = extrusion_corner_bracket_base_thickness(type) + thickness; + screw_length = depth ? screw_shorter_than(extrusion_corner_bracket_base_thickness(type) + screw_washer_thickness + depth) + : screw_longer_than(nut_offset + screw_washer_thickness + nut_washer_thickness + nut_thickness(nut)); extrusion_corner_bracket_hole_positions(type) { - screw_and_washer(screw_type, screw_length); + screw_and_washer(screw, screw_length); translate_z(-nut_offset) vflip() if(nut_washer_type) - nut_and_washer(nut_type); + nut_and_washer(nut); else rotate(90) - sliding_t_nut(nut_type); + sliding_t_nut(nut); } } diff --git a/vitamins/extrusion_brackets.scad b/vitamins/extrusion_brackets.scad index 2c063f0..bcef982 100644 --- a/vitamins/extrusion_brackets.scad +++ b/vitamins/extrusion_brackets.scad @@ -20,10 +20,11 @@ // Extrusion brackets // -E20_inner_corner_bracket = [ "E20_inner_corner_bracket", [25, 25, 4.5] ]; +E20_inner_corner_bracket = [ "E20_inner_corner_bracket", [26, 25, 4.7], M4_sliding_t_nut, E2020, [7, 6]]; +E40_inner_corner_bracket = [ "E40_inner_corner_bracket", [38, 31, 8.5], M6_sliding_t_nut, E4040, [13, 10]]; -E20_corner_bracket = [ "E20_corner_bracket", [28, 28, 20], 2, 3, 19.5]; +E20_corner_bracket = [ "E20_corner_bracket", [28, 28, 20], 2, 3, 19.5, M4_sliding_t_nut, E2020]; +E40_corner_bracket = [ "E40_corner_bracket", [40, 40, 35], 2, 3, 19.5, M8_sliding_ball_t_nut, E4040]; use - diff --git a/vitamins/nut.scad b/vitamins/nut.scad index 28a378b..198cad0 100644 --- a/vitamins/nut.scad +++ b/vitamins/nut.scad @@ -137,18 +137,60 @@ module wingnut(type) { //! Draw a wingnut } } +function t_nut_tab(type) = [type[8], type[9]]; //! Sliding t-nut T dimensions + +module sliding_ball_t_nut(size, w, h, r) { + rad = 0.5; + stem = size.z - h; + ball_d = 4; + + module shape() + rotate([90, 0, 90]) + translate_z(r) + linear_extrude(size.x, center = true) { + hull() { + translate([0, h - size.y / 2]) + semi_circle(d = size.y); + + for(side = [-1, 1]) + translate([side * (w / 2 - rad), rad]) + circle(rad); + } + rounded_square([size.y, stem * 2], rad / 2, true); + } + + render() difference() { + shape(); + + cylinder(r = r, h = 100, center = true); + } + + translate([size.x / 2 + r - ball_d, 0, h - 0.5]) + sphere(d = ball_d); + + if(show_threads) + render() intersection() { + translate_z(-stem) + female_metric_thread(2 * r, metric_coarse_pitch(2 * r), size.z - 2, center = false); + + shape(); + } +} + module sliding_t_nut(type) { hammerNut = type[10]; - vitamin(str("sliding_t_nut(", type[0], "): Nut M", nut_size(type), hammerNut ? " hammer" : " sliding T")); - - size = [type[7], type[2], nut_thickness(type, true)]; - tabSizeY1 = type[8]; - tabSizeY2 = type[9]; + size = [type[7], nut_square_width(type), nut_thickness(type, true)]; + tab = t_nut_tab(type); tabSizeZ = nut_thickness(type); holeRadius = nut_size(type) / 2; + vitamin(str("sliding_t_nut(", type[0], "): Nut M", nut_size(type), hammerNut ? " hammer" : " sliding T", !tab[1] ? " with spring loaded ball" : "")); + color(grey(80)) - extrusionSlidingNut(size, tabSizeY1, tabSizeY2, tabSizeZ, holeRadius, 0, hammerNut); + if(!tab[1]) + sliding_ball_t_nut(size, tab[0], tabSizeZ, holeRadius); + else + extrusionSlidingNut(size, tab[0], tab[1], tabSizeZ, holeRadius, 0, hammerNut); } module extrusionSlidingNut(size, tabSizeY1, tabSizeY2, tabSizeZ, holeRadius, holeOffset = 0, hammerNut = false) { @@ -171,7 +213,7 @@ module extrusionSlidingNut(size, tabSizeY1, tabSizeY2, tabSizeZ, holeRadius, hol } linear_extrude(tabSizeZ) difference() { - square([size.x, tabSizeY2], center = true); + square([size.x, tabSizeY1 == tabSizeY2 ? size.y : tabSizeY2], center = true); if(holeRadius) translate([holeOffset, 0]) circle(holeRadius); @@ -183,13 +225,25 @@ module extrusionSlidingNut(size, tabSizeY1, tabSizeY2, tabSizeZ, holeRadius, hol female_metric_thread(thread_d, metric_coarse_pitch(thread_d), size.z, center = false); // add the side tabs + tab_h = size.z - 2 * stem_h; + chamfer =tab_h / 4; for(m = [0, 1]) mirror([0, m, 0]) - translate([0, tabSizeY2 / 2]) { + if(tabSizeY1 == tabSizeY2) + translate([-size.x / 2, size.y / 2]) + hull() { + cube([size.x, (tabSizeY1 - size.y) / 2 - chamfer, tab_h]); + + translate_z(chamfer) + cube([size.x, (tabSizeY1 - size.y) / 2,tab_h - 2 * chamfer]); + } + + else { cubeZ = 1; - translate([-size.x / 2, 0]) + translate([-size.x / 2, tabSizeY2 / 2]) cube([size.x, (tabSizeY1 - tabSizeY2) / 2, cubeZ]); - translate_z(cubeZ) + + translate([0, tabSizeY2 / 2, cubeZ]) rotate([0, -90, 0]) right_triangle(tabSizeZ - cubeZ, (tabSizeY1 - tabSizeY2) / 2, size.x, center = true); } diff --git a/vitamins/nuts.scad b/vitamins/nuts.scad index 21f6d97..88ae6f1 100644 --- a/vitamins/nuts.scad +++ b/vitamins/nuts.scad @@ -52,8 +52,12 @@ toggle_nut = ["toggle_nut", 6.1, 9.2, 1.5, 1.5, M6_washer, 1.5, M4_wingnut = ["M4_wingnut", 4, 10, 3.75,8, M4_washer, 0, 22, 10, 6, 3]; // sx ty1 ty2 hammer M3_sliding_t_nut = ["M3_sliding_t_nut", 3, 6, 3.0, 4.0, false, 0, 10, 10, 6, false]; -M4_sliding_t_nut = ["M4_sliding_t_nut", 4, 6, 3.25,4.5, false, 0, 11, 10, 6, false]; -M5_sliding_t_nut = ["M5_sliding_t_nut", 5, 6, 3.25,4.5, false, 0, 11, 10, 7, false]; +M4_sliding_t_nut = ["M4_sliding_t_nut", 4, 6, 3.7, 4.7, false, 0, 11, 10, 6, false]; +M5_sliding_t_nut = ["M5_sliding_t_nut", 5, 6, 3.7, 4.7, false, 0, 11, 10, 7, false]; +M6_sliding_t_nut = ["M6_sliding_t_nut", 6, 8, 6.6, 8.5, false, 0, 16, 18.6,8,2, false]; +M8_sliding_ball_t_nut = ["M8_sliding_ball_t_nut", + 8, 9.5, 6.5, 7.5, false, 0, 22, 13, 0, false]; + M3_hammer_nut = ["M3_hammer_nut", 3, 6, 2.75,4.0, false, 0, 5.5, 10, 6, true]; M4_hammer_nut = ["M4_hammer_nut", 4, 6, 3.25,4.5, false, 0, 5.5, 10, 6, true];