76 lines
No EOL
3 KiB
OpenSCAD
76 lines
No EOL
3 KiB
OpenSCAD
$fn = 64;
|
|
pcb_width = 81;
|
|
pcb_length = 119;
|
|
case_thickness = 3;
|
|
case_height = 15;
|
|
pcb_thickness = 1.6;
|
|
breakout_width = 21;
|
|
breakout_length = 13;
|
|
inner_depth = 5;
|
|
|
|
module pcb(h) {
|
|
pcb_thickness = h ? h : 1.6;
|
|
pcb_corner_radius = 5;
|
|
|
|
translate([pcb_corner_radius,pcb_corner_radius,0]) hull() {
|
|
cylinder(h=pcb_thickness, r=pcb_corner_radius);
|
|
translate([pcb_width-2*pcb_corner_radius,0,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius);
|
|
translate([0,pcb_length-2*pcb_corner_radius,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius);
|
|
translate([pcb_width-2*pcb_corner_radius,pcb_length-2*pcb_corner_radius,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius);
|
|
}
|
|
}
|
|
|
|
module lower_case() {
|
|
translate([0,0,-1*case_height]) {
|
|
difference() {
|
|
cube([pcb_width + 2*case_thickness, pcb_length + 2*case_thickness, case_height]);
|
|
translate([0,-1,-1*case_height/2+3.5]) rotate([-2.5,0,0]) cube([pcb_width+2*case_thickness, pcb_length+2*case_thickness+2, 10]);
|
|
|
|
translate([0,(pcb_length+2*case_thickness)/2,case_height-14]) {
|
|
rotate([0,-10,0]) cube([10,pcb_length+2*case_thickness,case_height], center=true);
|
|
translate([pcb_width+2*case_thickness,0,0]) rotate([0,10,0]) cube([10,pcb_length+2*case_thickness,case_height], center=true);
|
|
translate([-1.3,0,0.8]) cube([10,pcb_length+2*case_thickness,case_height], center=true);
|
|
translate([1.3,0,0.8]) translate([pcb_width+2*case_thickness,0,0]) cube([10,pcb_length+2*case_thickness,case_height], center=true);
|
|
}
|
|
rotate([6.2,0,0]) cube([pcb_width+2*case_thickness,1,10]);
|
|
}
|
|
}
|
|
}
|
|
|
|
module standoff(x, y) {
|
|
translate([case_thickness+x,case_thickness+y,-1*inner_depth]) difference() {
|
|
translate([0,0,(inner_depth-pcb_thickness)/2]) cylinder(h=inner_depth-pcb_thickness, d=3.5, center=true);
|
|
translate([0,0,(inner_depth-pcb_thickness)/2]) cylinder(h=inner_depth-pcb_thickness, d=1, center=true);
|
|
}
|
|
}
|
|
|
|
module usb_breakout() {
|
|
breakout_thickness = 1;
|
|
|
|
//PCB
|
|
cube([breakout_width, breakout_length, breakout_thickness]);
|
|
|
|
// space for solder blobs
|
|
translate([0,0,-1]) cube([breakout_width, 4, breakout_thickness]);
|
|
|
|
// USB-C
|
|
translate([breakout_width/2, breakout_length-8/2+1, -4/2]) cube([10, 8, 4], center=true);
|
|
translate([breakout_width/2, breakout_length-8/2+1+7, -4/2]) cube([16, 8, 8], center=true);
|
|
|
|
// screw holes
|
|
translate([2.5,breakout_length-2.5,-2]) cylinder(h=2,d=1);
|
|
translate([breakout_width-2.5,breakout_length-2.5,-2]) cylinder(h=2,d=1);
|
|
}
|
|
|
|
difference() {
|
|
lower_case();
|
|
translate([case_thickness, case_thickness, -1*inner_depth]) pcb(inner_depth);
|
|
translate([(pcb_width + 2*case_thickness)/2-breakout_width/2,pcb_length + 2*case_thickness-breakout_length-case_thickness,-1*(inner_depth+1)]) usb_breakout();
|
|
}
|
|
|
|
standoff(21.5, pcb_length-97);
|
|
standoff(56, pcb_length-97.5);
|
|
standoff(21.5, pcb_length-32);
|
|
standoff(59.5, pcb_length-32);
|
|
|
|
// TODO: screw holes for top half |