MicroAPRS/Design/Case/Enclosure.scad

109 lines
2.5 KiB
OpenSCAD

w = 47.5;
h = 25;
d = 28.5;
t=1.5;
usbw = 8;
usbh = 3.5;
usbl = 1;
mdw = 25.7;
ss = 4;
ps = 4;
module box() {
difference() {
cube([w+2*t, d+2*t, h+2*t], center=true);
cube([w, d, h], center=true);
}
}
module topSlice() { translate([0,0,h/2]) cube([w+2*t+1, d+2*t+2, h], center=true); }
module bottomSlice() { translate([0,0,-h/2]) cube([w+2*t+1, d+2*t+2, h], center=true); }
module ports() {
module usb() {
// cube([usbw, usbh, t+2], center = true);
d1 = 11;
d2 = 9;
difference() {
cube([usbw, t+2, usbh], center = true);
translate([(usbw/2+usbw/d1), 0, (usbh/2+usbw/d1)]) rotate([0, 45, 0]) cube([3, t+2, usbh], center = true);
translate([-(usbw/2+usbw/d1), 0, (usbh/2+usbw/d1)]) rotate([0, -45, 0]) cube([3, t+2, usbh], center = true);
translate([(usbw/2+usbw/d2), 0, -(usbh/2+usbw/d2)]) rotate([0, -45, 0]) cube([3, t+2, usbh], center = true);
translate([-(usbw/2+usbw/d2), 0, -(usbh/2+usbw/d2)]) rotate([0, 45, 0]) cube([3, t+2, usbh], center = true);
}
}
translate([w/2-1, d/6, -8]) rotate([0, 90, 0]) cylinder(r=6.2/2, h=t+2, $fn=32);
translate([w/2-1, -d/6, -8]) rotate([0, 90, 0]) cylinder(r=6.2/2, h=t+2, $fn=32);
translate([-(w/2-mdw/2), d/2+t/2, -(h/2-(usbh/2)-usbl)]) usb();
}
module divider() {
translate([mdw-(w/2-t/2), 0, -(h/2-(h/6))]) cube([t, d, h/3], center=true);
}
module pegs() {
translate([(w/2-ps/2), (d/2-ps/2), -h/10]) cube([ps, ps, h-h/10], center=true);
translate([(w/2-ps/2), -(d/2-ps/2), -h/10]) cube([ps, ps, h-h/10], center=true);
translate([mdw-(w/2-t/2)+t/2+ps/2, (d/2-ps/2), -h/10]) cube([ps, ps, h-h/10], center=true);
translate([mdw-(w/2-t/2)+t/2+ps/2, -(d/2-ps/2), -h/10]) cube([ps, ps, h-h/10], center=true);
}
module indicators() {
translate([w/2+t/2, 0, 8]) slit();
translate([w/2+t/2, -2, 8]) slit();
translate([w/2+t/2, 2, 8]) slit();
}
module symbols() {
translate([w/2+t, -(d/2-(d/10)), -8]) one();
translate([w/2+t, (d/2-(d/10)), -8]) zero();
}
module zero() {
rotate([0, 90, 0]) linear_extrude(height=1, center=true) circle(r=ss/2, $fn=32);
}
module one() {
cube([1, 1, ss], center=true);
}
module slit() {
cube([2*t, 1, ss], center=true);
}
module top() {
difference() {
box();
bottomSlice();
indicators();
}
}
module bottom() {
union() {
difference() {
box();
topSlice();
ports();
symbols();
}
pegs();
divider();
}
}
module enclosure() {
translate([0,-(d/2+(d/6)),(h/2+t)]) rotate([180, 0, 0]) top();
translate([0,(d/2+(d/6)),(h/2+t)]) bottom();
//translate([0,0,(h/2+t)]) rotate([180, 0, 0]) top();
//bottom
}
enclosure();