git.haldean.org h1a / 7ae3e8f
new design for guide that's 3D printable and more tolerant of tube size variation haldean 11 months ago
3 changed file(s) with 25 addition(s) and 31 deletion(s). Raw diff Collapse all Expand all
00 include <dims.scad>
1
2 module diag(h) {
3 d = sqrt(2 * itid * itid)/2;
4 wt = 1.8;
5 linear_extrude(height=h, center=false, scale=(itid-1)/itid)
6 polygon([[-d, 0], [-d+wt, wt], [d-wt, wt],
7 [d, 0], [d-wt, -wt], [-d+wt, -wt]]);
8 }
19
210 module cap() {
311 difference() {
412 union() {
513 translate([0, 0, cap_height-eps])
6 cylinder(h=cap_depth + eps, r1=otid / 2, r2=(otid - 2) / 2);
14 cylinder(h=cap_depth + eps, r1=otid / 2, r2=(otid - 2) / 2);
715 cylinder(h=cap_height, r=otod / 2);
816 }
917 translate([0, 0, cap_height])
1018 cylinder(h=cap_depth+eps, r=otid / 2 - wall_thickness);
1119 }
1220
13 module diag() {
14 d = sqrt(2 * itid * itid)/2;
15 wt = 1.5;
16 linear_extrude(height=cap_height+cross_depth, center=false, scale=(itid-1)/itid)
17 polygon([[-d, 0], [-d+wt, wt], [d-wt, wt],
18 [d, 0], [d-wt, -wt], [-d+wt, -wt]]);
19 }
20
2121 union() {
22 rotate([0,0,45]) diag();
23 rotate([0,0,-45]) diag();
22 rotate([0,0,45]) diag(cap_height+cross_depth);
23 rotate([0,0,-45]) diag(cap_height+cross_depth);
2424 }
2525 }
2626
27 cap();
27 cap();
1212 cross_depth = 10;
1313 wall_thickness = 4;
1414
15 channel_w = 20;
15 channel_w = 18;
1616
17 eps = 0.01;
17 eps = 0.01;
00 include <dims.scad>
1 use <cap.scad>
12
23 brace_w = 10;
34 brace_h = 4;
45
56 module brace() {
6 translate([-otid/2, -brace_w/2, cap_depth - brace_h])
7 translate([-otid/2, -brace_w/2, -cap_height])
78 cube([otid, brace_w, brace_h]);
89 }
910
1112 union() {
1213 difference() {
1314 union() {
14 cylinder(h=cap_depth, r=otid/2);
15 cylinder(h=cap_depth, r1=otid / 2, r2=(otid - 2) / 2);
1516 translate([0, 0, -cap_height])
1617 cylinder(h=cap_height, r=otod/2);
1718 }
1819 translate([0, 0, -cap_height-eps]) {
1920 cylinder(h=cap_height+cap_depth+2*eps,
2021 r=otid/2-wall_thickness);
21 translate([-channel_w/2, 0, 0])
22 cube([channel_w, otod/2+eps, cap_height+3*eps]);
22 rotate([90, 0, 0])
23 cylinder(h = otod/2 + eps, r = channel_w/2);
2324 }
2425 }
2526 intersection() {
26 difference() {
27 union() {
28 rotate([0, 0, 45]) brace();
29 rotate([0, 0, -45]) brace();
30 translate([-itod/2, -itod/2, -wall_thickness])
31 linear_extrude(height=cap_depth+wall_thickness)
32 offset(wall_thickness)
33 square([itod, itod]);
27 union() {
28 rotate([0, 0, 45]) brace();
29 rotate([0, 0, -45]) brace();
30 translate([0, 0, -cap_height]) {
31 rotate([0, 0, 45]) diag(cap_height + cap_depth);
32 rotate([0, 0, -45]) diag(cap_height + cap_depth);
3433 }
35 translate([0, 0, -eps])
36 linear_extrude(height=cap_depth + 2 * eps)
37 translate([-itod/2+itcr, -itod/2+itcr])
38 offset(itcr)
39 square([itod-2*itcr, itod-2*itcr]);
4034 }
4135 translate([0, 0, -cap_height])
4236 cylinder(h=cap_depth+cap_height, r=otid/2 - wall_thickness / 2);