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 |

### 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];