The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

Tag: Repairs

If it used to work, it can work again

  • Park Spoke Tension Meter vs. 20 inch Wheel Spokes

    Obviously, the good folks at Park Tool never anticipated a three-cross spoke pattern on a 20 inch wheel:

    Park Tool Spoke Tension Meter vs 406 wheel
    Park Tool Spoke Tension Meter vs 406 wheel

    It’s my trusty Park Tool TM-1 Spoke Tension Meter, unchanged since shortly after the turn of the millennium.

    For future reference, the rebuilt wheel spoke tensions came out around 25, slightly lower than the 27-ish I measured on Mary’s bike; it didn’t occur to me to measure the tension until after I’d relaxed the spokes. I’ll ride it for a while before doing any tweakage.

    The spoke pattern is pretty close to four-cross, due to the large-flange Phil Wood hubs:

    Tour Easy Front Spoke Pattern
    Tour Easy Front Spoke Pattern

    Which makes for a hella-strong wheel, particularly seeing as how it’s very lightly loaded. The Tour Easy we got for our lass came with a radially spoked rim around a Phil hub.

    I transferred the hub and laced spokes intact to the new rim by the simple expedient of duct-taping the spokes into platters, removing the nipples, stacking the rims, sliding the spokes across into their new homes, reinstalling the nipples, then tightening as usual.

  • Presta Valve to Schraeder Hole Adapter

    The front rim on my Tour Easy developed a distinct bulge, of the sort usually caused by ramming something, but I’m not Danny McAskell and the bulge got worse over the course of a few weeks, suggesting the rim was deforming under tire pressure. Having ridden it upwards of 35 k miles with plenty of trailer towing and too much crushed-stone trail riding, the brake tracks were badly worn and it’s time for a new rim.

    An Amazon seller had an identical (!) rim, except for the minor difference of having a hole sized for a Schraeder valve stem, rather than the Presta valves on the original rims. One can buy adapters / grommets, but what’s the fun in that?

    The brake track walls are 1.5 mm thick on the new rim and a scant 1.0 mm on the old rim, so, yeah, it’s worn.

    A few measurements to get started (and for future reference):

    Presta to Schraeder Adapter - dimension doodle
    Presta to Schraeder Adapter – dimension doodle

    If you don’t have an A drill, a 15/64 inch drill is only half a mil larger and, sheesh, anything close will be fine.

    Introduce a suitable brass rod to Mr Lathe:

    Presta-Schraeder Adapter - parting off
    Presta-Schraeder Adapter – parting off

    Break all the edges and drop it in place:

    Presta-Schraeder Adapter - installed
    Presta-Schraeder Adapter – installed

    One could argue for swaging the adapter to fit flush against the curved rim, but commercial adapters don’t bother with such refinements and neither shall I.

    The 7.0 mm length got shortened to fit flush with the center of the rim:

    Presta-Schraeder Adapter - valve stem installed
    Presta-Schraeder Adapter – valve stem installed

    It’s brass, because the rim is heaviest on the far side where the steel pins splicing the ends live, and, with the tube & tire installed, the rim came out almost perfectly balanced. Which makes essentially no difference whatsoever, of course.

    The shiny new rim sports shiny new reflector tape (from the same stockpile, of course).

    That was easy …

  • Monthly Science: Cheese Slicer Epoxy Coating vs. Water

    Ten months ago, I cleaned the corrosion off our favorite cheese slicer:

    Cheese slicer - aluminum corrosion
    Cheese slicer – aluminum corrosion

    After cleaning, I coated it with XTC-3D epoxy:

    Cheese Slicer - epoxy coat - detail
    Cheese Slicer – epoxy coat – detail

    We’ve been using it daily ever since and it spends most of its life drip-drying in the dish drainer. I added a third opening to the cheerful orange measuring spoon holder just for the slicer.

    A few weeks ago I noticed corrosion once again growing on the handle:

    Cheese Slicer - epoxy coat - corrosion - detail
    Cheese Slicer – epoxy coat – corrosion – detail

    I think the rot comes from water diffusing through the epoxy, rather than gross leaks through damage or pinholes. The tip of the handle has the most corrosion, probably due to the water drop hanging there, even though it also has the thickest epoxy coating: it cured with the handle pointing downward.

    Verily, rust never sleeps …

  • Cheap Flashlight Boost Converter: Capacitor FAIL

    A long time ago, a pair of white LED + red laser flashlights powered by an AA cell diverged: one flashlight worked fine, the other always had a dead battery. The latter ended up on my “one of these days” pile, from which it recently emerged and accompanied me to a Squidwrench Tuesday session:

    Small Sun flashlight - original wiring
    Small Sun flashlight – original wiring

    The black wire trailing from the innards goes to the battery negative terminal, with the aluminum body providing the positive terminal connection to the wavy-washer spring contact visible atop the rear PCB inside the front shell.

    The switch connects each red wire to the battery negative terminal, so there’s a color code issue in full effect. The two red wires burrow through holes in the rear PCB (shown above) and connect to the negative terminal of the laser module (the brass cylinder near the top) and the negative terminal ring on the front PCB holding the seven white LEDs:

    Small Sun flashlight - original wiring - LED laser board
    Small Sun flashlight – original wiring – LED laser board

    Continuing the color code issue, the black wire from the laser is its positive terminal. The out-of-focus wire (an LED pin) sticking up near the top of the picture carries the positive connection to the LED ring. The red wires from the switch are the negative connections for the LEDs and laser.

    Voltages applied to the LED ring and the currents flowing therein:

    Small Sun flashlight - 7x white LED current vs voltage
    Small Sun flashlight – 7x white LED current vs voltage

    Seven LEDs at 20 mA each = 140 mA, so the voltage booster must crank out slightly more than 3.2 V. They’re not the brightest white LEDs I’ve ever seen, but suffice for a small flashlight.

    A crude sketch of the PCB layout, with a completely incorrect schematic based on the mistaken assumption the SOT23-3 package was an NPN transistor:

    Small Sun flashlight - schematic doodle
    Small Sun flashlight – schematic doodle

    Obviously, that’s just not ever going to oscillate, even if the 2603 topmark meant a 2SC2603 transistor, which it doesn’t.

    A bit more searching suggests it’s a stripped-down Semtech SC2603A boost converter, normally presented in a SOT23-6 package. If you order a few million of ’em, you can strip off three unused pins, do some internal rebonding, and (presumably) come out with an SOT23-3:

    Small Sun flashlight - correct schematic doodle
    Small Sun flashlight – correct schematic doodle

    That topology makes more sense!

    Before going further, I had to rationalize the colors:

    Small Sun flashlight - rewired LED laser board
    Small Sun flashlight – rewired LED laser board

    Soldering longer leads to the PCB allows current & voltage measurements:

    Small Sun flashlight - LED current test
    Small Sun flashlight – LED current test

    With the LEDs and laser disconnected, the converter seems to be struggling to keep the capacitor charged:

    Small Sun flashlight - V boost I 200mA-div - idle
    Small Sun flashlight – V boost I 200mA-div – idle

    Those purple spikes come from the current probe at 200 mA/div: maybe half an amp in 5 μs pulses at 6 kHz works out to a 15 mA average current, which is pretty close to the 11 mA I measured; it’s not obvious the Siglent SDM3045 meter was intended to handle such a tiny duty cycle.

    Obviously, the output capacitor is junk and, after removing it, the AADE L/C meter says NOT A CAPACITOR. Perhaps it never was one?

    Measuring the cap in the good (well, the other flashlight) suggests something around 100 nF, so I installed a random 110 nF cap from the stash. The current peaks are about the same size:

    Small Sun flashlight - I 200mA-div - 110nF cap
    Small Sun flashlight – I 200mA-div – 110nF cap

    The cap voltage (not shown) is now nearly constant and the 50 Hz PWM rate reduces the average battery current to 100-ish μA:

    Small Sun flashlight - I 200mA-div - color-grade - 110nF cap
    Small Sun flashlight – I 200mA-div – color-grade – 110nF cap

    Not great, but tolerable; a 1000 mA·h battery will go flat in a few months.

    The LED current runs a bit hotter than I expected:

    Small Sun flashlight - I 200mA-div - LED current - 110nF cap
    Small Sun flashlight – I 200mA-div – LED current – 110nF cap

    The bottom is about 200 mA and the average might be 350 to 400 mA.

    Compared with the other flashlight:

    Small Sun flashlight other - I 200mA-div - LED current
    Small Sun flashlight other – I 200mA-div – LED current

    So the cap is maybe a bit too small, but it likely doesn’t matter.

    Done!

  • Bathroom Sink Drain: Epoxy Touchup

    The glaring white ring around the drain comes from Magic Porcelain Chip Fix epoxy:

    Bathroom Sink Drain - Epoxy fill
    Bathroom Sink Drain – Epoxy fill

    What looks like a blob on the left side covers the missing chip, with the rest of the ring filled in to make it look like I knew what I was doing. The drain dried out while we were on vacation, having been scrubbed clean before we left, making for the best surface preparation I could provide.

    As it turns out, our resident iron bacteria took about a week to set up shop along the bottom of the ring, producing a pair of small rust-colored dots that will inevitably spread to encompass the whole thing. They’re endemic in the plumbing, impossible to kill off, and nothing more than an unsightly nuisance.

  • Amazon Basics AA Cells: Capacity

    Being that sort of bear, I (sometimes) note the date on cells when I change them, as with this notation on the AA alkaline cells in the Logitech trackball:

    Amazon Basics AA cell - mouse runtime
    Amazon Basics AA cell – mouse runtime

    These Amazon Basics AA cells lasted almost exactly two years, compared with 15 and 20 months from the previous two pairs of Duracell AAs. A few months one way or the other probably don’t mean much, but the Amazon cells aren’t complete duds.

    The new Amazon Basics cells have a gray paint job, so they’ve either changed suppliers or branding.

  • Rubber Soaker Hose Repair

    A soaker hose leaped under a descending garden fork and accumulated a nasty gash:

    Soaker Hose Splice - gashed
    Soaker Hose Splice – gashed

    Mary deployed a spare and continued the mission, while I pondered how to fix such an odd shape.

    For lack of anything smarter, I decided to put a form-fitting clamp around the hose, with silicone caulk buttered around the gash to (ideally) slow down any leakage:

    Soaker Hose Splice - Solid Model - Assembled
    Soaker Hose Splice – Solid Model – Assembled

    As usual, some doodling got the solid model started:

    Soaker Hose Splice - Dimension doodle 1
    Soaker Hose Splice – Dimension doodle 1

    A hose formed from chopped rubber doesn’t really have consistent dimensions, so I set up the model to spit out small test pieces:

    Soaker Hose Splice - Test Fit - Slic3r
    Soaker Hose Splice – Test Fit – Slic3r

    Lots and lots of test pieces:

    Soaker Hose Splice - test pieces
    Soaker Hose Splice – test pieces

    Each iteration produced a better fit, although the dimensions never really converged:

    Soaker Hose Splice - Dimension doodle 2
    Soaker Hose Splice – Dimension doodle 2

    The overall model looks about like you’d expect:

    Soaker Hose Splice - Complete - Slic3r
    Soaker Hose Splice – Complete – Slic3r

    The clamp must hold its shape around a hose carrying 100 psi (for real!) water, so I put 100 mil aluminum backing plates on either side. Were you doing this for real, you’d shape the plates with a CNC mill, but I just bandsawed them to about the right size and transfer-punched the hole positions:

    Soaker Hose Splice - plate transfer punch
    Soaker Hose Splice – plate transfer punch

    Some drill press action with a slightly oversize drill compensated for any misalignment and Mr Disk Sander rounded the corners to match the plastic block:

    Soaker Hose Splice - plate corner rounding
    Soaker Hose Splice – plate corner rounding

    A handful of stainless steel 8-32 screws holds the whole mess together:

    Soaker Hose Splice - installed
    Soaker Hose Splice – installed

    These hoses spend their lives at rest under a layer of mulch, so I’m ignoring the entire problem of stress relief at those sharp block edges. We’ll see how this plays out in real life, probably next year.

    I haven’t tested it under pressure, but it sure looks capable!

    The OpenSCAD source code as a GitHub Gist:

    // Rubber Soaker Hose Splice
    // Ed Nisley KE4ZNU July 2018
    Layout = "Build"; // Hose Block Show Build
    TestFit = false; // true to build test fit slice from center
    //- Extrusion parameters must match reality!
    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);
    //———-
    // Dimensions
    // Hose lies along X axis
    Hose = [200,27.0,12.0]; // X = longer than anything else
    Block = [80.0,50.0,4.0 + Hose.z]; // overall splice block size
    echo(str("Block: ",Block));
    Kerf = 0.1; // cut through middle to apply compression
    ID = 0;
    OD = 1;
    LENGTH = 2;
    // 8-32 stainless screws
    Screw = [4.1,8.0,3.0]; // OD = head LENGTH = head thickness
    Washer = [4.4,9.5,1.0];
    Nut = [4.1,9.7,6.0];
    CornerRadius = Washer[OD]/2;
    NumScrews = 3; // screws along each side of cable
    ScrewOC = [(Block.x – 2*CornerRadius) / (NumScrews – 1),
    Block.y – 2*CornerRadius,
    2*Block.z // ensure complete holes
    ];
    echo(str("Screw OC: x=",ScrewOC.x," y=",ScrewOC.y));
    //———————-
    // 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);
    }
    // Hose shape
    // This includes magic numbers measured from reality
    module HoseProfile() {
    RimThick = 10.0; // outer sections
    RimOD = RimThick;
    RimFlatRecess = -0.7; // recess to front flat surface
    OuterOC = Hose.y – RimOD; // outer tube centers
    RecessM = 1.5; // back recess chord
    RecessC = OuterOC;
    RecessR = (pow(RecessM,2) + pow(RecessC,2)/4) / (2*RecessM);
    RidgeM = 1.0; // front ridge chord
    RidgeC = 8.0;
    RidgeR = (pow(RidgeM,2) + pow(RidgeC,2)/4) / (2*RidgeM);
    NumSides = 12*4;
    rotate([0,-90,0])
    translate([0,0,-Hose.x/2])
    linear_extrude(height=Hose.x,convexity=4)
    difference() {
    union() {
    for (j=[-1,1]) // outer channels
    translate([0,j*OuterOC/2])
    circle(d=RimOD,$fn=NumSides);
    translate([-RimOD/4,0]) // rear flat fill
    square([RimOD/2,OuterOC],center=true);
    translate([(RimOD/4 + RimFlatRecess),0]) // front flat fill
    square([RimOD/2,OuterOC],center=true);
    intersection() {
    translate([Hose.z/2,0])
    square([Hose.z,OuterOC],center=true);
    translate([-RidgeR + RimOD/2 + RimFlatRecess + RidgeM,0])
    circle(r=RidgeR,$fn=NumSides);
    }
    }
    translate([-(RecessR + RimOD/2 – RecessM),0])
    circle(r=RecessR,$fn=2*NumSides);
    }
    }
    // Outside shape of splice Block
    // Z centered on hose rim circles, not overall thickness through center ridge
    module SpliceBlock() {
    difference() {
    hull()
    for (i=[-1,1], j=[-1,1]) // rounded block
    translate([i*(Block.x/2 – CornerRadius),j*(Block.y/2 – CornerRadius),-Block.z/2])
    cylinder(r=CornerRadius,h=Block.z,$fn=4*8);
    for (i = [0:NumScrews – 1], j=[-1,1]) // screw holes
    translate([-(Block.x/2 – CornerRadius) + i*ScrewOC.x,
    j*ScrewOC.y/2,
    -(Block.z/2 + Protrusion)])
    PolyCyl(Screw[ID],Block.z + 2*Protrusion,6);
    cube([2*Block.x,2*Block.y,Kerf],center=true); // slice through center
    }
    }
    // Splice block less hose
    module ShapedBlock() {
    difference() {
    SpliceBlock();
    HoseProfile();
    }
    }
    //———-
    // Build them
    if (Layout == "Hose")
    HoseProfile();
    if (Layout == "Block")
    SpliceBlock();
    if (Layout == "Bottom")
    BottomPlate();
    if (Layout == "Top")
    TopPlate();
    if (Layout == "Show") {
    difference() {
    SpliceBlock();
    HoseProfile();
    }
    color("Green",0.25)
    HoseProfile();
    }
    if (Layout == "Build") {
    SliceOffset = TestFit && !NumScrews%2 ? ScrewOC.x/2 : 0;
    intersection() {
    translate([SliceOffset,0,Block.z/4])
    if (TestFit)
    cube([ScrewOC.x/2,4*Block.y,Block.z/2],center=true);
    else
    cube([4*Block.x,4*Block.y,Block.z/2],center=true);
    union() {
    translate([0,0.6*Block.y,Block.z/2])
    ShapedBlock();
    translate([0,-0.6*Block.y,Block.z/2])
    rotate([0,180,0])
    ShapedBlock();
    }
    }
    }