cad/util.scad
2023-07-17 10:38:13 +02:00

152 lines
5.3 KiB
OpenSCAD

// This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
$fn=64;
pcb_width = 139.7+1;
pcb_depth = 82.55+1;
pcb_radius = 3.175;
pcb_thickness = 1.6;
plate_thickness = 1.5;
case_thickness = 5;
case_bottom_thickness = 5; // TODO: doesn't respect height of PCB plus switches etc
case_height = 10;
upper_case_height = 5;
standoff_height = 3;
mx = 19.05;
mounting_holes = [
[36.5125, 21.0188],
[30.9563, 57.9438],
[116.6813, 14.2875],
[98.425, 69.0563]
];
pololu_width = 0.8*2.54*10;
pololu_depth = 0.5*2.54*10;
pololu_holes_radius = 1;
pololu_hole_spacing = 0.1*2.54*10;
module lug(north_facing=true, hole=true) {
difference() {
hull() {
translate([0, north_facing ? 2 : -2, 0]) cylinder(h=plate_thickness, d=4);
translate([-5, 0, 0]) cylinder(h=plate_thickness, d=2);
translate([5, 0, 0]) cylinder(h=plate_thickness, d=2);
}
if (hole) {
translate([0, north_facing ? 2 : -2, 0]) cylinder(h=plate_thickness, d=2.2);
}
}
}
module mx_1x1_cutout() {
side_length = 14;
// central hole
translate([0, 0, pcb_thickness/2]) cube([side_length, side_length, pcb_thickness+0.1], center=true);
// wings
translate([side_length/2, 2.5+3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
translate([side_length/2, -2.5-3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
translate([-side_length/2, 2.5+3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
translate([-side_length/2, -2.5-3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
// rounded corners
translate([side_length/2-0.25, side_length/2-0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
translate([side_length/2-0.25, -side_length/2+0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
translate([-side_length/2+0.25, side_length/2-0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
translate([-side_length/2+0.25, -side_length/2+0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
}
module mx_1x2_cutout() {
side_length = 14;
// central hole
translate([0, 0, pcb_thickness/2]) cube([side_length, side_length, pcb_thickness+0.1], center=true);
// wings
translate([side_length/2, 2.5+3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
translate([side_length/2, -2.5-3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
translate([-side_length/2, 2.5+3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
translate([-side_length/2, -2.5-3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
// rounded corners
translate([side_length/2-0.25, side_length/2-0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
translate([side_length/2-0.25, -side_length/2+0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
translate([-side_length/2+0.25, side_length/2-0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
translate([-side_length/2+0.25, -side_length/2+0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
// stabilizers
translate([0, 0, pcb_thickness/2]) translate([-0.5, 11.9, 0]) cube([15, 6.65, pcb_thickness+0.1], center=true);
translate([0, 0, pcb_thickness/2]) translate([-0.5, -11.9, 0]) cube([15, 6.65, pcb_thickness+0.1], center=true);
}
module mx_2x1_cutout() {
side_length = 14;
// central hole
translate([0, 0, pcb_thickness/2]) cube([side_length, side_length, pcb_thickness+0.1], center=true);
// wings
translate([side_length/2, 2.5+3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
translate([side_length/2, -2.5-3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
translate([-side_length/2, 2.5+3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
translate([-side_length/2, -2.5-3.5/2, pcb_thickness/2]) cube([2*0.8, 3.5, pcb_thickness+0.1], center=true);
// rounded corners
translate([side_length/2-0.25, side_length/2-0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
translate([side_length/2-0.25, -side_length/2+0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
translate([-side_length/2+0.25, side_length/2-0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
translate([-side_length/2+0.25, -side_length/2+0.25, 0]) cylinder(h=pcb_thickness+0.1, r=0.5);
// stabilizer holes
translate([0, 0, pcb_thickness/2]) translate([11.9, -0.5, 0]) cube([6.65, 15, pcb_thickness+0.1], center=true);
translate([0, 0, pcb_thickness/2]) translate([-11.9, -0.5, 0]) cube([6.65, 15, pcb_thickness+0.1], center=true);
}
// TODO: replace with screw in cutouts
/*
linear_extrude(pcb_thickness) polygon(points=[
[-7, 7],
[-5.97, 7],
[-5.97, 17.15/2],
[-6.77, 17.15/2],
[-6.77, 20.8/2],
[-7.97, 20.8/2],
[-7.97, 26.8/2],
[-6.77, 26.8/2],
[-6.77, 30.45/2],
[-0.5, 30.45/2],
[-0.5, 32.2/2],
[2.3, 32.2/2],
[2.3, 30.45/2],
[5.53, 30.45/2],
[5.53, 17.15/2],
[4.73, 17.15/2],
[4.73, 14/2],
[7, 14/2],
[7, -14/2],
[4.73, -14/2],
[4.73, -17.15/2],
[5.53, -17.15/2],
[5.53, -30.45/2],
[2.3, -30.45/2],
[2.3, -32.2/2],
[-0.5, -32.2/2],
[-0.5, -30.45/2],
[-6.77, -30.45/2],
[-6.77, -26.8/2],
[-7.97, -26.8/2],
[-7.97, -20.8/2],
[-6.77, -20.8/2],
[-6.77, -17.15/2],
[-5.97, -17.15/2],
[-5.97, -7],
[-7, -7]
], convexity=1);
*/