Dirt Devil Vacuum Tool Adapters

Being the domain expert for adapters between a new vacuum cleaner and old tools, this made sense (even though it’s not our vacuum):

Dirt Devil Nozzle Bushing - solid model
Dirt Devil Nozzle Bushing – solid model

The notch snaps into a Dirt Devil Power Stick vacuum cleaner and the tapered end fits a variety of old tools for other vacuum cleaners:

Dirt Devil Nozzle Bushing top view - solid model
Dirt Devil Nozzle Bushing top view – solid model

Having some experience breaking thin-walled adapters, these have reinforcement from a PVC tube:

Dirt Devil adapter - parts
Dirt Devil adapter – parts

A smear of epoxy around the interior holds the tube in place:

Dirt Devil adapters - assembled
Dirt Devil adapters – assembled

Building the critical dimensions with a 3D printed part simplified the project, because I could (and did!) tweak the OpenSCAD code to match the tapers to the tools. Turning four of those tubes from a chunk of PVC conduit, however, makes a story for another day.

The OpenSCAD source code as a GitHub Gist:

// Dirt Devil nozzle adapter
// Ed Nisley KE4ZNU 2021-10
// Tool taper shift
Finesse = -0.1; // [-0.5:0.1:0.5]
// PVC pipe liner
PipeOD = 28.5;
/* [Hidden] */
//- Extrusion parameters
ThreadThick = 0.25;
ThreadWidth = 0.40;
HoleWindage = 0.2;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
Protrusion = 0.1; // make holes end cleanly
//----------------------
// Dimensions
TAPER_MIN = 0;
TAPER_MAX = 1;
TAPER_LENGTH = 2;
Socket = [36.0,37.0,40.0];
LockringDia = 33.5;
LockringWidth = 4.5;
LockringOffset = 2.5;
Tool = [Finesse,Finesse,0] + [30.0,31.1,30.0];
AdapterOAL = Socket[TAPER_LENGTH] + Tool[TAPER_LENGTH];
NumSides = 36;
$fn = NumSides;
//----------------------
// 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(r=(FixDia + HoleWindage)/2,h=Height,$fn=Sides);
}
//-------------------
// Define it!
module Adapter() {
difference() {
union() {
difference() {
cylinder(d1=Socket[TAPER_MIN],d2=Socket[TAPER_MAX],h=Socket[TAPER_LENGTH]);
translate([0,0,LockringOffset])
cylinder(d=2*Socket[TAPER_MAX],h=LockringWidth);
}
cylinder(d=LockringDia,h=Socket[TAPER_LENGTH]);
translate([0,0,LockringOffset + 0.75*LockringWidth])
cylinder(d1=LockringDia,d2=Socket[TAPER_MIN],h=0.25*LockringWidth);
translate([0,0,Socket[TAPER_LENGTH]])
cylinder(d1=Tool[TAPER_MAX],d2=Tool[TAPER_MIN],h=Tool[TAPER_LENGTH]);
}
translate([0,0,-Protrusion])
PolyCyl(PipeOD,AdapterOAL + 2*Protrusion,NumSides);
}
}
//----------------------
// Build it!
Adapter();

The taper in the code almost certainly won’t fit whatever tool you have: measure thrice, print twice, and maybe fit once …