Improved OXO Can Opener Knob

We recently replaced a defunct can opener with an OXO opener that removes can lids without creating razor-sharp edges. Unfortunately, the knob doesn’t agree well with Mary’s hand, so I laid out a prototype doorknob-shaped cap (and also removed all the can lids that confronted her):

OXO Can Opener Knob
OXO Can Opener Knob

It prints in four parts: the flat cover and three pillars, with two filament snippets aligning each pillar. The internal openings of this model do not fit the OXO knob’s lobes correctly; a Dremel sanding drum worked wonderfully well to make it fit. The next version should have much smaller pillar bases with a bit more clearance at the top: measurements from the as-adapted pillars will be in order.

Gluing everything together once again justifies having Too Many Clamps:

OXO Can Opener - gluing knob cover
OXO Can Opener – gluing knob cover

I intended to secure cap to knob with 2-56 screws in those recessed holes and even went so far as to flatten the top of the knob’s lobes in preparation for drilling:

OXO Can Opener - knob flats
OXO Can Opener – knob flats

However, Dragorn of Kismet gave me a few packets of only slightly outdated Sugru (a great idea that’s far too spendy and short-lived for my shop) that solved the problem:

OXO Can Opener - knob cover with silicone tape
OXO Can Opener – knob cover with silicone tape

The silicone tape wrap greatly improves the griptitude.

Early returns indicate this works reasonably well, but the top should be more rounded and tapered. It goes without saying that black filament would be much less ugly…

The OpenSCAD source code, with the caveat that the as-printed knob won’t fit without considerable abrasive adjustment:

// OXO Softworks Can Opener
//  Enlarged & rounded knob
// Ed Nisley KE4ZNU December 2012

include </mnt/bulkdata/Project Files/Thing-O-Matic/MCAD/units.scad>
include </mnt/bulkdata/Project Files/Thing-O-Matic/Useful Sizes.scad>

// Layout options

Layout = "Cap";
                    // Overall layout: Build1 Build2
                    // Parts: Cap Knob

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

ThreadThick = 0.25;
ThreadWidth = 2.0 * ThreadThick;

HoleWindage = 0.2;

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

Protrusion = 0.1;           // make holes end cleanly

//----------------------
// Dimensions

TriLobeRad = 37.5;					// radius: center to end of lobe
TriLobeOD = 2*TriLobeRad;
TriLobePeakRad = 23.0;				// radius: center to peak height
TriLobeHeight = 22.5;

WingArcRad2 = 48;					// Arc between knob lobes, top
WingArcRad1 = WingArcRad2 - 5;		//
WingArcOffset = 14.0;				// Knob center to arc2 radius

KnobOD1 = 70;						// maximum dia without chamfer
KnobOD2 = 65;						// top dia

KnobSides = 3*4;					// maintain 3-side symmetry

DomeHeight = 8;						// dome shape above lobes

KnobHeight = DomeHeight + TriLobeHeight;

DomeOD = KnobOD2 + (KnobOD1 - KnobOD2)*(DomeHeight/KnobHeight);

DomeArcRad = (pow(KnobHeight,2) + pow(DomeOD,2)/4) / (2*DomeHeight);

ScrewDia = Tap2_56;
ScrewHeadDia = Head2_56;
ScrewBase = 0.6*DomeHeight - Head2_56Thick;

AlignPinDia = 3.0;
AlignPinCircleRad = 0.55*(WingArcOffset + KnobOD2/2);
AlignPinDepth = 3.0;

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

module ShowPegGrid(Space = 10.0,Size = 1.0) {

    Range = floor(50 / Space);

    for (x=[-Range:Range])
        for (y=[-Range:Range])
            translate([x*Space,y*Space,Size/2])
            %cube(Size,center=true);

}

//-------------------
// Component parts

module TriKnob() {
	intersection() {
		difference(convexity=3) {
			translate([0,0,-Protrusion])
				cylinder(r=TriLobeRad,h=(TriLobeHeight + 2*Protrusion));
			for (i=[-1:1])
				rotate(i*120)
					translate([(WingArcOffset + WingArcRad2),0,-TriLobeHeight/2])
						cylinder(r1=WingArcRad1,r2=WingArcRad2,h=2*TriLobeHeight);
		}
		translate([0,0,TriLobeHeight/2])
		cube([2*KnobOD1,2*KnobOD2,TriLobeHeight],center=true);
	}
}

module KnobCap() {
	difference() {
		intersection() {
			translate([0,0,(KnobHeight-DomeArcRad)])
				rotate(180/KnobSides)
					sphere(r=DomeArcRad,$fa=180/KnobSides);
			difference(convexity=4) {
				rotate(180/KnobSides)
					cylinder(r1=KnobOD1/2,r2=KnobOD2/2,h=KnobHeight,$fn=KnobSides);
				TriKnob();
			}
			rotate(180/KnobSides)
				cylinder(r1=KnobOD2/2,r2=KnobOD1/2,h=KnobHeight,$fn=KnobSides);
		}
		for (i=[-1:1])
			rotate(i*120) {
				translate([-TriLobePeakRad,0,0]) {
					PolyCyl(ScrewDia,KnobHeight);
					translate([0,0,TriLobeHeight + ScrewBase])
						PolyCyl(ScrewHeadDia,KnobHeight);
				}
			}
		for (i=[-1:1]) for (j=[-1,1])
			rotate(i*120 + j*(270/KnobSides))
				translate([AlignPinCircleRad,0,(TriLobeHeight - AlignPinDepth - Protrusion)])
					PolyCyl(AlignPinDia,2*(AlignPinDepth + Protrusion));
	}
}

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

ShowPegGrid();

if (Layout == "Cap")
	difference() {
		KnobCap();
		cylinder(r=KnobOD1,h=Protrusion/2,center=true);
	}

if (Layout == "Knob")
	TriKnob();

if (Layout == "Build1")
	translate([0,0,-TriLobeHeight])
		difference() {
			KnobCap();
			translate([0,0,(TriLobeHeight - Protrusion)/2])
				cube([2*KnobOD1,2*KnobOD2,TriLobeHeight+Protrusion],center=true);
		}

if (Layout == "Build2")
	translate([0,0,TriLobeHeight])
		rotate([180,0,0])
			difference() {
				KnobCap();
				translate([0,0,(TriLobeHeight + TriLobeHeight/2)])
					cube([2*KnobOD1,2*KnobOD2,TriLobeHeight],center=true);
			}

7 thoughts on “Improved OXO Can Opener Knob

    1. Dragorn of Kismet mentioned that recipe when he handed me the packets and I’m definitely going to try it out… after I use the last two outdated Sugru packets, of course. [grin]

      Thanks for the pointer to the writup: now everybody knows how to mix it up.

      Note, however, that potting electronics in the silicone mix is a Very Bad Idea, because (as they point out) “While it cures, it gives off Acetic acid” and acetic acid is not kind to metallic parts, conductors, and joints.

      1. I don’t know if it would help, but the GE Silicone II caulk doesn’t use the same chemistry. It’s a bit closer to an ammonia smell, so I wouldn’t want to try to pot electronics I cared about…

        In California, an outfit called TAP Plastics offered a castable silicone rubber for moldmaking and such. I recall these as tin catalyzed–the alternative is platinum(!), but no idea on the rest of the chemistry. A search got me to Reynolds Advanced materials which has more information.

        Really old memory (mid ’70s) has it that Motorola used to use a silicone to pot their DIP ICs, so it can be done. Don’t know if affordably.

        1. a castable silicone rubber for moldmaking

          A long time ago, in a universe far away, I worked with a medical team using some water-clear castable silicone rubber. We evidently got the mix wrong, but didn’t know it until the silicone went spung and hardened in mid-pour: a half-empty beaker connected to a half-filled mold by a frozen waterfall of transparent silicone.

          I’ve been suspicious of the stuff ever since.

  1. I am curious to see/read how well Sugru survives the dishwasher.

    1. Me, too!

      That job’s getting special hand-washing treatment, because my abrasive adjustment technique left the inside walls in shreds: the pillars would fill up with water and never dry out. The knob seems about the right size & shape on the outside, so I’ll eventually print one that actually fits the opener, mounts with those screws, and doesn’t leak like a sieve. In this case, the good is definitely the enemy of the better…

Comments are closed.