Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
OpenSCAD source code: shop vacuum adapters for PVC pipe fittings
// Vacuum Hose Fittings
// Ed Nisley KE4ZNU July 2016
Layout = "FVacFitting"; // PVCtoHose ExpandRing PipeToPort FVacPipe FVacFitting
//- Extrusion parameters must match reality!
// Print with 2 shells and 3 solid layers
ThreadThick = 0.25;
ThreadWidth = 0.40;
HoleWindage = 0.2;
Protrusion = 0.1; // make holes end cleanly
//----------------------
// Dimensions
ID = 0;
OD = 1;
LENGTH = 2;
Pipe = [34.0,(41.0 + HoleWindage),16.0]; // 1 inch PVC pipe fitting
VacPortSander = [30.0,31.3,25]; // vacuum port on belt sander (taper ID to OD over length)
VacNozzle = [30.1,31.8,30.0]; // nozzle on vacuum hose (taper ID to OD over length)
MINOR = 0;
MAJOR = 1;
PITCH = 2;
FORM_OD = 3;
HoseThread = [32.0,(37.0 + HoleWindage),4.25,(1.8 + 0.20)]; // vacuum tube thread info
NumSegments = 64; // .. number of cylinder approximations per turn
$fn = NumSegments;
ThreadLength = 4 * HoseThread[PITCH];
ScrewOAL = ThreadLength + HoseThread[PITCH];
WallThick = 2.5;
echo(str("Pitch dia: ",HoseThread[MAJOR]));
echo(str("Root dia: ",HoseThread[MAJOR] - HoseThread[FORM_OD]));
echo(str("Crest dia: ",HoseThread[MAJOR] + HoseThread[FORM_OD]));
//----------------------
// Wrap cylindrical thread segments around larger plug cylinder
module CylinderThread(Pitch,Length,PitchDia,ThreadOD,PerTurn,Chirality = "Right") {
CylFudge = 1.02; // force overlap
ThreadSides = 6;
RotIncr = 1/PerTurn;
PitchRad = PitchDia/2;
Turns = Length/Pitch;
NumCyls = Turns*PerTurn;
ZStep = Pitch / PerTurn;
HelixAngle = ((Chirality == "Left") ? -1 : 1) * atan(Pitch/(PI*PitchDia));
CylLength = CylFudge * (PI*(PitchDia + ThreadOD) / PerTurn) / cos(HelixAngle);
for (i = [0:NumCyls-1]) {
Angle = ((Chirality == "Left") ? -1 : 1) * 360*i/PerTurn;
translate([PitchRad*cos(Angle),PitchRad*sin(Angle),i*ZStep])
rotate([90+HelixAngle,0,Angle]) rotate(180/ThreadSides)
cylinder(r1=ThreadOD/2,
r2=ThreadOD/(2*CylFudge),
h=CylLength,
center=true,$fn=ThreadSides);
}
}
//-- PVC fitting to vacuum hose
module PVCtoHose() {
Fitting = [34.0,41.0,16.0]; // 1 inch PVC elbow
Adapter = [HoseThread[MAJOR],(Fitting[OD] + 2*WallThick + HoleWindage),(ScrewOAL + Fitting[LENGTH])]; // dimensions for entire fitting
union() {
difference() {
cylinder(d=Adapter[OD],h=Adapter[LENGTH]); // overall fitting
translate([0,0,-Protrusion]) // remove thread pitch dia
cylinder(d=HoseThread[MAJOR],h=(ScrewOAL + 2*Protrusion));
translate([0,0,(ScrewOAL - Protrusion)]) // remove PVC fitting dia
cylinder(d=(Fitting[OD] + HoleWindage),h=(Fitting[LENGTH] + 2*Protrusion));
}
translate([0,0,HoseThread[PITCH]/2]) // add the thread form
CylinderThread(HoseThread[PITCH],ThreadLength,HoseThread[MAJOR],HoseThread[FORM_OD],NumSegments,"Left");
}
}
//-- Expander ring from small OD to large ID PVC fittings
// So a small elbow on the bandsaw fits into the hose adapter, which may not be long-term useful
module ExpandRing() {
Fitting_L = [34.0,41.0,16.0]; // 1 inch PVC pipe elbow
Fitting_S = [26.8,32.8,17]; // 3/4 inch PVC elbow
difference() {
cylinder(d1=Fitting_L[OD],d2=(Fitting_L[OD] - HoleWindage),h=Fitting_L[LENGTH]); // overall fitting
translate([0,0,-Protrusion])
cylinder(d=(Fitting_S[OD] + HoleWindage),h=(Fitting_L[LENGTH] + 2*Protrusion));
}
}
//-- 1 inch PVC pipe into vacuum port
// Stick this in the port, then plug a fitting onto the pipe section
module PipeToPort() {
Pipe = [26.5,33.5,20.0]; // 1 inch Schedule 40 PVC pipe
difference() {
union() {
cylinder(d=Pipe[OD],h=(Pipe[LENGTH] + Protrusion));
translate([0,0,(Pipe[LENGTH] - Protrusion)])
cylinder(d1=VacNozzle[OD],d2=VacNozzle[ID],h=VacNozzle[LENGTH]);
}
translate([0,0,-Protrusion])
cylinder(d=Pipe[ID],h=(Pipe[LENGTH] + VacNozzle[LENGTH] + 2*Protrusion));
}
}
//-- Female Vac outlet inside PVC pipe
// Plug this into PVC fitting, then plug hose + nozzle into outlet
module FVacPipe() {
Pipe = [26.5,33.5,20.0]; // 1 inch Schedule 40 PVC pipe
difference() {
cylinder(d=Pipe[OD],h=VacPortSander[LENGTH]);
translate([0,0,-Protrusion])
cylinder(d1=VacPortSander[ID],d2=VacPortSander[OD],h=(VacPortSander[LENGTH] + 2*Protrusion));
}
}
//-- Female Vac outlet on 3/4 inch fitting OD
// Jam this onto OD of fitting, plug hose + nozzle into outlet
module FVacFitting() {
Adapter = [26.5,(33.5 + 2*WallThick),17.0]; // overall adapter
VacPortSander = [30.0,31.3,25]; // vacuum port on belt sander (taper ID to OD over length)
Fitting = [26.8,32.8,17]; // 3/4 inch PVC elbow
TaperLength = 5.0; // inner taper to avoid overhang
difference() {
cylinder(d=Adapter[OD],h=Adapter[LENGTH]); // overall fitting
translate([0,0,-Protrusion])
cylinder(d=(Fitting[OD] + HoleWindage),h=(Adapter[LENGTH] + 2*Protrusion));
}
translate([0,0,Adapter[LENGTH]])
difference() {
cylinder(d=Adapter[OD],h=TaperLength);
translate([0,0,-Protrusion])
cylinder(d1=(Fitting[OD] + HoleWindage),d2=VacPortSander[ID],h=(TaperLength + 2*Protrusion));
}
translate([0,0,(TaperLength + Adapter[LENGTH])]) // vac fitting
difference() {
cylinder(d=Adapter[OD],h=VacPortSander[LENGTH]);
translate([0,0,-Protrusion])
cylinder(d1=VacPortSander[ID],d2=VacPortSander[OD],h=(VacPortSander[LENGTH] + 2*Protrusion));
}
}
//----------
// Build things
if (Layout == "PVCtoHose")
PVCtoHose();
if (Layout == "ExpandRing") {
ExpandRing();
}
if (Layout == "PipeToPort") {
PipeToPort();
}
if (Layout == "FVacPipe") {
FVacPipe();
}
if (Layout == "FVacFitting") {
FVacFitting();
}
@ednisley

This comment has been minimized.

Copy link
Owner Author

commented Jul 1, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.