$fn = 50; width = 23; length = 119; height = 22; corner_radius = 2; wall_thickness = 2; post_diameter = 8; post_height = 0; hole_diameter = 3; lid_thickness = 1.9; lid_lip = 1 ; lid_tolerance = .25; hook_thickness = 0.75; hook_tolerance = .25; module posts(x, y, z, h, r){ translate([x, y, z]) cylinder(r = r, h = h); translate([-x, y, z]) cylinder(r = r, h = h); translate([-x, -y, z]) cylinder(r = r, h = h); translate([x, -y, z]) cylinder(r = r, h = h); } difference() { // box hull() { posts( x=(width/2 - corner_radius), y=(length/2 - corner_radius), z=0, h=height, r=corner_radius); } // hollow hull() { posts( x=(width/2 - corner_radius - wall_thickness), y=(length/2 - corner_radius - wall_thickness), z=wall_thickness, h=height, r=corner_radius); } // lip inside box hull() { posts( x=(width/2 - corner_radius - lid_lip), y=(length/2 - corner_radius - lid_lip), z=(height - lid_thickness), h=(lid_thickness + 1), r=corner_radius); } // ventilation slits left 1 for(i = [(wall_thickness+post_height+3):4:(height-5)]) { translate([(-width/2)-wall_thickness, (-length/2)+25, i]) cube([10, length/5, 2], center=true); } // ventilation slits left 2 for(i = [(wall_thickness+post_height+3):4:(height-5)]) { translate([(-width/2)-wall_thickness, (length/2)-25, i]) cube([10, length/5, 2], center=true); } // ventilation slits right 1 for(i = [(wall_thickness+post_height+3):4:(height-5)]) { translate([(width/2)-wall_thickness, (-length/2)+25, i]) cube([10, length/5, 2], center=true); } // ventilation slits right 2 for(i = [(wall_thickness+post_height+3):4:(height-5)]) { translate([(width/2)-wall_thickness, (length/2)-25, i]) cube([10, length/5, 2], center=true); } // network connector hole 1 translate([0, (length/2), wall_thickness+2+10]) cube([17, 6, 20], center=true); // network connector hole 2 translate([0, (-length/2), wall_thickness+2+10]) cube([17, 6, 20], center=true); // sensor hole translate([(width/2), -7, wall_thickness+2+6]) cube([5, 10, 7], center=true); translate([0, -9, -wall_thickness]) cylinder(r = 5.5/2, h = 6); // slits for hooks // upward facing side translate([-((width/2)-(wall_thickness/2)), length/8, (height-lid_thickness)+1]) cube([3, 6, hook_thickness+hook_tolerance], center=true); translate([-((width/2)-(wall_thickness/2)), -length/8, (height-lid_thickness)+1]) cube([3, 6, hook_thickness+hook_tolerance], center=true); // downward facing side translate([(width/2)-(wall_thickness/2), 0, (height-lid_thickness)+1]) cube([3, 6, hook_thickness+hook_tolerance], center=true); translate([(width/2)-(wall_thickness/2), length/4, (height-lid_thickness)+1]) cube([3, 6, hook_thickness+hook_tolerance], center=true); translate([(width/2)-(wall_thickness/2), -length/4, (height-lid_thickness)+1]) cube([3, 6, hook_thickness+hook_tolerance], center=true); } /* lid */ translate([0, 0, 40]) { difference() { union() { hull() { posts( x=(width/2 - corner_radius - lid_lip - lid_tolerance), y=(length/2 - corner_radius - lid_lip - lid_tolerance), z=0, h=lid_thickness+1.0, r=corner_radius); } // upward facing side translate([-((width/2)-lid_lip), length/8, 1]) cube([2, 5, hook_thickness], center=true); translate([-((width/2)-lid_lip), -length/8, 1]) cube([2, 5, hook_thickness], center=true); // downward facing side translate([(width/2)-lid_lip, 0, 1]) cube([2, 5, hook_thickness], center=true); translate([(width/2)-lid_lip, length/4, 1]) cube([2, 5, hook_thickness], center=true); translate([(width/2)-lid_lip, -length/4, 1]) cube([2, 5, hook_thickness], center=true); } // drilling holes translate([0, (length/8), -lid_thickness]) cylinder(r = hole_diameter, h = 6); translate([0, -(length/8), -lid_thickness]) cylinder(r = hole_diameter, h = 6); } } // support posts for pcb /*difference() { translate([0, length/4, wall_thickness]) cylinder(r = post_diameter/2, h = post_height); translate([0, length/4, wall_thickness]) cylinder(r = hole_diameter/2, h = post_height+3); } difference() { translate([0, -length/4, wall_thickness]) cylinder(r = post_diameter/2, h = post_height); translate([0, -length/4, wall_thickness]) cylinder(r = hole_diameter/2, h = post_height+3); } */