A weather station
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.4 KiB

$fn = 50;
module PCB() {
minkowski() {
cube([130,75+4+20,1.8]);
cylinder(r=0.8,h=0.8);
}
}
module box() {
difference() {
minkowski() {
cube([130-4,57,80]);
cylinder(r=8,h=2);
}
translate([0,0,2]) cube([130-4,57,80+2]);
}
}
module louver(x, z, num) {
for (i=[0:num])
translate([0,0,i*9])
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=3,h=12);
translate([-4,-3,0]) cube([14,6,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);
}
module rail() {
rotate([90,0,0]) {
difference() {
linear_extrude(height=57+8+2) polygon([[-1.4,0],[1.4,0],[2.4,4],[-2.4,4]]);
translate([-5,0,57+10]) rotate([-45,0,0]) cube([10,10,10]);
}
}
}
difference() {
union() {
difference() {
union() {
box();
translate([-4,57+8,81.8]) rail();
translate([130,57+8,81.8]) rail();
}
translate([5,-15,2.6]) louver(120,25,7);
translate([130-4+15,3,2.6]) rotate([0,0,90]) louver(50,25,7);
translate([-15,53,2.6]) rotate([0,0,-90]) louver(50,25,7);
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]);
}
translate([-2,27,5]) rotate([90,0,0]) PCB();
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();
translate([-50,56.8,-10]) cube([250,20,100]); // subtract back
}