From bf1a34b4496c244211c3fadeeeb220df9e85a0a2 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Sat, 20 Dec 2025 14:30:51 +0100 Subject: [PATCH] n28: minor redesigning of the enclosure --- avr/devices/n28/enclosure.scad | 250 +++++++++++++++++++-------------- 1 file changed, 143 insertions(+), 107 deletions(-) diff --git a/avr/devices/n28/enclosure.scad b/avr/devices/n28/enclosure.scad index 8b5ea8b..77ffaeb 100644 --- a/avr/devices/n28/enclosure.scad +++ b/avr/devices/n28/enclosure.scad @@ -2,21 +2,24 @@ $fn = 50; width = 23; length = 119; -height = 22; +height = 21; corner_radius = 2; -wall_thickness = 2; +wall_thickness = 1.5; post_diameter = 8; post_height = 0; hole_diameter = 3; lid_thickness = 1.9; lid_lip = 1 ; -lid_tolerance = .25; +lid_tolerance = .3; -hook_thickness = 0.75; +lid_height = 4; + +hook_height = 1; hook_tolerance = .25; +airslit_height = 1.75; module posts(x, y, z, h, r){ @@ -34,129 +37,162 @@ module posts(x, y, z, h, r){ } -difference() { - // box - hull() { - posts( - x=(width/2 - corner_radius), - y=(length/2 - corner_radius), - z=0, - h=height, - r=corner_radius); - } +union() { + 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):(airslit_height*2):(height-5)]) { + translate([(-width/2)-wall_thickness, (-length/2)+25, i]) + cube([10, length/5, airslit_height], center=true); + } + + // ventilation slits left 2 + for(i = [(wall_thickness+post_height+3):(airslit_height*2):(height-5)]) { + translate([(-width/2)-wall_thickness, (length/2)-25, i]) + cube([10, length/5, airslit_height], center=true); + } + + // ventilation slits right 1 + for(i = [(wall_thickness+post_height+3):(airslit_height*2):(height-5)]) { + translate([(width/2)-wall_thickness, (-length/2)+25, i]) + cube([10, length/5, 1.75], center=true); + } + + // ventilation slits right 2 + for(i = [(wall_thickness+post_height+3):(airslit_height*2):(height-5)]) { + translate([(width/2)-wall_thickness, (length/2)-25, i]) + cube([10, length/5, airslit_height], 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); - // 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); - } + // hooks upward facing side + translate([-(width/2)-0.25, length/8, height-(hook_height/2)]) + cube([2.5, 7, hook_height], center=true); + translate([-(width/2)-0.25, -length/8, height-(hook_height/2)]) + cube([2.5, 7, hook_height], center=true); - // 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); + // hooks downward facing side + translate([(width/2)+0.25, 0, height-(hook_height/2)]) + cube([2.5, 7, hook_height], center=true); + translate([(width/2)+0.25, length/4, height-(hook_height/2)]) + cube([2.5, 7, hook_height], center=true); + translate([(width/2)+0.25, -length/4, height-(hook_height/2)]) + cube([2.5, 7, hook_height], center=true); } + /* lid */ -translate([0, 0, 40]) { +translate([0, 0, 40]) { /* match at Z=17*/ 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); + difference() { + hull() { + posts( + x=(width/2 - corner_radius + wall_thickness + lid_tolerance), + y=(length/2 - corner_radius + lid_tolerance), + z=0, + h=lid_height+wall_thickness, + r=corner_radius); + } + + hull() { + posts( + x=(width/2 - corner_radius ), + y=(length/2 - corner_radius)+5, + z=-(wall_thickness), + h=lid_height+wall_thickness, + r=corner_radius); + } + + // slits for hooks (upward facing side) + translate([-((width/2)+wall_thickness/2), + length/8, + lid_height-((hook_height+hook_tolerance)/2)]) + cube([4, 9, hook_height+hook_tolerance], center=true); + translate([-((width/2)+wall_thickness/2), + -length/8, + lid_height-((hook_height+hook_tolerance)/2)]) + cube([4, 9, hook_height+hook_tolerance], center=true); + + // slits for hooks (downward facing side) + translate([(width/2)+(wall_thickness/2), + 0, + lid_height-((hook_height+hook_tolerance)/2)]) + cube([4, 9, hook_height+hook_tolerance], center=true); + translate([(width/2)+(wall_thickness/2), + length/4, + lid_height-((hook_height+hook_tolerance)/2)]) + cube([4, 9, hook_height+hook_tolerance], center=true); + translate([(width/2)+(wall_thickness/2), + -(length/4), + lid_height-((hook_height+hook_tolerance)/2)]) + cube([4, 9, hook_height+hook_tolerance], center=true); + } - // upward facing side - translate([-((width/2)-lid_lip), length/8, 1]) + + // hooks downward facing side + *translate([(width/2)-lid_lip, 0, 1]) cube([2, 5, hook_thickness], center=true); - translate([-((width/2)-lid_lip), -length/8, 1]) + *translate([(width/2)-lid_lip, length/4, 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]) + *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/4), -wall_thickness]) + cylinder(r = hole_diameter, h = 10); - translate([0, -(length/8), -lid_thickness]) - cylinder(r = hole_diameter, h = 6); + translate([0, -(length/4), -wall_thickness]) + cylinder(r = hole_diameter, h = 10); } }