Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
The Judges at the Trinity College Home Firefighting Robot contest use butane grill igniters to light the candles in the arenas, but the gadgets seem to have terrible reliability problems: very often, they simply don’t work. I brought a few deaders back to the Basement Laboratory this April and finally got around to tearing them apart.
It seems they don’t ignite because the trigger’s safety interlock mechanism shears the plastic gas hose against the fuel tank’s brass outlet tube:
Grill igniter with sheared gas tube
I tried putting a small brass tube around the (shortened and re-seated) hose, but it turns out the trigger interlock slides into that space and depends on the hose bending out of the way:
Grill igniter with brass tubing
So there’s no easy way to fix these things.
It seems to me that a device using flammable gas should not abrade its gas hose, but what do I know?
Part of the spring ritual involves cleaning the maple seeds out of the gutters, which also gives me an opportunity to inspect things up there. This year brought a revolting discovery:
Rotted vent stack gasket
It seems the rubber (?) seals around all three vent stack pipes have disintegrated. Now, the contractor installed these as part of the re-roofing project late in the last millennium, so it’s not like they came with the house. They’re an exact match for what’s currently available at Home Depot and I have no reason to believe new ones will last any longer. Sheesh.
The correct fix involves removing the shingles around the existing aluminum plates, installing new plates, and then replacing the shingles. That seems unwarranted, seeing as how the aluminum remains nicely bonded to everything, so I slipped some solid polyethylene shields around the vent stacks, tucked them under the uphill shingles, and hope that’ll suffice.
The discoloration on the roof is getting worse, except downhill from the chimney’s copper flashing. You can see one of the ugly new black plastic vent seals over on the right:
Copper effect on roof discoloration
I suspect the copper ions kill off the fungus, so, invoking Science, I tucked a foot of copper wire under the ridge vent uphill from a patch of fungus:
Anti-fungal copper wire test
We’ll see if that makes any difference. I suppose the next time I’m up there I should tuck a strip of copper flashing under the shingle on the other side of the chimney to see if a bit more surface area will have more effect.
The switch on that screwdriver failed again, this time by having the internal switch mounting bosses disintegrate:
Cordless screwdriver – broken switch mounts
Not being one to worry about outside appearances, I simply drilled out the bosses to fit a pair of 4-40 screws, put the nuts inside, and it was all good:
Cordless screwdriver – switch with screws
Except that the switch now required an unseemly amount of force to operate in the forward direction. The switch is the cheapest possible collection of bent metal strips and injection molded plastic bits you can imagine, but with some bending and re-staking and general futzing around, it works fine again.
A gust of wind blew Mary’s bike helmet off the seat and, by the conservation of perversity, it landed on the mirror with predictable results:
Broken helmet mirror mount
I affixed the two ends with solvent glue, then epoxied a brass tube around them to stiffen it up. While I had the epoxy and brass out, I added a splint over a previous repair near the mirror ball:
Re-repaired mirror mount
After taking that picture, I heated and bent the remaining shaft just slightly to put the ball near the middle of its range. There’s no possible way this can survive this year’s cycling, so I must get cracking on building some durable mirrors. A 3-D printer should come in handy for something in that project!
The air conditioning in our Toyota Sienna van emitted some barely cool air during the previous heat wave, which was definitely new news and not to be tolerated. The sight glass showed white foam when running and nothing when stopped, but the compressor hadn’t locked out on low pressure yet. My guess was that everything still worked and that the refrigerant had just slowly leaked away over the last 11.5 years; nothing lasts any more, eh?
I consulted with my cronies and devoted a few hours to discovering that many seemingly qualified people don’t understand the notion of vapor pressure, but that a DIY recharge wasn’t exactly rocket science. Picked up a Harbor Freight manifold gauge (on sale for 50 bucks, less one of the ubiquitous 20% coupons = $40) and two cans of R134a plus a can tapper from Autozone. Parked the car in the garage and popped the hood to let things cool off overnight.
The never-sufficiently-to-be-damned Toyota engineers put the low pressure port far back on the inside of the right-side wheel well, where I can barely reach it by standing next to the car facing forward, reaching backwards with my left arm, easing my outstretched hand through the gap between the well and the engine, then feeling around to find and unscrew and not drop the cap. No, I’m not left-handed, I just can’t contort my right hand sufficiently to do more than touch the cap.
Aligning and securing the low-pressure fitting on that port requires far more agility and strength than should reasonably be expected from one’s weak-side hand. A pox on their backsides!
Anyway.
The static pressure started out at 67 psi in the morning, which is roughly correct for R134a in the low 20 °C range: chart or table. That’s a good sign indicating that the sump still had liquid refrigerant, confirmed by the myriad bubbles in the sight glass. Eyeball the outer ring of the low-side gauge to find the R134a temperature corresponding to the pressure on the inner ring.
Harbor Freight AC Low Pressure Gauge
That gauge shows whatever pressure was left in the hose after finishing the job a few hours prior to the picture. It seems the manifold / hoses / valves hold pressure quite well, which is not a foregone conclusion given Harbor Freight’s QC.
The sticker under the hood reports the AC requires about 3 pounds of refrigerant. That’s far more than most cars because the van also has a rear-cabin AC evaporator with one honkin’ big compressor for both.
2000 Toyota Sienna Refrigerant Sticker
I made the working assumption that if the AC still had some liquid refrigerant, it also had pretty nearly all the OEM oil. Most of the year the AC stays off, so I figure we’ve got a slooowww gas leak past the (usually) non-rotating seals driven by vapor pressure, all of which left the oil down in the sump. In addition, I haven’t the slightest idea if Toyota’s ND-OIL 8 gets along with the current PAG oil and adding too much oil seemed worse than having slightly too little.
The running pressures were 7 and 75 psi: grossly low.
So I fired in both cans of R134a: one with UV leak detector and another with leak sealer. That brought the pressures up to 20 / 120 psi: still too low, but at least air from the center vent now came out at 9 °C. The sight glass showed mostly foam, although with bursts of bubbly fluorescein green liquid. No leaks in evidence anywhere I could find without a nose-to-tail under-the-car inspection back to that rear evaporator.
Another trip (this time by bike) to the Autozone fetched a third can of straight R134a, which gradually cleared up the sight glass and got the pressures up to 35 / 150 psi, roughly matching the actual evaporator and condenser temperatures. I figured a few excess ounces wouldn’t do the least bit of damage; the three cans add up to 35 ounces of refrigerant, so the system was about 3/4 empty.
Early reports from the current heat wave seem encouraging.
One evening I noticed that the kitchen faucet handle was skewed far off to one side and didn’t rotate to the other side as it should. I took the thing apart and found the whole pedestal was rotated:
Rotated kitchen faucet – top
It turns out that the screws on the clamping ring below the sink had worked loose over the last decade or so, allowing the pedestal to rotate just a wee bit as we swung the spout from basin to basin.
Kitchen faucet clamping ring
Of course it only rotated a little bit in one direction and never the other way…
I epoxied that aluminum plate when I installed the faucet, because the stainless steel sink top seemed too flexy. The plate stiffened it right up and it’s been fine ever since.
With only two feet of Barbie Filament left, I ran some Reversal tests leading up to printing another replacement part for that digital caliper. The end result, printed in red ABS, turned out to be perfect:
Caliper Part – Installed
Quite literally, I snapped the part off the build platform, lined it up in the caliper, ran that 1-72 screw through it, and It Just Worked. No cleanup, no trimming, no fiddling around, no problems!
Unlike the previous part, I printed this one as a singleton in the middle of the plate in order to concentrate on the other parameters:
Finished caliper repair part
I set the Cool plugin to 15 s/layer, which meant the top few layers printed very very slowly and the tip of the hook took forever. That’s fine with me: notice the total lack of overshoot and oscillation, compared with those Companion Cubes printed at much higher speeds.
Side view:
Caliper Part – Side
Bottom (the side against the caliper frame) view:
Caliper Part – Bottom
Top view:
Caliper Part – Top
The fill orientation is 0° for the first layer with 90° rotation, which lines it up neatly with the sides. There’s not enough room for anything fancy; the interior layers came out nearly solid even with the usual 0.25 fill ratio for the hex shapes.
The fill isn’t quite as solid as you might like, but given the overall size & shape, I think it’s just about as good as it can be expected.
Isn’t that just the cutest little thing you’ve ever seen?
The OpenSCAD code that built it:
// Digital Caliper thumbwheel holder
// Ed Nisley - KE4ZNU - May 2011
Build = true; // set true to generate buildable layout
$fn = 8; // default for holes
// Extrusion values
// Use 0 extra shells
// 2 solid shells on the top & bottom
ThreadThickness = 0.33;
ThreadWT = 2.00;
ThreadWidth = ThreadThickness * ThreadWT;
HoleWindage = 0.0; // enlarge hole dia by small Finagle Constant
Protrusion = 0.1; // extend holes beyond surfaces for visibility
// Caliper dimensions
WheelDia = 10.0; // thumbwheel OD
WheelRadius = WheelDia/2;
WheelMargin = 1.5; // space around wheel
WheelRimThick = 2.5; // subtract from repair block
ShaftDia = 2.90; // axle between knurled wheels
ShaftRadius = ShaftDia/2;
ShaftLength = 2.7;
ShaftRetainer = 3.0; // thickness around shaft
StubThick = 2.45; // stub of holder on caliper head
StubLength = 6.0; // toward caliper head
StubHeight = 7.0; // perpendicular to caliper head
StubClearanceX = 0.0; // distance to caliper head
StubClearanceZ = 0.75; // distance to caliper frame
FrameLength = 50; // for display only
FrameHeight = 16.0;
FrameThick = 3.0;
// Repart part dimensions
ForkLength = StubLength - StubClearanceX; // toward caliper head around stub
ForkHeight = StubHeight; // perpendicular to caliper head
ForkGap = 0.3; // clearance to stub on all sides
ForkBladeThick = 3 * ThreadWidth; // on each side of stub
ShaftClearance = 0.1; // Additional clearance around shaft
ShaftOffset = 8.5; // Shaft center to stub
BoltHoleDia = 1.8; // 1-72 machine screw, more or less
BoltHoleRadius = BoltHoleDia/2;
BoltHoleOffset = 3.5; // offset from caliper frame to hole center
// Convenient sizes and shapes
FrameBlock = [FrameLength,FrameThick,FrameHeight];
StubBlock = [StubLength,StubThick,StubHeight];
StubMargin = [ForkGap,2*ForkGap,ForkGap];
RepairBlockLength = ForkLength + ShaftOffset;
RepairBlockThick = 2*ForkBladeThick + StubThick;
RepairBlockHeight = WheelRadius + ShaftRadius + ShaftRetainer;
RepairBlock = [RepairBlockLength,RepairBlockThick,RepairBlockHeight];
// Caliper parts to show how repair fits in
module CaliperParts() {
union() {
translate([0,0,-(StubClearanceZ + FrameHeight/2)])
cube(FrameBlock,center=true);
translate([-(StubLength/2 + ShaftOffset),0,(StubHeight/2)])
cube(StubBlock,center=true);
}
}
// Repair block with origin below wheel shaft
module RepairPart() {
difference() {
// Body of repair part
union() {
translate([-RepairBlockLength/2,0,RepairBlockHeight/2])
cube(RepairBlock,center=true);
translate([0,0,WheelRadius])
rotate([90,0,0])
cylinder(r=ShaftRadius+ShaftRetainer,h=ShaftLength,center=true,$fn=12);
}
// wheels
translate([0,(ShaftLength + WheelRimThick)/2,WheelRadius])
rotate([90,0,0])
cylinder(r=(WheelRadius + WheelMargin),h=WheelRimThick,center=true,$fn=16);
translate([-(WheelRadius + WheelMargin)/2,
(ShaftLength + WheelRimThick)/2,
(WheelRadius - Protrusion)/2])
cube([(WheelRadius + WheelMargin),WheelRimThick,(WheelRadius + Protrusion)],
center=true);
translate([0,-(ShaftLength + WheelRimThick)/2,WheelRadius])
rotate([90,0,0])
cylinder(r=(WheelRadius + WheelMargin),h=WheelRimThick,center=true,$fn=16);
translate([-(WheelRadius + WheelMargin)/2,
-(ShaftLength + WheelRimThick)/2,
(WheelRadius - Protrusion)/2])
cube([(WheelRadius + WheelMargin),WheelRimThick,(WheelRadius + Protrusion)],
center=true);
// axle clearance
translate([0,0,WheelRadius])
rotate([90,0,0])
cylinder(r=(ShaftRadius + 2*ShaftClearance), // hack clearance to match octagon to cube
h=(ShaftLength + 2*Protrusion),
center=true);
translate([0,0,(WheelRadius - Protrusion)/2])
cube([(ShaftDia + 2*ShaftClearance),
(ShaftLength + 2*Protrusion),
(WheelRadius + Protrusion)],
center=true);
// stub of previous wheel holder
translate([-(ShaftOffset + (ForkLength - ForkGap)/2 + Protrusion),
0,
(StubHeight + ForkGap - Protrusion)/2])
cube([(ForkLength + ForkGap + Protrusion),
(StubThick + 2*ForkGap),
(StubHeight + ForkGap + Protrusion)],
center=true);
// mounting screw hole
translate([-(RepairBlockLength - BoltHoleOffset),0,StubHeight/2])
rotate([90,0,0])
cylinder(r=(BoltHoleDia + HoleWindage)/2,
h=(RepairBlockThick + 2*Protrusion),
center=true,$fn=6);
}
}
// Build it!
if (!Build) {
CaliperParts();
RepairPart();
}
if (Build) {
translate([-RepairBlockLength/2,0,RepairBlockHeight])
rotate([0,180,0])
RepairPart();
}