Advertisements

Archive for November 23rd, 2015

Kenmore Vacuum Cleaner Tool Adapters

After donating the neversufficiently-to-be-damned Samsung vacuum cleaner (and all its remaining bags & doodads) to a nonprofit’s tag sale, we picked up a Sears Kenmore Progressive vacuum cleaner that seemed to be the least awful of the current offerings. Unlike all previous vacuum cleaners, its tools & doodads have complex plastic fittings with latches and keyways and all manner of gimcrackery. The designers seem to have hands and legs of far-above-average size, but that’s another rant.

All this came to a head when I attempted to vacuum the fuzz out of the refrigerator’s evaporator coils, because the long snout that reaches the back of the refrigerator doesn’t fit the aperture in the giant handle.

Well, at least I can fix that

The first step involved modeling the plastic fitting that snaps into the handle:

Kenmore Male Fitting - Solid model

Kenmore Male Fitting – Solid model

The latch on the handle snaps into an opening that took some tinkering to reproduce. Stand back, I’m going to use trigonometry:

            translate([0,-11.5/2,23.0 - 5.0])                                    // latch opening
                cube(Latch);
                
            translate([OEMTube[ID1]/2 + EntryHeight/tan(90-EntryAngle),0,0])    // latch ramp
                translate([(Latch[1]/cos(180/EntrySides))*cos(EntryAngle)/2,0,(Latch[1]/cos(180/EntrySides))*sin(EntryAngle)/2])
                    rotate([0,-EntryAngle,0])
                        intersection() {
                            rotate(180/EntrySides)
                                PolyCyl(Latch[1],Latch[0],EntrySides);
                            translate([-(2*Latch[0])/2,0,-Protrusion])
                                cube(2*Latch[0],center=true);
                        }

Which spits out two suitable shapes with the proper positions and alignments:

Kenmore Male Fitting - Latch detail - Solid model

Kenmore Male Fitting – Latch detail – Solid model

The magic wand for the refrigerator originally slid into the Samsung’s metal pipe, so I put a slightly tapered cylinder inside a somewhat more tapered exterior (which seems chunky enough to withstand my flailing around under the refrigerator), then topped it off with the male fitting:

Refrigerator Coil Wand Adapter

Refrigerator Coil Wand Adapter

The Kenmore crevice tool snaps under the gargantuan plastic handle, which limits it to being 6.5 inches long, totally unable to reach into any of the nontrivial crevices around here, and in the way when it’s not being used. Some rummaging turned up a longer crevice tool from the Electrolux That Came With The House™, an old-school tool that slipped over its pipe. Modeling a straight cylinder inside a tapered cylinder that fits the tool didn’t take long:

Crevice Tool Adapter

Crevice Tool Adapter

Flushed with success, I found a smaller floor brush than the new Kenmore, with dimensions similar to the Electrolux snout, so another module appeared:

Floor Brush Adapter

Floor Brush Adapter

All of them build with the latch end upward to avoid needing support structure, with a 5 mm brim for good platform adhesion:

Floor Brush Adapter - Slic3r preview

Floor Brush Adapter – Slic3r preview

I printed them during the PDS Mini Maker Faire as examples of Useful Things You Can Do With a 3D Printer:

Kenmore Vacuum Cleaner - Tool Adapters

Kenmore Vacuum Cleaner – Tool Adapters

As I pointed out to nearly everybody, the Big Lie about 3D printing is that you’ll just download somebody else’s model to solve your problem. In general, that won’t work, because nobody else has your problem; if you can’t do solid modeling, there’s no point in you having a 3D printer. There’s also no point in going to Kinko’s to get a standardized 3D printed doodad, because you can just order a better-looking injection-molded part directly from Sears (or an aftermarket source) and be done with it.

I loves me some good OpenSCAD action on my Makergear M2, though…

The OpenSCAD source code:

// Kenmore vacuum cleaner nozzle adapters
// Ed Nisley KE4ZNU November 2015

// Layout options

Layout = "CreviceTool";        // MaleFitting CoilWand FloorBrush CreviceTool

//- Extrusion parameters must match reality!
//  Print with +1 shells and 3 solid layers

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

ID1 = 0;                                                // for tapered tubes
ID2 = 1;
OD1 = 2;
OD2 = 3;
LENGTH = 4;

OEMTube = [35.0,35.0,41.7,40.5,30.0];                    // main fitting tube
EndStop = [OEMTube[ID1],OEMTube[ID2],47.5,47.5,6.5];    // flange at end of main tube

FittingOAL = OEMTube[LENGTH] + EndStop[LENGTH];

$fn = 12*4;

//----------------------
// 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);
}


//-------------------
// Male fitting on end of Kenmore tools
// This slides into the end of the handle or wand and latches firmly in place

module MaleFitting() {
    
Latch = [40,11.5,5.0];                    // rectangle latch opening
EntryAngle = 45;                        // latch entry ramp
EntrySides = 16;
EntryHeight = 15.0;                        // lower edge on *inside* of fitting

KeyRadius = 1.0;
        
    translate([0,0,6.5])
        difference() {
            union() {
                cylinder(d1=OEMTube[OD1],d2=OEMTube[OD2],h=OEMTube[LENGTH]);            // main tube
                
                hull()                                                                    // insertion guide
                    for (i=[-(6.0/2 - KeyRadius),(6.0/2 - KeyRadius)], 
                        j=[-(28.0/2 - KeyRadius),(28.0/2 - KeyRadius)], 
                        k=[-(26.0/2 - KeyRadius),(26.0/2 - KeyRadius)])
                        translate([(i - (OEMTube[ID1]/2 + OEMTube[OD1]/2)/2 + 6.0/2),j,(k + 26.0/2 - 1.0)])
                            sphere(r=KeyRadius,$fn=8);
                
                translate([0,0,-EndStop[LENGTH]])                                // wand tube butts against this
                    cylinder(d=EndStop[OD1],h=EndStop[LENGTH] + Protrusion);
            }
            
            translate([0,0,-OEMTube[LENGTH]])                                    // main bore
                cylinder(d=OEMTube[ID1],h=2*OEMTube[LENGTH] + 2*Protrusion);
                
            translate([0,-11.5/2,23.0 - 5.0])                                    // latch opening
                cube(Latch);
                
            translate([OEMTube[ID1]/2 + EntryHeight/tan(90-EntryAngle),0,0])    // latch ramp
                translate([(Latch[1]/cos(180/EntrySides))*cos(EntryAngle)/2,0,(Latch[1]/cos(180/EntrySides))*sin(EntryAngle)/2])
                    rotate([0,-EntryAngle,0])
                        intersection() {
                            rotate(180/EntrySides)
                                PolyCyl(Latch[1],Latch[0],EntrySides);
                            translate([-(2*Latch[0])/2,0,-Protrusion])
                                cube(2*Latch[0],center=true);
                        }
        }
}

//-------------------
// Refrigerator evaporator coil wand

module CoilWand() {
    
    union() {
        translate([0,0,50.0])
            rotate([180,0,0])
                difference() {
                    cylinder(d1=EndStop[OD1],d2=42.0,h=50.0);
                    translate([0,0,-Protrusion])
                        cylinder(d1=35.0,d2=35.8,h=100);
                }
        translate([0,0,50.0 - Protrusion])
            MaleFitting();
    }
}


//-------------------
// Refrigerator evaporator coil wand

module FloorBrush() {
    
    union() {
        translate([0,0,60.0])
            rotate([180,0,0])
                difference() {
                    union() {
                        cylinder(d1=EndStop[OD1],d2=32.4,h=10.0);
                        translate([0,0,10.0 - Protrusion])
                            cylinder(d1=32.4,d2=30.7,h=50.0 + Protrusion);
                    }
                    translate([0,0,-Protrusion])
                        cylinder(d1=28.0,d2=24.0,h=100);
                }
        translate([0,0,60.0 - Protrusion])
            MaleFitting();
    }
}


//-------------------
// Crevice tool

module CreviceTool() {
    
    union() {
        translate([0,0,60.0])
            rotate([180,0,0])
                difference() {
                    union() {
                        cylinder(d1=EndStop[OD1],d2=32.0,h=10.0);
                        translate([0,0,10.0 - Protrusion])
                            cylinder(d1=32.0,d2=30.4,h=50.0 + Protrusion);
                    }
                    translate([0,0,-Protrusion])
                        cylinder(d1=28.0,d2=24.0,h=100);
                }
        translate([0,0,60.0 - Protrusion])
            MaleFitting();
    }
}




//----------------------
// Build it!

if (Layout == "MaleFitting")
    MaleFitting();

if (Layout == "CoilWand")
    CoilWand();

if (Layout == "FloorBrush")
    FloorBrush();

if (Layout == "CreviceTool")
    CreviceTool();

Advertisements

, ,

9 Comments