Skip to content

Instantly share code, notes, and snippets.

@jstanley0
Last active September 13, 2019 01:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jstanley0/4f6d230def61d295f0c86d859c6cc442 to your computer and use it in GitHub Desktop.
Save jstanley0/4f6d230def61d295f0c86d859c6cc442 to your computer and use it in GitHub Desktop.
Parametric project box
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