// Pipe Fitting Generator /* [General Settings] */ // Choose fitting type Fitting_Type = "Coupler"; // [Coupler, Tee, Cross] // Choose measurement system Measurement_System = "Metric"; // [Metric, SAE] // Pipe outer diameter (mm for Metric, inches for SAE) Pipe_OD = 40; // [10:1:200] // Wall thickness (mm for Metric, inches for SAE) Wall_Thickness = 3; // [1:0.5:10] // Threaded or non-threaded Threaded = false; // [true, false] /* [Thread Settings] */ // Thread pitch (mm for Metric, threads per inch for SAE) Thread_Pitch = 3; // [0.5:0.25:5] // Thread depth (mm for Metric, inches for SAE) Thread_Depth = 1; // [0.5:0.25:3] /* [Hidden] */ $fn = 100; module pipe_segment(length) { difference() { cylinder(h=length, d=Pipe_OD + 2*Wall_Thickness); translate([0, 0, -0.1]) cylinder(h=length + 0.2, d=Pipe_OD - 2*Wall_Thickness); } } module thread(length) { pitch = (Measurement_System == "Metric") ? Thread_Pitch : 25.4 / Thread_Pitch; depth = (Measurement_System == "Metric") ? Thread_Depth : Thread_Depth * 25.4; difference() { cylinder(h=length, d=Pipe_OD + 2*Wall_Thickness); translate([0, 0, -0.1]) cylinder(h=length + 0.2, d=Pipe_OD - 2*Wall_Thickness); if (Threaded) { for (i = [0:pitch:length]) { translate([0, 0, i]) rotate_extrude() translate([Pipe_OD/2 + Wall_Thickness - depth/2, 0, 0]) circle(d=depth); } } } } module coupler() { length = Pipe_OD + 2*Wall_Thickness; thread(length); } module tee() { length = Pipe_OD + 2*Wall_Thickness; branch_length = (Pipe_OD + 2*Wall_Thickness) / 2; difference() { union() { thread(length); rotate([0, 90, 0]) translate([0, 0, 2*-branch_length]) thread(4*branch_length); } // Main pipe hole translate([0, 0, -length/ - 0.1]) cylinder(h=length + 0.2, d=Pipe_OD - 2*Wall_Thickness); // Branch hole rotate([0, 90, 0]) translate([0, 0, -branch_length - 0.1]) cylinder(h=2*branch_length + 0.2, d=Pipe_OD - 2*Wall_Thickness); } } module cross() { length = Pipe_OD + 2*Wall_Thickness; difference() { union() { // + X-axis branches rotate([0, 90, 0]) thread(length); // + Z-axis branches thread(length); // - X-axis branches rotate([0, -90, 0]) thread(length); rotate([0, 180, 0]) // - Z-axis branches thread(length); } // X-axis hole rotate([0, 90, 0]) translate([0, 0, -length/2 - 0.1]) cylinder(h=length + 0.2, d=Pipe_OD - 2*Wall_Thickness); // Z-axis hole translate([0, 0, -length/2 - 0.1]) cylinder(h=length + 0.2, d=Pipe_OD - 2*Wall_Thickness); } } if (Fitting_Type == "Coupler") { coupler(); } else if (Fitting_Type == "Tee") { tee(); } else if (Fitting_Type == "Cross") { cross(); }