filter_x = 368; // mm filter_y = 494; // mm filter_z = 44; // mm module filter() { // https://airfiltration.ca/collections/pleated-merv-plus/products/merv-13-2inch?variant=19413155348547 // merv-13 15x20x2 cube([filter_x, filter_y, filter_z]); }; fan_box_x = 255; // mm fan_box_y = 130; // mm fan_box_z = 43; // mm module fan_box() { cube([fan_box_x, fan_box_y, fan_box_z]); }; fan_mounting_hole_radius = 3; // mm fan_mounting_hole_length = 56; // mm module fan_plate_mounting_hole() { // 56 mm length, which is 50mm between circle centers hull() { circle(fan_mounting_hole_radius, $fn=360); translate([fan_mounting_hole_length - 2*fan_mounting_hole_radius, 0, 0]) { circle(fan_mounting_hole_radius, $fn=360); } }; } fan_plate_x = 353; // mm fan_plate_y = 229; // mm fan_plate_z = 1; // mm module fan_plate() { linear_extrude(fan_plate_z) { difference() { offset(r=1, $fn=360) { // 353x229 but reduced for offset square([fan_plate_x-1, fan_plate_y-1]); } // @TOOD: Fix the translation values translate([10, 10, 0]) { rotate([0, 0, 45]) { fan_plate_mounting_hole(); }; }; translate([10, 218, 0]) { rotate([0, 0, -45]) { fan_plate_mounting_hole(); }; }; translate([310, 180, 0]) { rotate([0, 0, 45]) { fan_plate_mounting_hole(); }; }; translate([300, 50, 0]) { rotate([0, 0, -45]) { fan_plate_mounting_hole(); }; }; }; }; }; fan_cable_spacing = 30; //mm fan_box_offset_x = 48; // mm fan_box_offset_y = 50; // mm fan_box_offset_z = 1; // mm module fan() { // https://acinfinity.com/hvac-home-ventilation/exhaust-fans/crawlspace-basement-fans/airtitan-s7-crawlspace-fan-with-speed-controller-12-inch/ // AirTitan S7 crawlspace fan union() { translate([fan_box_offset_x, fan_box_offset_y, fan_box_offset_z]) { fan_box(); }; fan_plate(); }; }; side_wall_x = 5; // mm side_wall_y = fan_box_y + 2*filter_z + 2*fan_cable_spacing; echo("Side wall:", side_wall_y, "by", side_wall_z); side_wall_z = filter_y; // mm module side_wall() { // from rona cube([side_wall_x, side_wall_y, side_wall_z], center=false); } #fan(); // leave 30mm for the power cable gland // that comes off the fan_box translate([-(filter_x - fan_plate_x)/2, filter_z - fan_cable_spacing , fan_plate_z]) { rotate([90, 0, 0]) { #filter(); }}; // leave 30mm for the power glang // that comes off the fan_box translate([-(filter_x - fan_plate_x)/2, fan_plate_y + fan_cable_spacing, fan_plate_z]) { rotate([90, 0, 0]) { #filter(); }}; translate([-2, -20, fan_plate_z]) { #side_wall();}; translate([filter_x, -20, fan_plate_z]) { #side_wall();};