The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

Tag: Gardening

Growing and sometimes fixing

  • Garden Soaker Hose Connector Repair

    Two of Mary’s garden soaker hoses failed their pre-installation checks with leaks from around their connectors. The problem seemed to be a break in the hose inside the connector, with water spewing out of the connector around the hose. Having previously fixed a gash in another hose, I figured I might have some success at fixing these leaks.

    The general idea is to squish enough silicone rubber inside the connector to seal around the hose, then clamp the hose and connector snugly enough to hold the rubber in place:

    Soaker Hose Connector Clamp - Show view
    Soaker Hose Connector Clamp – Show view

    The enlarged recess fits around the brass connector shell, which is squashed loosely around the hose and from which the leaking water emerges. Of course, because this is a different hose, the previous model didn’t quite fit and I had to doodle up new geometry:

    Soaker Hose Connector repair - Dimension doodle
    Soaker Hose Connector repair – Dimension doodle

    As before, I bandsawed aluminum backing plates to ensure the plastic didn’t get all bendy in the middle:

    Soaker hose connector leak clamps
    Soaker hose connector leak clamps

    The hose clamp (!) around the connector on the far right ensures a split in the brass shell doesn’t get any larger.

    They’ll spend the rest of their lives under the garden mulch, where nobody will ever see those bulky lumps. Life is good!

    The OpenSCAD source code as a GitHub Gist:

    // Rubber Soaker Hose End Connector Clamp
    // Helps hold silicone rubber in connector
    // Ed Nisley KE4ZNU June 2019
    Layout = "Build"; // [Hose,Connector,Block,Show,Build]
    //- Extrusion parameters must match reality!
    /* [Hidden] */
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    Protrusion = 0.1; // make holes end cleanly
    inch = 25.4;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    //———-
    // Dimensions
    // Hose lies along X axis
    Hose = [200,26.5,11.6]; // X=very long, Y=width, Z=overall height
    RimThick = 10.3; // outer sections
    RimOD = RimThick;
    RimFlatRecess = 1.0; // recess to front flat surface
    OuterOC = Hose.y – RimOD; // outer tube centers
    RecessM = 0.8; // back recess chord
    RecessC = OuterOC;
    RecessR = (pow(RecessM,2) + pow(RecessC,2)/4) / (2*RecessM);
    RidgeM = 1.6; // front ridge chord
    RidgeC = 7.5;
    RidgeR = (pow(RidgeM,2) + pow(RidgeC,2)/4) / (2*RidgeM);
    HoseSides = 12*4;
    Connector = [5.0,33.0,13.0]; // oval brass: X=snout Y=width Z=dia
    Block = [20.0,50.0,4.0 + Hose.z]; // overall splice block size
    echo(str("Block: ",Block));
    Kerf = 0.5; // cut through middle to apply compression
    ID = 0;
    OD = 1;
    LENGTH = 2;
    // 8-32 stainless screws
    Screw = [4.1,8.0,3.0]; // OD = head LENGTH = head thickness
    Washer = [4.4,9.5,1.0];
    Nut = [4.1,9.7,6.0];
    CornerRadius = Washer[OD]/2;
    ScrewOC = Block.y – 2*CornerRadius;
    echo(str("Screw OC: x=",ScrewOC.x," y=",ScrewOC.y));
    //———————-
    // Useful routines
    module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes
    Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
    FixDia = Dia / cos(180/Sides);
    cylinder(d=(FixDia + HoleWindage),h=Height,$fn=Sides);
    }
    // Hose shape
    // This includes magic numbers measured from reality
    module HoseProfile() {
    rotate([0,-90,0])
    translate([0,0,-Hose.x/2])
    linear_extrude(height=Hose.x,convexity=4)
    difference() {
    union() {
    for (j=[-1,1]) // outer channels
    translate([0,j*OuterOC/2])
    circle(d=RimOD,$fn=HoseSides);
    translate([-RimOD/4,0]) // rear flat fill
    square([RimOD/2,OuterOC],center=true);
    translate([(RimOD/4 – RimFlatRecess),0]) // front flat fill
    square([RimOD/2,OuterOC],center=true);
    intersection() {
    translate([Hose.z/2,0])
    square([Hose.z,OuterOC],center=true);
    translate([-RidgeR + RimOD/2 – RimFlatRecess + RidgeM,0])
    circle(r=RidgeR,$fn=HoseSides);
    }
    }
    translate([-(RecessR + RimOD/2 – RecessM),0])
    circle(r=RecessR,$fn=2*HoseSides);
    }
    }
    // Outside shape of splice Block
    // Z centered on hose rim circles, not overall thickness through center ridge
    module SpliceBlock() {
    difference() {
    hull()
    for (i=[-1,1], j=[-1,1]) // rounded block
    translate([i*(Block.x/2 – CornerRadius),j*(Block.y/2 – CornerRadius),-Block.z/2])
    cylinder(r=CornerRadius,h=Block.z,$fn=4*8);
    for (j=[-1,1]) // screw holes
    translate([0,
    j*ScrewOC/2,
    -(Block.z/2 + Protrusion)])
    PolyCyl(Screw[ID],Block.z + 2*Protrusion,6);
    cube([2*Block.x,2*Block.y,Kerf],center=true); // slice through center
    }
    }
    // Splice block less hose
    module ShapedBlock() {
    difference() {
    SpliceBlock();
    HoseProfile();
    Connector();
    }
    }
    // Brass connector end
    module Connector() {
    translate([-(Block.x/2 + Protrusion),0,0])
    rotate([0,90,0])
    linear_extrude(height=Connector.x + Protrusion)
    hull()
    for (i = [-1,1])
    translate([0,i*(Connector.y – Connector.z)/2])
    circle(d=Connector.z);
    }
    //———-
    // Build them
    if (Layout == "Hose")
    HoseProfile();
    if (Layout == "Block")
    SpliceBlock();
    if (Layout == "Connector")
    Connector();
    if (Layout == "Show") {
    ShapedBlock();
    color("Green",0.25)
    HoseProfile();
    }
    if (Layout == "Build") {
    SliceOffset = 0;
    intersection() {
    translate([SliceOffset,0,Block.z/4])
    cube([4*Block.x,4*Block.y,Block.z/2],center=true);
    union() {
    translate([0,0.6*Block.y,Block.z/2])
    ShapedBlock();
    translate([0,-0.6*Block.y,Block.z/2])
    rotate([0,180,0])
    ShapedBlock();
    }
    }
    }

  • Garden Hose Y-Valve Autopsy

    One of the handles snapped off a Y valve at the garden and I finally got around to an autopsy:

    Garden Y Valve - cross sectioned
    Garden Y Valve – cross sectioned

    That’s using a 24 tpi bandsaw blade, which doesn’t cut nearly as smoothly as a fancy diamond saw, but seems good enough for the purpose. Most of the ripply shading on the cut plane comes from specular reflections; it’s pot metal all the way through and cuts to a high shine.

    A closeup shows more detail around the (now hemispheric) ball valve:

    Garden Y Valve - thread detail
    Garden Y Valve – thread detail

    You can see faint straight lines just inside the hose threads, which gives a hint of what’s to come.

    Pry out the sectioned ball and dislodge the O-ring from the now-obvious insert:

    Garden Y Valve - O-rings
    Garden Y Valve – O-rings

    Gently squish the threads in the bench vise to pop out the insert:

    Garden Y Valve - plug removed
    Garden Y Valve – plug removed

    If lives depended on it, one could dismantle and repair the valve without recourse to a bandsaw, but …