← Parametric Adapter results

Parametric Adapter

GPT 5.6 terra · legacy

Reviews & generation details

Reviews

No human review yet. Unreviewed does not mean unsuccessful.

Generation context

Imported historical artifact. Its exact original instructions and lineage are not known.

Generation prompt · exact text unavailable

See the current prompt for reference. It may differ from the instructions used to generate this artifact.

Inspect original source 3,010 bytes · SHA-256 bcec3cab610f
// 3/4 in GHT female to 1/2 in NPT male adapter
// Requires BOSL2: https://github.com/BelfrySCAD/BOSL2
// Print with the GHT end on the build plate.  Thread dimensions are nominal;
// tune THREAD_CLEARANCE for the particular printer and mating fitting.

include <BOSL2/std.scad>
include <BOSL2/threading.scad>

$fn = 96;

// Nominal thread data, in millimetres.
GHT_MAJOR_D       = 26.90;          // 3/4-11.5 NH (garden hose thread)
GHT_PITCH         = 25.4 / 11.5;
GHT_THREAD_LENGTH = 15.0;
NPT_MAJOR_D       = 21.223;         // 1/2-14 NPT large-end major diameter
NPT_PITCH         = 25.4 / 14;
NPT_THREAD_LENGTH = 16.0;
NPT_TAPER         = 1/16;           // diameter taper per unit length
THREAD_CLEARANCE  = 0.25;

// Body dimensions.
HOSE_OD       = 34;
HOSE_LENGTH   = 22;
HEX_AF        = 27;
HEX_LENGTH    = 10;
THROAT_D      = 16;
BORE_D        = 13;
WASHER_SEAT_D = 29;
WASHER_SEAT_H = 2.2;

module ght_female_end() {
    // The internal-thread tool is subtracted from a stout hose-nut shell.
    difference() {
        cylinder(d=HOSE_OD, h=HOSE_LENGTH);

        // Flat seat for a standard garden-hose washer, at the open end.
        translate([0, 0, HOSE_LENGTH-WASHER_SEAT_H])
            cylinder(d=WASHER_SEAT_D, h=WASHER_SEAT_H+0.02);

        // BOSL2's internal thread includes the helical female thread form.
        // Its small clearance makes a printed female thread assemble reliably.
        translate([0, 0, HOSE_LENGTH-GHT_THREAD_LENGTH])
            threaded_rod(
                d=GHT_MAJOR_D + THREAD_CLEARANCE,
                l=GHT_THREAD_LENGTH+0.04,
                pitch=GHT_PITCH,
                internal=true,
                blunt_start=true,
                blunt_end=true,
                anchor=BOTTOM
            );

        // Water passage below the threaded section.
        cylinder(d=THROAT_D, h=HOSE_LENGTH-GHT_THREAD_LENGTH+0.02);
    }
}

module npt_male_end() {
    // NPT is a 1:16 taper.  The threaded end points downward so the larger
    // nominal end meets the hex shoulder at z=0.
    translate([0, 0, -NPT_THREAD_LENGTH])
        threaded_rod(
            d=NPT_MAJOR_D,
            l=NPT_THREAD_LENGTH,
            pitch=NPT_PITCH,
            thread_angle=60,
            taper=NPT_TAPER,
            blunt_start=true,
            blunt_end=true,
            anchor=BOTTOM
        );
}

module adapter() {
    difference() {
        union() {
            ght_female_end();
            // Wrench flats between the hose nut and pipe thread.
            translate([0, 0, -HEX_LENGTH])
                cylinder(d=HEX_AF / cos(30), h=HEX_LENGTH, $fn=6);
            npt_male_end();
        }

        // Continuous unrestricted water passage.
        translate([0, 0, -NPT_THREAD_LENGTH-0.02])
            cylinder(d=BORE_D, h=HOSE_LENGTH+NPT_THREAD_LENGTH+0.04);

        // Small internal transitions avoid unsupported sharp re-entrant edges.
        translate([0, 0, -0.01])
            cylinder(d1=BORE_D, d2=THROAT_D, h=2);
    }
}

adapter();