-
ShopVac Hose Barb Adapter
A small ShopVac arrived with a ribbed hose carrying an absurdly long wand, so I conjured a barbed adapter with a much shorter tapered snout for the machine tools:

Vacuum hose fittings – hose barb to nozzle Trimming the hose end at one of the ribs makes a tidy fit:

Vacuum hose fittings – ribbed hose barb Now I need not trip over the vacuum hose between the bandsaw bench and the sander bench…
The OpenSCAD code as a GitHub Gist:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters// Vacuum Hose Fittings // Ed Nisley KE4ZNU July 2016 // March 2017 Layout = "HoseBarb"; // PVCtoHose ExpandRing PipeToPort FVacPipe FVacFitting HoseBarb //– 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; 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 hose thread 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 = "Left") { 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() { VacPort = [30.0,31.3,25]; // vacuum port on belt sander (taper ID to OD over length) Pipe = [26.5,33.5,20.0]; // 1 inch Schedule 40 PVC pipe difference() { cylinder(d=Pipe[OD],h=VacPort[LENGTH]); translate([0,0,–Protrusion]) cylinder(d1=VacPort[ID],d2=VacPort[OD],h=(VacPort[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 //VacPort = [30.0,31.3,25]; // vacuum port on belt sander (taper ID to OD over length) VacPort = [30.1,31.8,30.0]; // vacuum port for bandsaw = inverse of hose nozzle 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=VacPort[ID],h=(TaperLength + 2*Protrusion)); } translate([0,0,(TaperLength + Adapter[LENGTH])]) // vac fitting difference() { cylinder(d=Adapter[OD],h=VacPort[LENGTH]); translate([0,0,–Protrusion]) cylinder(d1=VacPort[ID],d2=VacPort[OD],h=(VacPort[LENGTH] + 2*Protrusion)); } } //— Hose barb to male vacuum taper module HoseBarb() { HoseFitting = [29.0,32.2,38.5]; Barb = [HoseFitting[OD],35.5,4.0]; BarbOffset = 17.0; Seat = [HoseFitting[OD],36.0,5.0]; SeatSupport = [HoseFitting[OD],Seat[OD],(Seat[OD] – HoseFitting[OD])/2]; OAL = HoseFitting[LENGTH] + SeatSupport[LENGTH] + Seat[LENGTH] + VacNozzle[LENGTH]; NumSides = 4*8; difference() { union() { cylinder(d=HoseFitting[OD],h=HoseFitting[LENGTH],$fn=NumSides); translate([0,0,BarbOffset]) cylinder(d1=Barb[ID],d2=Barb[OD],h=Barb[LENGTH],$fn=NumSides); translate([0,0,HoseFitting[LENGTH]]) cylinder(d1=SeatSupport[ID],d2=SeatSupport[OD],h=SeatSupport[LENGTH],$fn=NumSides); translate([0,0,HoseFitting[LENGTH] + SeatSupport[LENGTH]]) cylinder(d=Seat[OD],h=Seat[LENGTH],$fn=NumSides); translate([0,0,HoseFitting[LENGTH] + SeatSupport[LENGTH] + Seat[LENGTH]]) cylinder(d1=VacNozzle[OD],d2=VacNozzle[ID],h=VacNozzle[LENGTH],$fn=NumSides); } translate([0,0,–Protrusion]) cylinder(d1=HoseFitting[ID],d2=(VacNozzle[ID] – 10*ThreadWidth),h=OAL + 2*Protrusion,$fn=NumSides); } } //———- // Build things if (Layout == "PVCtoHose") PVCtoHose(); if (Layout == "ExpandRing") { ExpandRing(); } if (Layout == "PipeToPort") { PipeToPort(); } if (Layout == "FVacPipe") { FVacPipe(); } if (Layout == "FVacFitting") { FVacFitting(); } if (Layout == "HoseBarb") { HoseBarb(); }