Archive for March 24th, 2015

Detergent Cap Holder

Although chain mail provides a good test of the M2’s setup and slicing parameters, it doesn’t offer much in the way of infill. To test that, I designed a holder for the cap of the bulk laundry detergent container:

Detergent Cap Holder - in place

Detergent Cap Holder – in place

The container must rest on its side, but if you snap the cap back in place, detergent will ooze out between the cap and the container and drip on whatever’s below. The never-sufficiently-to-be-damned Whirlpool high-efficiency front loading washer vibrates like crazy during the spin cycle, shaking anything from its top to the floor. The cap must sit in a cup to catch the inevitable ooze down its side, the wire shelf already has a bunch of other crap on it, and I needed a bulky test object, soooo ….

We regard that detergent container and its cap as a botched design.


The holder has pair of holes in its back surface for the copper (!) hangers:

Detergent Cap Holder - solid model - rear

Detergent Cap Holder – solid model – rear

I stripped a length of 10 AWG wire, straightened & annealed it, bent up a pair of hooks, then hammered them just flat enough to work-harden the copper, and they were all good.

Printing that massive block with 20% infill showed that the nozzle collected enough PETG during the first few layers to leave a substantial booger behind:

Detergent cup holder - oxidized PETG

Detergent cup holder – oxidized PETG

Fortunately, that was the only one and it ended up on the inside, tucked out of sight.

The PETG deposit on the outside of the nozzle gradually darkens from the original magenta to brown, which I’m pretty sure means that it’s oxidizing / decomposing / going bad. There’s no obvious way to remove the booger during the print; I’ve taken to wiping the nozzle after each object, while it’s still hot and the PETG remains flexible.

Because the nozzle didn’t accumulate any more PETG during the rest of the print, it’s not a constant problem, but I have seen boogers several times so far.

Perhaps continued refinement of the slicing parameters will help? One can always hope…

The OpenSCAD source code:

// Detergent Cap Holder
// Ed Nisley KE4ZNU - March 2015

Layout = "Show";			// Show Build

//- Extrusion parameters must match reality!

ThreadThick = 0.20;
ThreadWidth = 0.40;

HoleWindage = 0.2;

Protrusion = 0.1; 				// make holes end cleanly

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

// Dimensions

RecessX = 45.0;								// cap recess
RecessDia = 55.0;
RecessDepth = 10.0;
RecessSides = 16*4;

BaseThick = 5.0;							// block thickness below cap

PinDia = 2.5;
PinLength = 20.0;
PinOC = 65.0;
PinInset = 7.0;
PinZ = BaseThick;

Block = [RecessX,PinOC + 2*PinInset,30.0];	// overall block size (X to cap center)

FairingRadius = Block[2] - RecessDepth - BaseThick;


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

  RangeX = floor(95 / Space);
  RangeY = floor(125 / Space);

	for (x=[-RangeX:RangeX])
	  for (y=[-RangeY:RangeY])


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 Holder() {
	difference() {
		union() {									// main shape
		for (j=[-1,1])								// mounting pin holes
			translate([-(Block[0] + Protrusion),j*PinOC/2,PinZ])
				rotate([0,90,0]) rotate(180/6)
					PolyCyl(PinDia,PinLength + Protrusion,6);
		translate([0,0,Block[2]])					// fairing arc
		translate([Block[0]/2,0,Block[2]/2 + RecessDepth + BaseThick])	// flat top

// Build it!


if (Layout == "Show") {

if (Layout == "Build") {