82 lines
5.6 KiB
OpenSCAD
82 lines
5.6 KiB
OpenSCAD
// This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
|
|
|
|
include <util.scad>
|
|
|
|
$fn = 64;
|
|
|
|
color("SaddleBrown") difference() {
|
|
// case
|
|
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);
|
|
}
|
|
|
|
// 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);
|
|
}
|
|
|
|
// TODO: make dependent on case size
|
|
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 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+1,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-11,1.5]) mirror([1,0,0]) linear_extrude(0.2) text(text="© XenGi 2023", size=6, font="Liberation Sans:style=Bold", halign="center");
|
|
}
|