Last active
September 13, 2019 01:12
-
-
Save jstanley0/4f6d230def61d295f0c86d859c6cc442 to your computer and use it in GitHub Desktop.
Parametric project box
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
inside_width=57; | |
inside_length=48; | |
inside_height=27; | |
wall_thickness=1.5; | |
floor_thickness=1; | |
overlap_thickness=1.5; | |
overlap_delta=0.25; | |
pcb_level=16; | |
pcb_thickness=1.6; | |
screw_sep_x=35; | |
screw_sep_y=37; | |
screw_int_r=2.5; | |
screw_ext_r=4; | |
screw_depth=4; | |
screw_ledge_depth=0.5; | |
screw_ledge_r=3; | |
spacer_int_r=2; | |
spacer_ext_r=3; | |
// S: ok, things are starting to get very project-specific now | |
board_width=45; | |
board_height=45; | |
screen_offset_x=3; | |
screen_width=10; | |
screen_height=25.4; | |
button_offset_x=25.5; | |
button_offset_y=5.5; | |
button_offset_z=5; | |
bh=inside_height-pcb_level-button_offset_z; | |
button_int_r_min=2.0; | |
button_int_r_max=3.4; | |
button_ext_r_min=2.6; | |
button_ext_r_max=4.0; | |
button_sup_r=5.5; | |
module screw() | |
{ | |
difference() | |
{ | |
cylinder(pcb_level, screw_ext_r, screw_ext_r, $fn=32); | |
translate([0, 0, pcb_level - screw_depth - screw_ledge_depth]) | |
cylinder(screw_depth, screw_int_r, screw_int_r, $fn=24); | |
translate([0, 0, pcb_level - screw_ledge_depth]) | |
cylinder(screw_ledge_depth, screw_ledge_r, screw_ledge_r, $fn=24); | |
} | |
} | |
module box() | |
{ | |
// coordinate space puts (0, 0, 0) just inside the box | |
difference() | |
{ | |
translate([-wall_thickness, -wall_thickness, -floor_thickness]) | |
{ | |
cube([inside_width + wall_thickness*2, | |
inside_length + wall_thickness*2, | |
inside_height + floor_thickness]); | |
} | |
cube([inside_width, inside_length, inside_height]); | |
} | |
translate([inside_width/2 - screw_sep_x/2, inside_length/2 - screw_sep_y/2, 0]) | |
screw(); | |
translate([inside_width/2 - screw_sep_x/2, inside_length/2 + screw_sep_y/2, 0]) | |
screw(); | |
translate([inside_width/2 + screw_sep_x/2, inside_length/2 - screw_sep_y/2, 0]) | |
screw(); | |
translate([inside_width/2 + screw_sep_x/2, inside_length/2 + screw_sep_y/2, 0]) | |
screw(); | |
} | |
module lid() | |
{ | |
difference() | |
{ | |
union() | |
{ | |
// top | |
translate([-wall_thickness, -wall_thickness, -floor_thickness]) | |
{ | |
cube([inside_width + wall_thickness*2, | |
inside_length + wall_thickness*2, | |
floor_thickness]); | |
} | |
// lip | |
translate([overlap_delta, overlap_delta, 0]) | |
{ | |
difference() | |
{ | |
cube([inside_width - overlap_delta*2, | |
inside_length - overlap_delta*2, | |
overlap_thickness]); | |
translate([wall_thickness, wall_thickness, 0]) | |
{ | |
cube([inside_width - overlap_delta*2 - wall_thickness*2, | |
inside_length - overlap_delta*2 - wall_thickness*2, | |
overlap_thickness]); | |
} | |
} | |
} | |
// spacer ext | |
h = inside_height - pcb_level - pcb_thickness; | |
translate([inside_width/2 - screw_sep_x/2, inside_length/2 - screw_sep_y/2, 0]) | |
cylinder(h, spacer_ext_r, spacer_ext_r, $fn=32); | |
translate([inside_width/2 - screw_sep_x/2, inside_length/2 + screw_sep_y/2, 0]) | |
cylinder(h, spacer_ext_r, spacer_ext_r, $fn=32); | |
translate([inside_width/2 + screw_sep_x/2, inside_length/2 - screw_sep_y/2, 0]) | |
cylinder(h, spacer_ext_r, spacer_ext_r, $fn=32); | |
translate([inside_width/2 + screw_sep_x/2, inside_length/2 + screw_sep_y/2, 0]) | |
cylinder(h, spacer_ext_r, spacer_ext_r, $fn=32); | |
// button support | |
translate([inside_width/2 - board_width/2 + button_offset_x, | |
inside_length/2 - board_height/2 + button_offset_y, | |
0]) | |
cylinder(bh - wall_thickness, button_sup_r, button_sup_r, $fn=24); | |
} | |
union() | |
{ | |
// spacer int (these go all the way through the top) | |
h = floor_thickness + inside_height - pcb_level - pcb_thickness; | |
translate([inside_width/2 - screw_sep_x/2, inside_length/2 - screw_sep_y/2, -floor_thickness]) | |
cylinder(h, spacer_int_r, spacer_int_r, $fn=24); | |
translate([inside_width/2 - screw_sep_x/2, inside_length/2 + screw_sep_y/2, -floor_thickness]) | |
cylinder(h, spacer_int_r, spacer_int_r, $fn=24); | |
translate([inside_width/2 + screw_sep_x/2, inside_length/2 - screw_sep_y/2, -floor_thickness]) | |
cylinder(h, spacer_int_r, spacer_int_r, $fn=24); | |
translate([inside_width/2 + screw_sep_x/2, inside_length/2 + screw_sep_y/2, -floor_thickness]) | |
cylinder(h, spacer_int_r, spacer_int_r, $fn=24); | |
// S: screen window | |
translate([inside_width/2 - board_width/2 + screen_offset_x, | |
inside_length/2 - screen_height / 2, | |
-floor_thickness]) | |
cube([10, 25, floor_thickness]); | |
// S: button hole | |
translate([inside_width/2 - board_width/2 + button_offset_x, | |
inside_length/2 - board_height/2 + button_offset_y, | |
-floor_thickness]) | |
cylinder(bh/3, button_ext_r_max, button_ext_r_min, $fn=24); | |
translate([inside_width/2 - board_width/2 + button_offset_x, | |
inside_length/2 - board_height/2 + button_offset_y, | |
bh/3 - floor_thickness]) | |
cylinder(bh/3, button_ext_r_min, button_ext_r_min, $fn=24); | |
translate([inside_width/2 - board_width/2 + button_offset_x, | |
inside_length/2 - board_height/2 + button_offset_y, | |
2*bh/3 - floor_thickness]) | |
cylinder(bh/3, button_ext_r_min, button_ext_r_max, $fn=24); | |
} | |
} | |
// S: button | |
translate([inside_width/2 - board_width/2 + button_offset_x, | |
inside_length/2 - board_height/2 + button_offset_y, | |
-floor_thickness]) | |
cylinder(bh/3, button_int_r_max, button_int_r_min, $fn=24); | |
translate([inside_width/2 - board_width/2 + button_offset_x, | |
inside_length/2 - board_height/2 + button_offset_y, | |
bh/3 - floor_thickness]) | |
cylinder(bh/3, button_int_r_min, button_int_r_min, $fn=24); | |
translate([inside_width/2 - board_width/2 + button_offset_x, | |
inside_length/2 - board_height/2 + button_offset_y, | |
2*bh/3 - floor_thickness]) | |
cylinder(bh/3, button_int_r_min, button_int_r_max, $fn=24); | |
} | |
box(); | |
translate([inside_width+4*wall_thickness,0,0]) | |
lid(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment