|
|
|
$fn = 50;
|
|
|
|
|
|
|
|
module PCB() {
|
|
|
|
minkowski() {
|
|
|
|
cube([130,75+4+20,1.8]);
|
|
|
|
cylinder(r=0.8,h=0.8);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module box(height) {
|
|
|
|
difference() {
|
|
|
|
minkowski() {
|
|
|
|
cube([130-4,57,height]);
|
|
|
|
cylinder(r=8,h=2);
|
|
|
|
}
|
|
|
|
translate([0,0,2]) cube([130-4,57,height+2]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module louver(x, z, num) {
|
|
|
|
for (i=[0:num]) {
|
|
|
|
translate([0,-3.6,i*7]) {
|
|
|
|
rotate([-45,0,0]) cube([x,3,z]);
|
|
|
|
// translate([0,32,0]) rotate([45,0,0]) %cube([x,3,z]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module honeycomb(num_x, num_y, size) {
|
|
|
|
for (i=[0:num_y]) {
|
|
|
|
translate([0,i*2.4*size,0])
|
|
|
|
for (k=[0:num_x]) {
|
|
|
|
if( k%2==0) {
|
|
|
|
offset = 2.4*size*0.5;
|
|
|
|
translate([k*2.2*size,offset,0]) rotate([0,0,360/12])
|
|
|
|
cylinder($fn=6, r=size, h=3);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
offset = 0;
|
|
|
|
translate([k*2.2*size,offset,0]) rotate([0,0,360/12])
|
|
|
|
cylinder($fn=6, r=size, h=3);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module mount() {
|
|
|
|
rotate([90,90,0]) {
|
|
|
|
translate([-4,0,0]) cylinder(r=2.5,h=12);
|
|
|
|
translate([-4,-2.5,0]) cube([14,5,12]);
|
|
|
|
translate([10,0,0]) cylinder(r=5,h=12);
|
|
|
|
translate([-20,-5,2+4]) cube([30,10,12-2-4]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module screwhole() {
|
|
|
|
translate([0,60+10,0]) rotate([90,0,0]) {
|
|
|
|
cylinder(r=1.4,h=12+10);
|
|
|
|
cylinder(r=3,h=7.8);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module rail(length=57+2) {
|
|
|
|
rotate([90,0,0]) {
|
|
|
|
difference() {
|
|
|
|
linear_extrude(height=length) polygon([[-1.4,0],[1.4,0],[2.4,4],[-2.4,4]]);
|
|
|
|
translate([-5,0,length]) rotate([-45,0,0]) cube([10,10,10]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module helper_cut() {
|
|
|
|
difference() {
|
|
|
|
translate([0,0,4]) rotate([0,0,-45]) cube([10,10,100]);
|
|
|
|
translate([-2,-10,0]) rotate([0,0,0]) cube([20,10,100+0.2]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module stand1() {
|
|
|
|
difference() {
|
|
|
|
union() {
|
|
|
|
translate([-8,0,-12]) cube([10,57,12+0.2]);
|
|
|
|
translate([0,0,-12]) cylinder(r=8,h=12+0.2);
|
|
|
|
translate([0,57,-12]) cylinder(r=8,h=12+0.2);
|
|
|
|
}
|
|
|
|
translate([-20,57/2-4+2,-23]) rotate([0,90,0]) cylinder(r=28,h=200);
|
|
|
|
translate([0,-20,-20]) cube([130-4,100,30]);
|
|
|
|
}
|
|
|
|
difference() {
|
|
|
|
union() {
|
|
|
|
translate([130-6,0,-12]) cube([10,57,12+0.2]);
|
|
|
|
translate([130-4,0,-12]) cylinder(r=8,h=12+0.2);
|
|
|
|
translate([130-4,57,-12]) cylinder(r=8,h=12+0.2);
|
|
|
|
}
|
|
|
|
translate([-20,57/2-4+2,-23]) rotate([0,90,0]) cylinder(r=28,h=200);
|
|
|
|
translate([0,-20,-20]) cube([130-4,100,30]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module base(height) {
|
|
|
|
difference() {
|
|
|
|
union() {
|
|
|
|
difference() {
|
|
|
|
union() {
|
|
|
|
box(height);
|
|
|
|
translate([-4,57,81.8]) rail();
|
|
|
|
translate([130,57,81.8]) rail();
|
|
|
|
}
|
|
|
|
translate([5,-15,-1]) louver(117,25,9);
|
|
|
|
translate([130-4+15,3,-1]) rotate([0,0,90]) louver(50,25,9);
|
|
|
|
translate([-15,53,-1]) rotate([0,0,-90]) louver(50,25,9);
|
|
|
|
translate([5+1,5+1,-0.5]) honeycomb(13,4,4);
|
|
|
|
}
|
|
|
|
translate([-1.4,20,0]) cube([1.4,12,80+2]);
|
|
|
|
translate([126,20,0]) cube([1.4,12,80+2]);
|
|
|
|
stand1();
|
|
|
|
}
|
|
|
|
translate([-2,27,5]) rotate([90,0,0]) PCB();
|
|
|
|
translate([-2.6,27,0]) helper_cut(); // make this fdm-printable on front face
|
|
|
|
translate([130-10-3-2.6,27,0]) helper_cut();
|
|
|
|
translate([20+8/2,57+10,53]) mount();
|
|
|
|
translate([100+8/2,57+10,53]) mount();
|
|
|
|
translate([-4,0,5]) screwhole();
|
|
|
|
translate([-4,0,8+66.6]) screwhole();
|
|
|
|
translate([130,0,5]) screwhole();
|
|
|
|
translate([130,0,8+66.6]) screwhole();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module roof1() {
|
|
|
|
difference() {
|
|
|
|
translate([0,0,82.4])
|
|
|
|
minkowski() {
|
|
|
|
cube([130-4,57,7.6]);
|
|
|
|
cylinder(r=8,h=2);
|
|
|
|
}
|
|
|
|
translate([0,0,74]) rotate([7,0,0]) cube([130-4,57,8]);
|
|
|
|
translate([0,-8,74+4+6]) rotate([7,0,0]) cube([130-4,57+2*8,8]);
|
|
|
|
minkowski() {
|
|
|
|
translate([-4,57-1.2+8,81.8]) rail(57+2+8);
|
|
|
|
cylinder(r=0.4,h=0.4);
|
|
|
|
}
|
|
|
|
minkowski() {
|
|
|
|
translate([130,57-1.2+8,81.8]) rail(57+2+8);
|
|
|
|
cylinder(r=0.4,h=0.4);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
translate([-4,57+2,82+7.6+2]) rail();
|
|
|
|
translate([130,57+2,82+7.6+2]) rail();
|
|
|
|
}
|
|
|
|
|
|
|
|
//color([0,1,0])
|
|
|
|
% difference() {
|
|
|
|
base(80);
|
|
|
|
translate([-50,56.8,-30]) cube([250,20,150]); // subtract back
|
|
|
|
}
|
|
|
|
|
|
|
|
//color([0,0,1])
|
|
|
|
difference() {
|
|
|
|
base(80+10);
|
|
|
|
translate([-50,-20,-30]) cube([250,20+56.8,150]); // subtract front
|
|
|
|
translate([-50,-20,82]) cube([250,100,100]);
|
|
|
|
}
|
|
|
|
|
|
|
|
//color([1,0,0])
|
|
|
|
% roof1();
|