// --- Cyclone Separator Adapter --- // High resolution for smooth friction-fit surfaces $fn = 120; // --- Parameters --- // Inlet Specifications inlet_od = 40.0; inlet_id = 35.0; inlet_length = 20.0; // The "few mm" vertical rise before the turn // Elbow Specifications elbow_radius = 25.0; // Center-line bend radius of the elbow // Horizontal Section Specifications straight_len1 = 10.0; // First inner taper length id_mid = 30.0; // Inner diameter after first taper straight_len2 = 60.0; // Second inner taper length id_out = 32.1; // Final inner diameter at opening // The outer diameter tapers evenly across the entire 70mm length. // Setting the final OD to 38.1mm ensures a 3mm wall thickness at the opening (32.1 + 6). // The wall thickness through the 30mm ID section naturally swells to ~4.8mm. end_od = 38.1; eps = 0.01; // Small value to prevent rendering artifacts (Z-fighting) during difference() module adapter() { difference() { // --- OUTER SHELL --- union() { // Vertical inlet tube cylinder(h=inlet_length, d=inlet_od); // 90-Degree Elbow translate([-elbow_radius, 0, inlet_length]) rotate([90, 0, 0]) rotate_extrude(angle=90) translate([elbow_radius, 0, 0]) circle(d=inlet_od); // Horizontal outer taper (70mm total length) translate([-elbow_radius, 0, inlet_length + elbow_radius]) rotate([0, -90, 0]) cylinder(h=straight_len1 + straight_len2, d1=inlet_od, d2=end_od); } // --- INNER CUTOUT --- union() { // Vertical inlet inner tube (extended slightly down for clean manifold cut) translate([0, 0, -eps]) cylinder(h=inlet_length + eps, d=inlet_id); // 90-Degree Elbow inner path translate([-elbow_radius, 0, inlet_length]) rotate([90, 0, 0]) rotate_extrude(angle=90) translate([elbow_radius, 0, 0]) circle(d=inlet_id); // Horizontal inner tapers translate([-elbow_radius, 0, inlet_length + elbow_radius]) rotate([0, -90, 0]) { // First taper: 35mm down to 30mm over 10mm cylinder(h=straight_len1, d1=inlet_id, d2=id_mid); // Second taper: 30mm up to 32.1mm over 60mm (extended for clean cut) translate([0, 0, straight_len1 - eps]) cylinder(h=straight_len2 + 2*eps, d1=id_mid, d2=id_out); } } } } // Render the final part adapter();