Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
The outer suckers on the basket in the corner of the shower didn’t line up with the tiles; either tile dimensions have changed in the last half-century or it’s a hard-metric basket. It didn’t look right when I installed it (now that is a grandiose term if I’ve ever misused one), so (when the thing fell off and landed with a clatter a few days ago) I drilled two additional holes as far away from the corner as I could, using a step drill to prevent the plastic from shattering, and it’s all good.
Shower basket – redrilled
Sometimes, they’re easy…
You’ll note that I heroically resisted the urge to fire the Thing-O-Matic to print some kind of weird-ass safety-orange interposer plate, just because I could.
A week or so after I got my HP 49GX calculator, I managed to drop a vernier caliper on it. Interior points downward, of course, putting a nice divot on the non-glare plastic over the LCD panel.
A week or so after I got my HP 50g calculator, I applied a screen protector sheet harvested from the lifetime supply I bought for my original Zire 71, back in the day.
HP 50g calculator screen protector
The fact that it’s an almost perfect fit and that the calculator sports a monochrome LCD with lower resolution is a sad commentary on the state of the calculator art.
Taking that picture in low-angle full sunlight makes the protector sheet look awful. In actual use, it’s nearly invisible. Haven’t dropped anything on it yet, either.
And, yes, I did cut it out around the HP logo button in the upper right corner.
Well, that fix didn’t last nearly as long as I’d hope, although I must admit whacking the pitcher lid against the refrigerator door certainly hastened its demise.
So I found a suitable screw in the Tiny Box o’ Teeny Screws (in a sub-container of eyeglass repair screws), drilled a snug hole where the plastic pin used to be (entirely by hand on the drill press, feeding the lid into the drill), and snapped everything together again:
Brita pitcher lid hinge – screw
The remaining plastic pin had a fracture at its base, but I just glued it and will defer installing a screw until it finishes disintegrating. At some point we’re going to be forced to buy a new pitcher…
It’s printed with 100% infill to produce a solid plastic plate.
In retrospect, I think it’d work better if I put the notch on the bottom side with a bit of support, so that the glass-smooth surface faced the Zire. Maybe next time?
My decrepit Zire 71 PDA (remember PDAs?) has a cute little joystick dingus that, when pressed, displays the clock. That’s great, except that it stands proud of the surface by just enough to be constantly pressed by my pants fabric. Hence, the need for a button shield… which, after all these years, snapped at an obvious high-stress spot:
Broken Zire button shield
A dab of solvent glue, a few minutes of finger pressure, and let it cure overnight. That was easy.
But then it occurred to me that this was a broken plastic part and I had a 3D printer…
The fan on the dummy load that consumes the required minimum current to keep the ATX power supply happy wasn’t starting up reliably. That’s not surprising: I connected it to 5 V rather than the rated 12 V, because the load heatsink needs just a whisper of air flow to stay barely above room temperature, so it’s barely turning over and has no spare torque at all.
It turns out the heatsink really doesn’t need any forced air flow, despite having the fins oriented crosswise. Without the fan, it stabilizes just above comfortable-to-the-touch, a bit hotter than I’d prefer.
While I had the hood up for the HBP rebuild, though, I swapped in another fan and the heatsink is now cool to the touch. I did clean that dust off the fins, too.
If this one also fails at +5 V, I’ll fiddle the wiring to put it across the +12 V and +5 V supplies, where it’ll see 7 V. That should improve its disposition…
After a decade of stacking the plates in the dishwasher the same way every time, the flexible coating over the steel rods has worn through:
Dishwasher rack abrasion
We can’t stack them the other way, because the rotor spray rattles them unmercifully, and a fix is in order. Apparently, one can purchase touchup paint for this very purpose, but what’s the fun in that? Besides, I’d expect it to wear through even faster than the original coating, if only because adhesion is never as good as you’d expect from reading the label.
So this little dingus fits around a vertical pin and rests atop the horizontal rod, with the edge of the plate nestled into the joint between the two cylinders:
Dishwasher rack protector – solid model
Being very small, they build best in large groups:
Dishwasher rack protectors – on build platform
The horizontal half-cylinders require internal support, shown here adjacent to the protector for easy viewing:
Dishwasher rack protector – support model
Those fins just barely clear the interior of the horizontal cylinder, so the two parts don’t bond together very well (that’s the ideal condition, of course). The flat plate glues the support fins firmly to the build platform, which is easier to see on these somewhat shorter prototypes with a layer or two of orange filament on their bottoms:
Dishwasher rack protectors – support
The support chops out neatly with a repurposed nail set punch:
Dishwasher rack protector – removing support
Actually, I stood each one vertically on an aluminum chunk, held the punch in place with finger pressure, and whacked it with a small brass hammer. The OpenSCAD code now adds a small tab each end to help align the punch for the first whack.
The rod (vertical) hole came out just about exactly the right size (admittedly, with a 0.4 mm HoleFinagle adjustment), but required a pass with a drill in a pin vise to clear out the Reversal Zittage. The result slides easily over undamaged pins, but some pins had rust at either the top or bottom that required a bit of cleanup. This is a trial fit:
Dishwasher rack protectors – trial fit
I put a blob of acrylic caulk on the abraded spots to (attempt to) seal them from further damage, then squished the protectors in place. The dishwasher demonstrated that it’s perfectly capable of blasting an unglued protector (without a plate) up and off the pin, ingesting it into the trash grinder, chewing it up, and spitting the pieces down the drain. Lost a couple of prototypes before I figured that out, too.
Ya learn something new every day…
The OpenSCAD source code:
// Dishwasher rack protector
// Ed Nisley KE4ZNU - Jan 2012
Layout = "Show"; // Show Build Support
Support = true; // true to add support inside rod half-cylinder
include </home/ed/Thing-O-Matic/lib/visibone_colors.scad>
//-------
//- Extrusion parameters must match reality!
// Print with +0 shells
// Infill = 1.0, line, perpendicular to Bar axis on first bridge layer
// Multiply = at least four copies to prevent excessive slowdown
ThreadThick = 0.25;
ThreadWidth = 2.0 * ThreadThick;
HoleFinagle = 0.4;
HoleFudge = 1.00;
function HoleAdjust(Diameter) = HoleFudge*Diameter + HoleFinagle;
Protrusion = 0.1; // make holes end cleanly
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
function IntegerMultipleMin(Size,Unit) = Unit * floor(Size / Unit);
//-------
// Dimensions
PinDia = 4.0 + 0.5; // upright pin diameter + clearance
PinRadius = PinDia/2;
PinSpace = 35.0; // pin spacing along bar
PinOC = 3.4; // bar center to pin center
PinTubeLength = 15.0; // length of upright tube along pin
BarDia = 4.7 + 0.2; // horizontal bar diameter + clearance
BarRadius = BarDia/2;
BarTubeLength = PinSpace - 5.0; // length of horizontal half tube along bar
TubeWall = 4*ThreadWidth; // wall thickness -- allow for fill motion
TubeSides = 4 * 4; // default side count for tubes (in quadrants)
$fn = TubeSides;
SupportClear = 0.85; // support structure clearance fraction
//-------
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=HoleAdjust(FixDia)/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);
}
//--------
// Support under bar tube shells
module SupportStructure() {
color("cyan")
difference() {
union() {
for (Index=[-4:4])
translate([Index*(BarTubeLength/8.5),0,0])
rotate([0,90,0])
rotate(180/TubeSides)
cylinder(r=SupportClear*BarRadius,h=2*ThreadWidth,center=true);
rotate([0,90,0])
rotate(180/TubeSides)
cylinder(r=SupportClear*BarRadius,h=10*ThreadWidth,center=true);
translate([0,0,ThreadThick])
cube([(BarTubeLength + 4*ThreadWidth),BarRadius,2*ThreadThick],center=true);
}
translate([0,0,-(BarRadius + Protrusion)/2])
cube([(BarTubeLength + 2*Protrusion),
BarDia,
(BarRadius + Protrusion)],center=true);
}
}
//-------
// Put it together
module Protector() {
difference() {
union() {
translate([0,PinOC,0])
rotate(180/TubeSides)
cylinder(r=(PinDia + 2*TubeWall)/2,h=PinTubeLength);
translate([-BarTubeLength/2,0,0])
rotate([0,90,0])
rotate(180/TubeSides)
cylinder(r=(BarDia + 2*TubeWall)/2,h=BarTubeLength);
}
translate([0,PinOC,-Protrusion])
rotate(180/TubeSides)
PolyCyl(PinDia,(PinTubeLength + 2*Protrusion),TubeSides);
translate([-BarTubeLength/2,0,0])
rotate([0,90,0])
rotate(180/TubeSides)
translate([0,0,-Protrusion])
cylinder(r=BarRadius,h=(BarTubeLength + 2*Protrusion));
translate([0,0,-(BarRadius + TubeWall + Protrusion)/2])
cube([(BarTubeLength + 2*Protrusion),
BarTubeLength,
(BarRadius + TubeWall + Protrusion)],center=true);
}
}
//-------
// Build it!
ShowPegGrid();
if (Layout == "Support")
SupportStructure();
if (Layout == "Show") {
Protector();
translate([0,-10,0])
SupportStructure();
}
if (Layout == "Build")
rotate(90) {
if (Support)
SupportStructure();
Protector();
}