// Enclosure Width (x) width=80; // Enclosure Length (y) length=80; // Enclosure Depth (z) depth=30; // Wall/Floor thickness wall=2; // Cover Screw Diameter (clearance) cover_screw_diameter=4; // Heat-press insert height insert_height=5; // Heat-press insert diameter insert_diameter=5; // Diameter of binding posts pole_clearance=4.5; // Generate cover model include_cover = true; // Choose a radius that ensures adequate wall thickness radius = max(insert_diameter, cover_screw_diameter) / 2 + wall; $fn=32; enclosure( width = width, length = length, depth = depth, wall = wall, cover_screw_diameter = cover_screw_diameter, insert_height = insert_height, insert_diameter = insert_diameter, pole_clearance = pole_clearance ); if (include_cover == true) { translate([width+10, 0, 0]) enclosure_cover( width = width, length = length, thickness = wall, radius = radius ); } module enclosure_cover( width, length, thickness, radius, screw_diameter=3.5, ) { difference() { radiused_box(width, length, thickness, radius); for (i = [[0, 0], [1, 0], [0, 1], [1, 1]]) { translate([ radius + (i[0]*(width - 2*radius)), radius + (i[1]*(length - 2*radius)), 0 ]) cylinder(r=screw_diameter/2, h=thickness+1); } } } module enclosure(width, length, depth, wall = 3, cover_screw_diameter = 3, // diameter of corner screws (clearance) insert_height = 0, // height of heat-press insert insert_diameter = 0, // diameter of heat-press insert pole_clearance = 4.5 // diameter binding posts for each pole ) { radius = max(insert_diameter, cover_screw_diameter) / 2 + wall; // Top translate([radius, length, 0]) hanging_tab( width = width-(2*radius), length = 15, diameter = 8, thickness = wall*3 ); difference() { radiused_box(width, length, depth, radius); translate([wall, wall, wall]) radiused_box( width = width-2*wall, length = length-2*wall, depth = depth, radius = radius-wall ); // SO-239 mount, centered on front translate([width/2, wall+1, (depth-wall)/2+wall]) rotate([90, 0, 0]) so_239_mount(height=wall+2); // Binding posts translate([-1, (2*length)/3, depth/2]) rotate([0, 90, 0]) cylinder(r=pole_clearance/2, h=width+2); } // screw bosses in each corner for (i = [[0, 0], [1, 0], [0, 1], [1, 1]]) { translate([ radius + (i[0]*(width - 2*radius)), radius + (i[1]*(length - 2*radius)), 0 ]) screw_boss( radius, depth, inner_diameter = cover_screw_diameter, depth = depth-wall, // not a blind hole, leave a floor thickness counterbore_depth = insert_height, counterbore_diameter = insert_diameter ); } } module hanging_tab( width = 50, diameter = 5, length = 10, thickness = 5 ) { difference() { union() { translate([length, 0, 0]) cube([width-(2*length), length, thickness]); cube([width, length/2, thickness]); translate([length, length/2, 0]) cylinder(r=length/2, h=thickness); translate([width-length, length/2, 0]) cylinder(r=length/2, h=thickness); } // Round the edges, add a fillet translate([0, length/2, -1]) cylinder(r=length/2, h=thickness+2); translate([width, length/2, -1]) cylinder(r=length/2, h=thickness+2); // Slot translate([length, length/2, -1]) cylinder(r=diameter/2, h=thickness+2); translate([width-length, length/2, -1]) cylinder(r=diameter/2, h=thickness+2); translate([length, (length-diameter)/2, -1]) cube([width-(2*length), diameter, thickness+2]); } } /** * Describes clearance holes for a SO-239 connector */ module so_239_mount( center_diameter = 16, bolt_spacing = 18, bolt_diameter = 3.5, height = 10 ) { cylinder(r=center_diameter/2, h=height); for (i = [[-1, 1], [-1, -1], [1, 1], [1, -1]]) { translate([i[0]*bolt_spacing/2, i[1]*bolt_spacing/2, 0]) cylinder(r=bolt_diameter/2, h=height); } } /** * Describes a cylinder with a center bore for accepting a screw, * and a counterbore for a heat-press insert */ module screw_boss( radius, height, inner_diameter, depth, counterbore_depth=0, counterbore_diameter=0 ) { difference() { cylinder(r=radius, h=height); translate([0, 0, height-depth]) cylinder(r=inner_diameter/2, h=height+depth); translate([0, 0, height - counterbore_depth]) cylinder(r=counterbore_diameter/2, h=counterbore_depth+1); } } module radiused_box(width, length, depth, radius=0) { translate([0, radius, 0]) cube([width, length-2*radius, depth]); translate([radius, 0, 0]) cube([width-2*radius, length, depth]); translate([radius, radius, 0]) cylinder(r=radius, h=depth); translate([width-radius, radius, 0]) cylinder(r=radius, h=depth); translate([radius, length-radius, 0]) cylinder(r=radius, h=depth); translate([width-radius, length-radius, 0]) cylinder(r=radius, h=depth); }