281 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			OpenSCAD
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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]]);
 | |
| }
 | |
| 
 |