Files
parametric_brackets/parametric_bracket.scad
2020-08-22 19:20:28 -07:00

281 lines
5.7 KiB
OpenSCAD
Executable File

// parametric extrusion brackets
// Scott Alfter
// 20 July 2018
// settings
nominal_extrusion_width=20;
screw_diameter=5;
gap=0.4; // adjust for a snug fit
thickness=2.8;
// uncomment one of the following to render
//corner_bracket();
//t_bracket();
//double_t_bracket();
//hc300_z_carriage_t_bracket(); // Hypercube 300 Z-carriage T-bracket
//alignment_sleeve(105, "Bot"); // for Hypercube 300 assembly, bottom of vertical extrusions
//alignment_sleeve(140, "Top"); // for Hypercube 300 assembly, top of vertical extrusions
//alignment_clip(78.75, ""); // for Hypercube 300 assembly, set gap for forward Z-axis rod clips
//alignment_sleeve(60, ""); // for test fit
switch_bracket();
// other constants needed later
tw=(nominal_extrusion_width+gap+2*thickness); // total width
iw=(nominal_extrusion_width+gap+thickness)/2; // dimension from center of cube to center of hole
sleeve_gap=gap+.2; // looser fit for alignment sleeves
// top-level modules
module switch_bracket()
{
brace();
translate([0,0,-iw])
panel();
translate([-iw,0,0])
rotate([00,90,0])
difference()
{
panel();
translate([0,0,-thickness/2])
cylinder(d=6.25, h=thickness, $fn=30);
}
translate([-iw,0,-2*iw])
rotate([00,90,0])
panel();
}
module hc300_z_carriage_t_bracket()
{
intersection()
{
translate([nominal_extrusion_width-2*thickness+gap,0,0])
cube([2*nominal_extrusion_width+3*thickness+2*gap, nominal_extrusion_width+2*thickness+gap, 3*nominal_extrusion_width+6*thickness+3*gap-2*1.85], center=true);
t_bracket();
}
}
module corner_bracket()
{
corner();
translate([0,tw,0])
tube();
translate([tw,0,0])
rotate([0,0,90])
tube();
translate([0,0,tw])
rotate([90,0,0])
tube();
translate([tw,0,tw])
brace();
translate([0,tw,tw])
rotate([0,0,90])
brace();
translate([tw,tw,0])
rotate([-90,0,0])
brace();
}
module t_bracket()
{
t();
translate([0,0,tw])
rotate([90,0,0])
tube();
translate([0,0,-tw])
rotate([90,0,0])
tube();
translate([tw,0,0])
rotate([0,0,90])
tube();
translate([tw,0,tw])
brace();
translate([tw,0,-tw])
rotate([180,0,0])
brace();
}
module double_t_bracket()
{
dt();
translate([0,0,tw])
rotate([90,0,0])
tube();
translate([0,0,-tw])
rotate([90,0,0])
tube();
translate([tw,0,0])
rotate([0,0,90])
tube();
translate([0,tw,0])
tube();
translate([tw,0,tw])
brace();
translate([tw,0,-tw])
rotate([180,0,0])
brace();
translate([0,tw,tw])
rotate([0,0,90])
brace();
translate([0,tw,-tw])
rotate([180,0,90])
brace();
translate([tw,tw,0])
rotate([-90,0,0])
brace();
}
module alignment_sleeve(length, label)
{
// frame tools:
// 140 mm at top
// 105 mm at bottom
linear_extrude(length+nominal_extrusion_width/2-3/2*tw)
difference()
{
square(nominal_extrusion_width+2*sleeve_gap+2*thickness, true);
square(nominal_extrusion_width+2*sleeve_gap, true);
}
translate([0,-iw-thickness/2,10])
rotate([90,0,0])
linear_extrude(1)
text(label, halign="center", valign="center", size=nominal_extrusion_width/2);
}
module alignment_clip(length, label)
{
// frame tools:
// 78.75 mm from front of frame to front of forward Z-axis rod clips
linear_extrude(length-tw-nominal_extrusion_width-thickness-gap)
difference()
{
square(nominal_extrusion_width+2*sleeve_gap+2*thickness, true);
square(nominal_extrusion_width+2*sleeve_gap, true);
translate([thickness,0,0])
square(nominal_extrusion_width+2*sleeve_gap, true);
}
translate([0,-iw-thickness/2,10])
rotate([90,0,0])
linear_extrude(1)
text(label, halign="center", valign="center", size=nominal_extrusion_width/2);
}
module brace() // a pair of braces
{
d=tw/2-4;
translate([0,-d,0])
brace_sub();
translate([0,d,0])
brace_sub();
}
module tube() // four panels to make a tube
{
translate([0,0,-iw])
panel();
translate([0,0,iw])
panel();
translate([-iw,0,0])
rotate([0,90,0])
panel();
translate([iw,0,0])
rotate([0,90,0])
panel();
}
module corner() // three panels and three edges in a corner
{
translate([0,iw,iw])
edge();
translate([iw,0,iw])
rotate([0,0,90])
edge();
translate([iw,iw,0])
rotate([0,90,0])
edge();
translate([0,0,-iw])
panel();
translate([0,-iw,0])
rotate([90,0,0])
panel();
translate([-iw,0,0])
rotate([0,90,0])
panel();
}
module t() // three panels and two edges in a T
{
translate([iw,0,iw])
rotate([0,0,90])
edge();
translate([iw,0,-iw])
rotate([0,0,90])
edge();
translate([0,-iw,0])
rotate([90,0,0])
panel();
translate([0,iw,0])
rotate([90,0,0])
panel();
translate([-iw,0,0])
rotate([0,90,0])
panel();
}
module dt() // two panels and four edges in a double-T
{
translate([0,iw,iw])
edge();
translate([0,iw,-iw])
edge();
translate([iw,0,iw])
rotate([0,0,90])
edge();
translate([iw,0,-iw])
rotate([0,0,90])
edge();
translate([0,-iw,0])
rotate([90,0,0])
panel();
translate([-iw,0,0])
rotate([0,90,0])
panel();
}
// basic components
module panel() // basic unit: a square plate with a hole, centered on the origin
{
d=tw/2;
translate([0,0,-thickness/2])
linear_extrude(thickness, convexity=10)
difference()
{
polygon([[-d,-d],[-d,d],[d,d],[d,-d]]);
circle(d=screw_diameter+gap, $fn=45);
}
}
module edge() // a stick to fill in the corners where panels meet
{
d1=tw/2;
d2=thickness/2;
translate([0,0,-d2])
linear_extrude(thickness, convexity=10)
polygon([[-d1,-d2],[d1,-d2],[d1,d2],[-d1,d2]]);
}
module brace_sub() // a diagonal brace
{
d=tw/2;
translate([0,thickness/2,0])
rotate([90,0,0])
linear_extrude(thickness, convexity=10)
polygon([[-d,-d],[d-3,-d],[-d,d-3]]);
}