M0UNTAIN 0F C0DE

Water Butt Downpipe Interceptor

3D model

A rainwater downpipe interceptor which diverts into a water butt until it is full and then overflows into the drain. It fits a standard 68 mm downpipe.

There are two parts for ease of printing, they snap together, but I recommend putting a couple of screws through them. You could glue them together, but experience shows that you will need to open once in a while to clean it out.

There are many variables in the SCAD file which can be tweaked.

$fn=60;

downPipeWall=1.8;
downPipeOuterDiameter=68;
downPipeInnerDiameter=downPipeOuterDiameter-(downPipeWall*2);

feedPipeWall=2;
feedPipeOuterDiameter=43;
feedPipeInnerDiameter=feedPipeOuterDiameter-(feedPipeWall*2);

bodyWall=2;
bodyOuterDiameter=110;
bodyInnerDiameter=bodyOuterDiameter-(bodyWall*2);
bodyHeight=70;
bodyFacets=10;
bodyFacetAngle=(((bodyFacets-2)*180)/bodyFacets);

catcherWall=bodyWall;
catcherOuterDiameter=downPipeOuterDiameter/1.4;
catcherInnerDiameter=catcherOuterDiameter-(catcherWall*2);
catcherHeight=bodyHeight-25;

module body() {
    module skin() {
        difference() {
            cylinder(d=bodyOuterDiameter, h=bodyHeight, $fn=bodyFacets);
            translate([0,0,bodyWall]) cylinder(d=bodyInnerDiameter, h=bodyHeight, $fn=bodyFacets);
        }
    }
    
    module catcher() {
        difference() {
            cylinder(d=catcherOuterDiameter, h=catcherHeight);
            translate([0,0,-1]) cylinder(d=catcherInnerDiameter, h=catcherHeight+2);
        }
    }
    
    module passThroughHole() {
        cylinder(d=catcherInnerDiameter, h=5, center=true);
    }
    
    module connector() {
        height=15;
        translate([0,0,-height]) {
            difference() {
                cylinder(d=downPipeInnerDiameter, h=height);
                translate([0,0,-1]) cylinder(d=downPipeInnerDiameter-(bodyWall*2), h=height+2);
            }
        }
    }
    
    module feed(outerDiameter) {
        downAngle=2;
        length=30;
        
        module tubePositioned() {
            module tube() {
                difference() {
                    cylinder(d2=feedPipeOuterDiameter+3, d1=feedPipeOuterDiameter+10, h=length);
                    translate([0,0,-1]) cylinder(d=outerDiameter, h=length+2);
                }
            }
            
            translate([0,(bodyWall*2)-(bodyOuterDiameter/2)+6,(feedPipeOuterDiameter/2)+2.5]) rotate([downAngle,0,0]) rotate([90,90,0]) tube();
        }
        
        difference() {
            tubePositioned();
            translate([0,0,1]) rotate([0,0,bodyFacetAngle+90]) cylinder(d=bodyInnerDiameter-0.1,h=bodyHeight, $fn=bodyFacets);
            translate([0,0,-5]) cube([200,200,10], center=true);
        }
    }

    difference() {
        union() {
            rotate([0,0,bodyFacetAngle+90]) skin();
            catcher();
        }
        feed(0);
        passThroughHole();
        translate([0,0,bodyHeight-4.5]) lidEngagementBumps();
    }
    
    connector();
    feed(feedPipeOuterDiameter);
    
}

module lidEngagementBumps() {
    for(i=[1:bodyFacets]) {
        rotate(a=[0,0,((bodyFacetAngle/2)*(i/2))]) translate([(bodyOuterDiameter/2)-2.3,0,0]) scale([0.3,1,1]) sphere(d=3, $fn=30);
    }
}

module lid() {
    height=10;
    gap=1;
    module skin() {
        difference() {
            cylinder(d=bodyOuterDiameter+(bodyWall*2),h=height, $fn=bodyFacets);
            translate([0,0,-bodyWall]) cylinder(d=bodyOuterDiameter+gap,h=height, $fn=bodyFacets);
        }
    }
    
    module connectorHole() {
        cylinder(d=downPipeOuterDiameter+0.4, h=height+15);
    }
    
    module connectorFlange() {
        wall=2;
        cylinder(d=downPipeOuterDiameter+(wall*2), h=10);
    }
    
    difference() {
        union() {
            skin();    
            connectorFlange();
        }
        translate([0,0,-1]) connectorHole();
    }

    translate([0,0,3.5]) rotate([0,0,bodyFacetAngle+90]) lidEngagementBumps();
}

module lidEngagementBumps() {
    for(i=[1:bodyFacets]) {
        rotate(a=[0,0,((bodyFacetAngle/2)*(i/2))]) translate([(bodyOuterDiameter/2)-2.3,0,0]) scale([0.3,1,1]) sphere(d=3, $fn=30);
    }
}

body();
translate([0,0,bodyHeight + 20]) rotate([0,0,bodyFacetAngle+90]) lid();

%translate([0,-50,23.5]) rotate([90,0,0]) cylinder(d=43,h=50);

//Part: body();
//Part: lid();