Garden Cart Handle Pivot

For reasons not relevant here, I was tapped to replace the plastic parts attaching the handle to a garden cart:

Garden Cart - handle attachment
Garden Cart – handle attachment

The owner tried to contact the “manufacturer” to no avail; repair parts are simply not available, even if the name painted on the cart had a meaningful relationship to anything else.

Well, I can fix that:

Garden Cart - handle repair parts
Garden Cart – handle repair parts

Fortunately, another cart in the fleet provided the missing bits so I could reverse-engineer their measurements.

The solid model looks about like you’d expect:

Garden Cart Handle - show view
Garden Cart Handle – show view

Printing the two halves with those nice (yellow) bosses in place wasn’t feasible. They were exactly 1 inch in diameter, so I just parted two cookies from the end of a stout acetal rod after drilling a hole for the 2-¼ inch 5/16-18 bolt.

The two pieces took nigh onto three hours with five perimeters and 50% infill:

Garden Cart Handle - slicer preview
Garden Cart Handle – slicer preview

While delivering and installing the parts, I got volunteered to haul plants to cars with one of the carts during the upcoming Spring Plant Sale. That’ll teach me to stay in the Basement Shop …

The OpenSCAD source code as a GitHub Gist:

// Garden Cart Handle Pivot
// Ed Nisley KE4ZNU 2022-05
Layout = "Show"; // [Show,Build]
/* [Hidden] */
ThreadThick = 0.25;
ThreadWidth = 0.40;
HoleWindage = 0.2;
Protrusion = 0.1; // make holes end cleanly
inch = 25.4;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
ID = 0;
OD = 1;
// Dimensions
// Handle lies along X axis
HandleOD = (7/8) * inch;
BoltOD = (5/16) * inch;
Washer = [BoltOD,1.0 * inch,2.0]; // just for Show
Disk = [BoltOD,62.0,(3/16) * inch];
ClampBase = [(1 + 7/8)*inch,(1 + 1/8)*inch,2.0];
Kerf = 2.0;
CornerRadius = 1.0;
PivotOA = [Disk[OD],Disk[OD],HandleOD + 2*ClampBase.z + 2*Disk[LENGTH]];
// 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(d=(FixDia + HoleWindage),h=Height,$fn=Sides);
// Set up parts
module Handle() {
module Bolt() {
module Pivot() {
difference() {
union() {
for (i=[-1,1], j=[-1,1]) // rounded block
translate([i*(ClampBase.x/2 - CornerRadius),j*(ClampBase.y/2 - CornerRadius),-PivotOA.z/2])
for (k=[-1,1])
translate([0,0,k*(PivotOA.z/2 - Disk[LENGTH]/2)])
cube([2*ClampBase.x,2*ClampBase.y,Kerf],center=true); // slice through center
// Build them
if (Layout == "Show") {
rotate([90,-45,0]) {
translate([2*PivotOA.x - PivotOA.x/2,0,0])
for (k=[-1,1])
translate([0,0,k*(PivotOA.z/2 + Washer[LENGTH])])
if (Layout == "Build") {
Offset = 5.0;
intersection() {
translate([-(PivotOA.x/2 + Offset),0,PivotOA.z/2])
intersection() {
translate([(PivotOA.x/2 + Offset),0,PivotOA.z/2])

Laser-cut Cutworm Collars

Mary, having had considerable trouble with cutworms in her gardens, routinely deploys cardboard collars around new plants:

Cutworm Collars - assembled
Cutworm Collars – assembled

It seems cutworms trundle around until they find an edible plant, chew through the stem and topple the plant, then trundle off without taking another bite. A small cardboard barrier prevents them from sensing the plant: apparently, motivation to climb a short wall hasn’t yet evolved.

Up to this point, Mary applied scissors to tissue boxes, but I proposed an alternative with an adjustable fit to any plant:

Laser Cutting Cutworm Collars
Laser Cutting Cutworm Collars

A splayed cardboard box rarely lays flat, a condition enforced by a few MDF stops used as clamps.

Come to find out no two tissue boxes have identical dimensions, even boxes from the same brand / retailer, so lay out duplicates of the collar template to match your stockpile.

That was fun!

The SVG image as a GitHub Gist:

Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

MTD Snowthrower Friction Drive Rebuild

During the last snowstorm of the season, the venerable MTD snowthrower carved a trench out of the garage and across the driveway, then abruptly stopped moving. The motor roared and the auger turned, but the drive clutch handle had no effect, so I dragged its carcass into the garage and we completed the mission by hand.

Popping the belly plate on the next sunny day revealed the problem: the jam nut (part 34) anchoring the Friction Disk Wheel (part 28) to the Friction Wheel Bracket Assembly (part 32) had gone missing:

MTD Snowblower - page 26 - friction drive parts
MTD Snowblower – page 26 – friction drive parts

Worse, the Wheel’s threaded shaft spent some time rattling around in the Bracket while chewing up its thread:

MTD Snowthrower - friction disk wheel - damaged thread
MTD Snowthrower – friction disk wheel – damaged thread

This would ordinarily be No Big Deal, but what you see of the shaft is all you get: it rotates freely in the bearing embedded in the Wheel with no way to hold it while cleaning up its threads.

Having already promised to replace the Wheel, I installed the new Wheel using a castle nut secured with a generous dollop of red Loctite, then tapped two of its castellations into the shaft’s slot as a mechanical anchor:

MTD Snowthrower - friction disk wheel - castle nut
MTD Snowthrower – friction disk wheel – castle nut

I really wanted to lay a nice hard roll pin along that slot through the nut, but there’s no convincing way to secure such a thing without a second nut. Maybe next time?

While I had the drive train apart, the sad state of the Wheel Shift Rod Assembly (part 29) became apparent:

MTD Snowthrower - wheel shift rod - worn
MTD Snowthrower – wheel shift rod – worn

I scuffed up the shiny wear mark, turned a suitable acetal bushing, filled the trench with epoxy, and squished the bushing in place:

MTD Snowthrower - wheel shift rod - acetal bushing
MTD Snowthrower – wheel shift rod – acetal bushing

The flange might hold it in place against the Frame Shift Bracket (part 18), which snugly contains the rest of the bushing against the epoxy, so the whole affair might outlast the next season’s first snowstorm. We shall see.

A nice new R-clip secures the Friction Wheel Bracket Assembly in place against the old washer:

MTD Snowthrower - friction bracket R-pin
MTD Snowthrower – friction bracket R-pin

You might want to insert it the other way, but the black plastic housing above it extends just far enough to thwart your (well, my) desire.

Kukoke Outlet Timer: Over-powered Zener Diode

If the title seems familiar, it’s because there’s no visible difference (apart from the “brand name”) between the Enover timer that failed a little over a year ago and the Kuoke timer that recently failed:

Kukoke timer - overview
Kukoke timer – overview

That’s what it looked like after the repair. Prior to that, it’s just a blank display with no response to any inputs.

Given identical hardware, the overheated phenolic PCB under the Zener diode came as no surprise:

Kukoke timer - zener heat death
Kukoke timer – zener heat death

As promised, though, this time I epoxied a brass shim heatsink to the new diode in hopes of cooling it enough to live long and prosper:

Kukoke timer - zener heatsink
Kukoke timer – zener heatsink

I suppose I must now preemptively affix heatsinks in the two surviving timers, because we all know how their stories will end.

Figaro TGS5042 CO Sensor

The hallway fire detector recently told us it scented carbon monoxide, but we hadn’t been doing any cooking or baking (in the kitchen two rooms away), the furnace (in the basement) hadn’t run for a few hours, and nothing else looked like it was on fire. I had recently replaced the alkaline batteries after a similar false alarm a few weeks earlier; it seems the detector failed after half a dozen years or so.

Tearing it apart revealed something resembling an 18650 lithium cell:

Figaro TGS5042 CO sensor - overview
Figaro TGS5042 CO sensor – overview

Which made no sense, given the circuitry.

A casual search shows a Figaro TGS5042 is actually a carbon monoxide sensor. I’m mildly surprised enough gas gets through the vents fast enough to produce an early alert:

Figaro TGS5042 CO sensor - vent detail
Figaro TGS5042 CO sensor – vent detail

I tore it apart to reveal a few droplets of whatever the electrolyte might be, so it hadn’t completely dried out.

The Product Information flyer doesn’t define what “long life” might be, but another page says “10 years”, so apparently the rest of the circuitry failed around a not-quite-dead-yet sensor.

Craftsman Hedge Trimmer: Biennial Laying On Of Hands Repair

Once again, the hedge trimmer failed to turn on with the switch pressed, so I took it apart, did nothing, and had thing start working again:

Craftsman Hedge Trimmer - innards exposed
Craftsman Hedge Trimmer – innards exposed

It finally penetrated my dim consciousness: perhaps the switch is fine and a carbon brush (or two) has lost contact with the commutator atop a layer of oil and dust.

So a year from now when this happens again, try jamming a screwdriver through a vent slot and moving the motor a few degrees to jostle the crud.

If it works, that would be much easier than taking it apart!

April Fools Day

These seem appropriate for the day.

Whoever composed this wall of text knew the next person in line would update the placeholder:

HelloFresh Intro Offer Card - missed directions
HelloFresh Intro Offer Card – missed directions

As you can tell from the prices, this dates back to late last year. Since then, the two red LED panels on each side had at least one pinball panic and were replaced with much dimmer units:

Mobil gas price puzzle
Mobil gas price puzzle

And a friend pointed me at this bit of innocently twisted signage from a Twitter thread:


Meanwhile, back in the Basement Laboratory …