cad/lower_case.scad
2023-09-03 19:39:38 +02:00

115 lines
No EOL
8.2 KiB
OpenSCAD

// This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
include <util.scad>
$fn = 64;
with_weight = false;
color("SaddleBrown") difference() {
// case
union() {
hull() {
translate([-case_thickness, -case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5);
translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5);
translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5);
translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5);
}
translate([0,0,case_thickness+standoff_height+pcb_thickness+5-upper_case_height]) hull() {
translate([-case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+0.5, r2=pcb_radius+2);
translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+0.5, r2=pcb_radius+2);
translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+0.5, r2=pcb_radius+2);
translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+0.5, r2=pcb_radius+2);
}
hull() {
translate([-case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+2, r2=pcb_radius+0.5);
translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+2, r2=pcb_radius+0.5);
translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+2, r2=pcb_radius+0.5);
translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+2, r2=pcb_radius+0.5);
}
}
// pcb
translate([0, 0, case_bottom_thickness]) hull() {
cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+1);
translate([pcb_width-2*pcb_radius, 0, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+1);
translate([0, pcb_depth-2*pcb_radius, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+1);
translate([pcb_width-2*pcb_radius, pcb_depth-2*pcb_radius, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+1);
}
// plate_mounting
translate([20, pcb_depth - pcb_radius+1, case_thickness+standoff_height+pcb_thickness+5-plate_thickness]) lug(hole=false);
translate([pcb_width-2*pcb_radius - 20, pcb_depth - pcb_radius+1, case_thickness+standoff_height+pcb_thickness+5-plate_thickness]) lug(hole=false);
translate([20, -pcb_radius-1, case_thickness+standoff_height+pcb_thickness+5-plate_thickness]) lug(north_facing=false, hole=false);
translate([pcb_width-2*pcb_radius - 20, -pcb_radius-1, case_thickness+standoff_height+pcb_thickness+5-plate_thickness]) lug(north_facing=false, hole=false);
// screw holes
translate([20, pcb_depth - pcb_radius+3, case_thickness+standoff_height+pcb_thickness+5-plate_thickness-threaded_insert_height]) cylinder(h=threaded_insert_height, d=3); // top-left
translate([pcb_width-2*pcb_radius - 20, pcb_depth - pcb_radius+3, case_thickness+standoff_height+pcb_thickness+5-plate_thickness-threaded_insert_height]) cylinder(h=threaded_insert_height, d=3); // top-right
translate([20, -pcb_radius-3, case_thickness+standoff_height+pcb_thickness+5-plate_thickness-threaded_insert_height]) cylinder(h=threaded_insert_height, d=3); // bottom-left
translate([pcb_width-2*pcb_radius - 20, -pcb_radius-3, case_thickness+standoff_height+pcb_thickness+5-plate_thickness-threaded_insert_height]) cylinder(h=threaded_insert_height, d=3); // bottom-right
// USB-C daughter board
translate([pcb_width/2-pcb_radius, pcb_depth-pcb_radius+1-pololu_depth/2, case_bottom_thickness - pcb_thickness/2]) {
translate([0,pololu_depth/2-case_thickness+5,0.8+3/2]) rotate([-90,0,0]) hull() {
translate([-7/2,0,0]) cylinder(h=case_thickness+2, d=8);
translate([7/2,0,0]) cylinder(h=case_thickness+2, d=8);
}
cube([pololu_width, pololu_depth, pcb_thickness+0.1], center=true);
// screw holes
translate([-pololu_width/2+pololu_hole_spacing, pololu_depth/2-pololu_hole_spacing, -pcb_thickness/2-threaded_insert_height]) cylinder(h=threaded_insert_height, d=3);
translate([pololu_width/2-pololu_hole_spacing, pololu_depth/2-pololu_hole_spacing, -pcb_thickness/2-threaded_insert_height]) cylinder(h=threaded_insert_height, d=3);
}
// cable channel
translate([65, 26, case_bottom_thickness/2]) {
translate([-7.5,30,0]) linear_extrude(case_bottom_thickness/2+1) polygon([[7.5,0], [7.5,10.75], [0,10.75]]);
cube([10, 40.75, case_bottom_thickness/2+1]);
cube([72, 11, case_bottom_thickness/2+1]);
}
// screw holes for upper case
translate([-case_thickness, -case_thickness, 0]) cylinder(h=2, d=4);
translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) cylinder(h=2, d=4);
translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=2, d=4);
translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=2, d=4);
translate([-case_thickness, -case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, d=2);
translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, d=2);
translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, d=2);
translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, d=2);
// mounting standoffs
for(i = [0 : len(mounting_holes)-1]) {
translate([mounting_holes[i][0] - pcb_radius, mounting_holes[i][1] - pcb_radius, case_bottom_thickness - 3]) union() {
translate([0,0,1]) cylinder(h=2, d=3);
cylinder(h=3, d=2);
}
}
// hole for reset button
translate([reset_x - pcb_radius, reset_y - pcb_radius, 0]) cylinder(h=case_thickness, r=1);
// OPTIONAL: hole for weight
if (with_weight) {
hull() {
translate([5,5,0]) cylinder(h=1.5, d=10);
translate([pcb_width-2*pcb_radius-5,5,0]) cylinder(h=1.5, d=10);
translate([5,pcb_depth-2*pcb_radius-5,0]) cylinder(h=1.5, d=10);
translate([pcb_width-2*pcb_radius-5,pcb_depth-2*pcb_radius-5,0]) cylinder(h=1.5, d=10);
}
translate([pcb_width/2,pcb_depth/2+6,1.5]) mirror([1,0,0]) linear_extrude(0.2) text(text="noisy cricket", size=10, font="Liberation Sans:style=Bold", halign="center");
translate([pcb_width/2,pcb_depth/2-8,1.5]) mirror([1,0,0]) linear_extrude(0.2) text(text="© XenGi 2023", size=6, font="Liberation Sans:style=Bold", halign="center");
// threaded inserts
translate([10,10,1.5]) cylinder(h=threaded_insert_height, d=3);
translate([pcb_width-2*pcb_radius-10,10,1.5]) cylinder(h=threaded_insert_height, d=3);
translate([10,pcb_depth-2*pcb_radius-10,1.5]) cylinder(h=threaded_insert_height, d=3);
translate([pcb_width-2*pcb_radius-10,pcb_depth-2*pcb_radius-10,1.5]) cylinder(h=threaded_insert_height, d=3);
//reset button text
translate([reset_x - pcb_radius-1.4, reset_y - pcb_radius-1.5, 1.5]) mirror([1,0,0]) rotate([0,0,90]) linear_extrude(0.2) text(text="RESET ►", size=3, font="Liberation Sans:style=Bold", halign="right");
} else {
translate([pcb_width/2,pcb_depth/2+6,0]) mirror([1,0,0]) linear_extrude(0.2) text(text="noisy cricket", size=10, font="Liberation Sans:style=Bold", halign="center");
translate([pcb_width/2,pcb_depth/2-8,0]) mirror([1,0,0]) linear_extrude(0.2) text(text="© XenGi 2023", size=6, font="Liberation Sans:style=Bold", halign="center");
translate([reset_x - pcb_radius-1.4, reset_y - pcb_radius-1.5, 0]) mirror([1,0,0]) rotate([0,0,90]) linear_extrude(0.2) text(text="RESET ►", size=3, font="Liberation Sans:style=Bold", halign="right");
}
}