← Back to Models
Exhaust hose adapter for small skylight - for 3D printers and others

Exhaust hose adapter for small skylight - for 3D printers and others

by viewprintlab ·

A place to attach a 4" (100mm) hose to vent out a small (18-22") skylight. The goal was to not require permanent mounting, so the intent is to use command strips or mounting tape.

The port as show is 100mm ID - should be 100mm OUTside diameter, didn't catch until I printed. Easy to adjust in SCAD.

The port can be extended to use one of the many magnetic coupling designs to allow for fast disconnect if required (I glued a magnetic mount in).

Interactive Preview & Customizer

3D STL viewer with browser-based OpenSCAD rendering on parameter changes.

Loading previewLoading preview...

--- Parameters (in mm) ---

step 0.5
step 0.5
step 0.1
step 0.5

5cm requirement (distance from leg edge to hose edge)

step 0.5

Tolerances

step 0.1
WASM compiler loads on first parameter change.
Download current STL

Screenshots

Model screenshot

Prompt

An adapter for a 4 inch flexible hose to fit in a skylight. The adapter should be U-shaped and able to adjust from 18-22 inches wide. The legs of the adapter should be a fixed 5 inches.

OpenSCAD Code

// --- Parameters (in mm) ---
$fn = 64;
inch = 25.4;

plate_thick = 15; 
leg_length = 5 * inch;
hose_diameter = 4 * inch;
hose_collar_height = 1 * inch;
bar_height = 130; 

// Female arm reduced by 25mm
female_arm_length = (12 * inch) - 25; 
// Male arm length maintained to ensure 22" total reach
male_arm_length = 12 * inch; 

// Width for preview (18 to 22 inches)
total_width_preview = 22 * inch; 

// 5cm requirement (distance from leg edge to hose edge)
dist_from_leg = 50; 
hose_center_x = plate_thick + dist_from_leg + (hose_diameter / 2);

// Tolerances
tol = 0.5;

// Calculated track start to avoid the hose port
track_start_ref = hose_center_x + (hose_diameter/2) + 15;
available_track_len = female_arm_length - track_start_ref;

module port_arm_female() {
    difference() {
        union() {
            // Main Face Plate
            cube([female_arm_length, plate_thick, bar_height]);
            
            // 5-inch Leg (Positive Y)
            cube([plate_thick, leg_length, bar_height]);
            
            // Hose Collar
            translate([hose_center_x, plate_thick, bar_height/2])
            rotate([-90, 0, 0])
            difference() {
                cylinder(d = hose_diameter + 10, h = hose_collar_height);
                translate([0, 0, -1])
                cylinder(d = hose_diameter, h = hose_collar_height + 2);
            }
        }
        
        // Hose Cutout
        translate([hose_center_x, -1, bar_height/2])
        rotate([-90, 0, 0])
        cylinder(d = hose_diameter, h = plate_thick + 2);
        
        // Internal track for the slider 
        translate([track_start_ref, 3, 10])
        cube([available_track_len + 1, plate_thick - 6, bar_height - 20]);
    }
}

module slider_arm_male() {
    // The tongue is sized to match the available track in the female arm
    tongue_len = available_track_len;

    union() {
        // Main Face Plate (The part that stays outside)
        // Calculated to ensure total width can be reached
        outer_body_len = male_arm_length - tongue_len;
        
        translate([tongue_len, 0, 0])
        cube([outer_body_len, plate_thick, bar_height]);
        
        // 5-inch Leg (Positive Y) at the very end
        translate([tongue_len + outer_body_len - plate_thick, 0, 0])
        cube([plate_thick, leg_length, bar_height]);
        
        // Sliding Tongue (Male)
        translate([0, 3 + tol/2, 10 + tol/2])
        cube([tongue_len, plate_thick - 6 - tol, bar_height - 20 - tol]);
    }
}

// --- Assembly View ---
// X-positioning for preview
male_pos_x = total_width_preview - male_arm_length;

port_arm_female();

translate([male_pos_x, 0, 0])
slider_arm_male();

// --- Printing Instructions ---
// 1. Render and export 'port_arm_female()'
// 2. Render and export 'slider_arm_male()'
// Note: If the male arm (approx 304mm) is too long for your bed, 
// you can rotate it diagonally or print it vertically.