This table must sit across the threshold of a walk-in / sit-down shower, with the shower curtain draped across the table to keep the water inside.
Starting with another patio side table, as before, I installed a quartet of 5 mm stainless screws to lock the top panels in place and convert the table into a rigid assembly:
Because the shower floor is slightly higher than the bathroom floor, I conjured a set of foot pads to raise the outside legs:
The sloping top surface on the pads compensates for the angle on the end of the table legs:
I think the leg mold produces legs for several different tables, with the end angle being Close Enough™ for most purposes. Most likely, it’d wear flat in a matter of days on an actual patio.
Using good 3M outdoor-rated foam tape should eliminate the need for fiddly screw holes and more hardware:
The feet fit reasonably well:
They may need nonskid tape on those flat bottoms, but that’s in the nature of fine tuning.
And, as with the narrow table, it may need foam blocks to raise the top surface to arm level. Perhaps a pair of Yoga Blocks will come in handy for large adjustments.
The OpenSCAD source code as a GitHub Gist:
// Patio Side Table Feet | |
// Ed Nisley - KE4ZNU | |
// 2019-03 | |
/* [Layout Options] */ | |
Layout = "Build"; // [Show,Build] | |
/* [Extrusion Parameters] */ | |
ThreadWidth = 0.40; | |
ThreadThick = 0.25; | |
HoleWindage = 0.2; | |
Protrusion = 0.1; | |
//----- | |
// Dimensions | |
TapeThick = 1.0; // 3M double-stick outdoor tape | |
LegWall = [2.5,3.5]; // leg walls are not the same in X and Y! | |
LegBase = [36.0,19.0]; // flat on floor | |
LegOuter = [31.0,19.0]; // perpendicular to leg axis | |
LegInner = [28.5,11.5]; // … ditto | |
LegAngle = 90 - 53; // vertical to leg | |
LegRecess = [LegInner.x,LegInner.y,LegInner.x*tan(LegAngle)]; | |
PadWedge = 2; // to fit end of leg | |
PadRadius = 4.0; // rounding radius for nice corners | |
PadBase = [LegBase.x + 2*PadRadius,LegBase.y + 2*PadRadius,5.0]; | |
PadSides = 6*4; | |
BathStep = 20; // offset between shower bottom and floor | |
/* [Hidden] */ | |
EmbossDepth = 1*ThreadThick; // recess depth | |
DebossHeight = 1*ThreadThick + Protrusion; // text height + Protrusion into part | |
//----- | |
// Useful routines | |
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); | |
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); | |
} | |
//----- | |
// Foot pad | |
module FootPad(Riser = 0.0) { | |
difference() { | |
union() { | |
hull() | |
for (i=[-1,1], j=[-1,1]) { | |
translate([i*(PadBase.x/2 - PadRadius),j*(PadBase.y/2 - PadRadius),0]) | |
cylinder(r=PadRadius,h=1,$fn=PadSides); | |
translate([i*(PadBase.x/2 - PadRadius), | |
j*(PadBase.y/2 - PadRadius), | |
Riser + PadBase.z - PadRadius - (i-1)*PadWedge/2]) | |
sphere(r=PadRadius/cos(180/PadSides),$fn=PadSides); | |
} | |
translate([PadRadius - PadBase.x/2,0,Riser + PadBase.z]) | |
rotate([0,LegAngle,0]) | |
translate([LegRecess.x/2,0,(LegRecess.z - Protrusion)/2 ]) | |
cube(LegRecess - [2*TapeThick,0,2*TapeThick],center=true); | |
} | |
translate([0,0,-2*PadBase.z]) // remove anything under Z=0 | |
cube(4*PadBase,center=true); | |
cube([17,12,2*DebossHeight],center=true); | |
} | |
mirror([1,0,0]) | |
linear_extrude(height=EmbossDepth) | |
translate([0,0,0]) | |
text(text=str(Riser),size=10,spacing=1.05, | |
font="Arial:style=Bold", | |
valign="center",halign="center"); | |
} | |
//----- | |
// Build things | |
if (Layout == "Build") { | |
if (true) { | |
translate([-0.7*PadBase.x,-0.7*PadBase.y,0]) | |
FootPad(0); | |
translate([-0.7*PadBase.x,+0.7*PadBase.y,0]) | |
FootPad(0); | |
} | |
translate([+0.7*PadBase.x,-0.7*PadBase.y,0]) | |
FootPad(BathStep); | |
translate([+0.7*PadBase.x,+0.7*PadBase.y,0]) | |
FootPad(BathStep); | |
} | |
if (Layout == "Show") | |
FootPad(); |
One thought on “Injured Arm Support Table: Wide Version”
Comments are closed.