Plant Stand Feet

The houseplants have migrated indoors after spending a summer charging up in the sun on the patio, which means it’s time to replace the silicone rubber feet on the bottom of the plant shelves. This year, I printed a set of feet to fit the hex-head adjustable feet:

Plant Stand Foot - installed
Plant Stand Foot – installed

The pencil-stem plant on the left, for whatever it’s worth, is a perfectly healthy Rhipsalis that greatly enjoyed the summer sun.

The feet print upside-down to give the surface around the hex a smooth finish. I used Slic3r’s Hilbert Curve for pattern a bit more interesting than the usual parallel lines:

Plant Shelf Foot - as built
Plant Shelf Foot – as built

The Hilbert curve doesn’t fit neatly into a non-rectangular shape, but it’s close enough.

The solid model includes the support structure:

Plant Shelf Foot - solid model - bottom
Plant Shelf Foot – solid model – bottom

Which pops out cleanly:

Plant Shelf Foot - support material detail
Plant Shelf Foot – support material detail

Yes, that’s a shred of red filament embedded on the left side. Cleanliness is next to impossible…

The fuzzy felt feet come from a 6 mm thick slab of the stuff:

Plant Shelf Foot - cutting felt plugs
Plant Shelf Foot – cutting felt plugs

The round socket wall leaves about 2 mm of felt showing at the bottom; it’s not very compressible and that should suffice to keep the plastic off the table.

The OpenSCAD source code:

// Feet for a wire-shelf plant stand
// Ed Nisley KE4ZNU October 2013

Layout = "Build";			// Show Build

Support = true;

//- 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

StandFootOD = 18.0;			// hex across flats
StandFootDepth = 5.0;		//  ... socket depth

FeltPadOD = 25.0;			// felt foot diameter
FeltPadDepth = 4.0;			//  ... depth

FootBaseThick = 6*ThreadThick;	// between foot and pad
FootWall = 4*ThreadWidth;		// around exterior

FootOD = 2*FootWall + max(StandFootOD,FeltPadOD);
echo(str("Foot OD: ",FootOD));

FootTall = StandFootDepth + FootBaseThick + FeltPadDepth;
echo(str(" ... height: "),FootTall);

NumSides = 8*4;

//----------------------
// Useful routines

module FootPad() {

	difference() {

		cylinder(r=FootOD/2,h=FootTall,$fn=NumSides);

		translate([0,0,FeltPadDepth + FootBaseThick])
			PolyCyl(StandFootOD,2*StandFootDepth,6);

		translate([0,0,-Protrusion])
			PolyCyl(FeltPadOD,(FeltPadDepth + Protrusion),NumSides);

	}
}

// Locating pin hole with glue recess

module LocatingPin() {

	translate([0,0,-ThreadThick])
		PolyCyl((PinOD + 2*ThreadWidth),2*ThreadThick,4);
	translate([0,0,-(PinLength/2 + ThreadThick)])
		PolyCyl(PinOD,(PinLength + 2*ThreadThick),4);

}

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

}

//-------------------
// Build it...

ShowPegGrid();

if (Layout == "Show")
	FootPad();

if (Layout == "Build") {
	translate([0,0,FootTall])
		rotate([180,0,0])
			FootPad();
	if (Support)
		color("Yellow")
			for (Seg=[0:5]) {
				rotate(30 + 360*Seg/6)
				translate([0,0,(StandFootDepth - ThreadThick)/2])
					cube([(StandFootOD - 3*ThreadWidth),
						  2*ThreadWidth,
						  (StandFootDepth - ThreadThick)],
						  center=true);
				}
}