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

  • Digital Voltmeter Fuse Gotcha

    Measuring some low-value resistances with  one of my DVMs produced weird results: dead shorts around 10 Ω.

    Differential diagnosis:

    • Test lead tips clean
    • Wires firmly mounted in probes
    • Banana plugs OK
    • Short banana jumper across jacks reads 10+ Ω

    Took the meter apart and what do we see? An ABC ceramic fuse in good old PCB clips:

    DVM fuse holder
    DVM fuse holder

    Spinning the fuse dropped the resistance by a few ohms. Adding a minute drop of DeoxIT to each end, rotating the fuse to scrub it in, and wiping off the excess put the total resistance back around 0.2 Ω where it should be.

  • Belt Sander Disk Tightening

    As part of making that PCB, the sanding disk on the side of Mr Belt Sander made a lot more noise than usual; it’s hard to tell, because I wear 30+ dB ear muffs. Turns out that the setscrew had worked loose enough to let the disk walk outward, chewing up the plastic dust collector cover and the aluminum table:

    Belt sander disk dust catcher
    Belt sander disk dust catcher

    The setscrew gouged the shaft enough to prevent the disk from sliding off the shaft, which was probably a Good Thing, but that also meant I had to jam a big flat-blade screwdriver inside the guts of the dust guard and twist to pry the disk off:

    Belt sander disk shaft
    Belt sander disk shaft

    A touch of the file on the shaft, a bit of cleanup inside the disk hole, a dab of Loctite, and it’s all good again.

  • Garden Sprayer Valve Spring Replacement

    A garden sprayer awaiting repair emerged from the benchtop clutter. It’s an old one, with a metal shell and actual screws, so I could dismantle it to reveal the problem:

    Garden sprayer valve - rusted spring
    Garden sprayer valve – rusted spring

    It’s evidently impossible to make a good, cheap, corrosion-resistant spring (pick any two, I suppose):

    Garden sprayer valve - wreckage
    Garden sprayer valve – wreckage

    Some rummaging in the Big Box o’ Medium Springs produced a slightly smaller spring that should last for a while; it’s good, free, and rust-able, if a bit too short.

    Much to my astonishment, I found a length of 3/8 inch Marine Bronze rod in the stockpile and made a bushing to take up the remainder of the space:

    Garden sprayer valve - new spring and bushing
    Garden sprayer valve – new spring and bushing

    It won’t get a good test until gardening season opens next year, but it seems to seal well enough.

  • Dragonfly Garden Ornament – Eyeball Repair

    This brass dragonfly has graced our garden for some years, but what seemed like a gentle tap during fall cleanup knocked both eyeballs out. The original adhesive looked like urethane, so I cleaned the sockets, applied a layer around the rim, and popped the marbles back in place.

    The clamping looks painful…

    Dragonfly Ornament - eyeball repair
    Dragonfly Ornament – eyeball repair

    Of course, that’s an unbroken Harbor Freight clamp

  • Driveway Concrete Vandalism

    Driveway drain concrete
    Driveway drain concrete

    Having missed the fall driveway paving deadline, we will have a gravel section in the middle of the driveway until next spring. All the water from the garage downspouts and the back yard runs down the driveway, which dumps it directly into the gravel patch and the new retaining wall’s foundation. That means the gravel patch, at least, will become a mud hole, which I take to be a Bad Thing.

    So I bandsawed some 4 inch DWV pipe & fittings in half lengthwise, glued them together as a gutter to capture the runoff and divert it into 80 feet of DWV pipe leading to the bottom end of the wall, then filled the half-pipes with gravel to let us drive right over the whole mess. Unfortunately, the top end of the gravel patch has the driveway ending in broken asphalt, Item 4 gravel, fine gravel, and rubble that make it impossible to snug the pipes up against the asphalt. That means the runoff would pretty much vanish before it reached the gutters.

    So I excavated just barely enough gravel to ensure a downhill slope from the remaining asphalt, mixed up a random bag of mortar that’s been kicking around in the garage for a few years, and troweled an apron from the asphalt to the half-pipes. Generally I sign my work, but this kludge need last only a few months and I left it to cure.

    The next morning I discovered one of the chipmunks felt the work really needed a signature:

    Chipmunk tracks in concrete
    Chipmunk tracks in concrete

    That’s OK with me…

    FWIW, this is why you need Too Many Clamps:

    Clamping a half-pipe joint
    Clamping a half-pipe joint
  • Moen Bath Sink Faucet: A “Laying On Of Hands” Repair

    Moen faucet parts
    Moen faucet parts

    The Moen sink faucet in our black bathroom (so named because of its black tile, white trim, and gray floor) began piddling a few days ago, which seemed odd: Moen says it has a good-for-your-lifetime ceramic valve. So I took it apart, extracting an impressive vector of internal parts in the process.

    The “notch” that indicates the hot-cold alignment isn’t particularly obvious, but evidently forward corresponds to the usual hot-on-the-left plumbing:

    Moen valve cartridge alignment notch
    Moen valve cartridge alignment notch

    The retainer clip holding that white stop sleeve in place requires a bit of tweaking from a small pointy probe, but after you expose the hole in that notch the clip comes out easily enough:

    Moen faucet retainer clip
    Moen faucet retainer clip

    With all the frippery out of the way, then “Using pliers, pull the cartridge out of the body by the stem”, which simply did not work for me. No matter what, the cartridge body didn’t budge:

    Moen faucet cartridge top
    Moen faucet cartridge top

    There’s nothing about turning / unscrewing the transparent (looks black here) shell around the stem, so I didn’t try.

    Putting enough of the parts back together to keep the cartridge from blowing out in my face (even if I can’t remove it, it’ll certainly blow out on its own), the faucet valve worked fine. You’re supposed to turn the gray pivot retainer 1/4 turn beyond hand tight, which compresses a wavy washer under the retainer. The retainer had been quite loose when I dismantled the faucet, which suggests that either it hadn’t been tightened at the factory or had worked itself loose. That would tend to hold the handle up just a bit, perhaps enough to prevent the valve from completely closing.

    After snugging that retainer  down tight and reassembling everything, the faucet worked perfectly: happy dance!

    I removed the nozzle aerator and found a surprising amount of grit for something that’s downstream of the whole-house water filter and softener:

    Bath faucet nozzle grit
    Bath faucet nozzle grit

    Cleaned that out and it’s all good again.

  • EMC2 Logitech GamePad: Triggger Button Name Change

    I just updated EMC2 on the Sherline CNC mill from 2.4.6 to 2.4.7 (which mis-identifies itself as 2.4.6 on the splash screen) and the Axis UI failed to start. A bit of digging shows that the name of Button 1 (the left button in the right-hand quad, clearly labeled 1) has inexplicably changed from btn-trigger to btn-joystick.

    Logitech Gamepad Pendant
    Logitech Gamepad Pendant

    Most likely the change has nothing to do with EMC2, because (I think) those names bubble up from the HID driver that actually talks to the hardware and that stuff has also been updated; this is all on Ubuntu 10.04 LTS. But in any event, the name is now different.

    That requires a tweak to the Eagle schematics, which will regenerate Logitech_Gamepad.hal, but you can just edit the latter file and change btn-trigger to btn-joystick.

    As nearly as I can tell, changing the pin name in the Logitech library component, saving the library, then updating the library in the schematic doesn’t do squat. Evidently, Eagle keeps track of which components you’ve used and won’t update them unless you do some manual gymnatistics, which makes a certain amount of sense.

    That means one must:

    • Delete both “gates” of the old component (INPUT.0.BUTTONS first, then INPUT.0)
    • Make sure you’re on Page 2 where the basic gate will go
    • Add the revised LOGITECH_DUAL_ACTION_GAMEPAD to get the INPUT.1 “gate”
    • Rename it to INPUT.0
    • Use Move to jiggle it around a bit to ensure its pins get hitched up to the existing nets
    • Switch to Page 1 where the button nets lie in wait
    • Type invoke input.0 into the Eagle command line
    • Pick -BUTTONS from the list to select that “gate”
    • Position that gate appropriately
    • Use Move to jiggle the gate
    • Save everything
    • Run the Eagle2Hal ULP to get a new HAL output file
    • Put that file where it’ll do the most good

    There, now, wasn’t that obvious?

    The modified Logitech_Gamepad.hal file:

    # HAL config file automatically generated by Eagle-CAD ULP:
    # [/mnt/bulkdata/Project Files/eagle/ulp/hal-write-2.4.ulp]
    # (C) Martin Schoeneck.de 2008
    # Mods Ed Nisley 2010
    # Path        [/mnt/bulkdata/Project Files/eagle/projects/EMC2 HAL Configuration/]
    # ProjectName [Logitech Gamepad - 2.4.7]
    # File name   [/mnt/bulkdata/Project Files/eagle/projects/EMC2 HAL Configuration/Logitech Gamepad - 2.4.7.hal]
    # Created     [10:40:31 11-Nov-2011]
    
    ####################################################
    # Load realtime and userspace modules
    loadrt constant		count=16
    loadrt and2		count=17
    loadrt flipflop		count=4
    loadrt mux2		count=5
    loadrt mux4		count=1
    loadrt not		count=8
    loadrt or2		count=10
    loadrt scale		count=7
    loadrt timedelay		count=1
    loadrt toggle		count=1
    loadrt wcomp		count=6
    
    ####################################################
    # Hook functions into threads
    addf toggle.0		servo-thread
    addf wcomp.1		servo-thread
    addf wcomp.2		servo-thread
    addf wcomp.3		servo-thread
    addf and2.0		servo-thread
    addf and2.4		servo-thread
    addf and2.3		servo-thread
    addf and2.2		servo-thread
    addf and2.1		servo-thread
    addf constant.6		servo-thread
    addf constant.5		servo-thread
    addf constant.4		servo-thread
    addf constant.3		servo-thread
    addf constant.2		servo-thread
    addf constant.1		servo-thread
    addf constant.0		servo-thread
    addf constant.7		servo-thread
    addf constant.8		servo-thread
    addf scale.1		servo-thread
    addf scale.2		servo-thread
    addf scale.3		servo-thread
    addf mux4.0		servo-thread
    addf mux2.0		servo-thread
    addf scale.4		servo-thread
    addf scale.0		servo-thread
    addf wcomp.5		servo-thread
    addf wcomp.4		servo-thread
    addf wcomp.0		servo-thread
    addf flipflop.1		servo-thread
    addf flipflop.0		servo-thread
    addf and2.5		servo-thread
    addf and2.6		servo-thread
    addf and2.7		servo-thread
    addf and2.8		servo-thread
    addf flipflop.2		servo-thread
    addf flipflop.3		servo-thread
    addf or2.4		servo-thread
    addf or2.8		servo-thread
    addf or2.7		servo-thread
    addf or2.6		servo-thread
    addf or2.5		servo-thread
    addf or2.3		servo-thread
    addf or2.2		servo-thread
    addf or2.1		servo-thread
    addf or2.0		servo-thread
    addf not.1		servo-thread
    addf not.2		servo-thread
    addf not.3		servo-thread
    addf not.4		servo-thread
    addf not.5		servo-thread
    addf not.6		servo-thread
    addf not.7		servo-thread
    addf not.0		servo-thread
    addf constant.9		servo-thread
    addf mux2.1		servo-thread
    addf mux2.2		servo-thread
    addf mux2.3		servo-thread
    addf mux2.4		servo-thread
    addf constant.10		servo-thread
    addf constant.11		servo-thread
    addf scale.5		servo-thread
    addf scale.6		servo-thread
    addf constant.12		servo-thread
    addf constant.13		servo-thread
    addf timedelay.0		servo-thread
    addf constant.14		servo-thread
    addf constant.15		servo-thread
    addf and2.16		servo-thread
    addf and2.15		servo-thread
    addf and2.14		servo-thread
    addf and2.13		servo-thread
    addf and2.12		servo-thread
    addf and2.11		servo-thread
    addf and2.10		servo-thread
    addf and2.9		servo-thread
    addf or2.9		servo-thread
    
    ####################################################
    # Set parameters
    
    ####################################################
    # Set constants
    setp constant.0.value	+0.02
    setp constant.1.value	-0.02
    setp constant.2.value	60
    setp constant.3.value	1.00
    setp constant.4.value	0.10
    setp constant.5.value	0.50
    setp constant.6.value	0.10
    setp constant.7.value	+0.5
    setp constant.8.value	-0.5
    setp constant.9.value	0.0
    setp constant.10.value	[TRAJ]MAX_LINEAR_VELOCITY
    setp constant.11.value	[TRAJ]MAX_ANGULAR_VELOCITY
    setp constant.12.value	-1.0
    setp constant.13.value	0.1
    setp constant.14.value	0.020
    setp constant.15.value	0.000
    
    ####################################################
    # Connect Modules with nets
    net a-button-minus or2.2.in0 input.0.btn-joystick and2.15.in0
    net a-button-plus or2.2.in1 input.0.btn-thumb2 and2.16.in0
    net a-buttons-active or2.2.out or2.3.in0 or2.4.in1
    net a-disable not.7.out and2.5.in1
    net a-enable or2.4.in0 flipflop.3.out not.7.in mux2.4.sel
    net a-jog wcomp.2.in input.0.abs-z-position mux2.4.in1
    net a-knob-active not.2.out and2.7.in1
    net a-knob-inactive wcomp.2.out not.2.in and2.6.in1
    net a-select and2.8.in0 and2.7.out
    net a-set flipflop.3.set and2.8.out
    net angular_motion or2.4.out mux2.0.sel
    net any-buttons-active mux4.0.sel0 or2.8.out
    net az-buttons-active or2.3.out or2.8.in1 or2.9.in0
    net az-reset flipflop.2.reset and2.6.out flipflop.3.reset
    net button-crawl scale.4.out mux4.0.in3
    net button-fast scale.2.out mux4.0.in1 scale.4.in
    net jog-crawl toggle.0.out mux4.0.sel1
    net jog-speed halui.jog-speed mux4.0.out
    net knob-crawl mux4.0.in2 scale.3.out
    net knob-fast mux4.0.in0 scale.1.out scale.3.in
    net n_1 constant.10.out mux2.0.in0
    net n_2 and2.0.in0 input.0.btn-top2
    net n_3 and2.0.in1 input.0.btn-base
    net n_4 and2.0.out halui.abort
    net n_5 halui.mode.manual input.0.btn-base3
    net n_6 wcomp.0.max wcomp.1.max wcomp.2.max wcomp.3.max constant.0.out
    net n_7 halui.program.resume input.0.btn-base4
    net n_8 wcomp.0.min wcomp.1.min wcomp.2.min wcomp.3.min constant.1.out
    net n_9 mux2.0.in1 constant.11.out
    net n_10 constant.12.out scale.5.gain scale.6.gain
    net n_11 or2.0.in0 input.0.btn-base5
    net n_12 or2.0.in1 input.0.btn-base6
    net n_13 constant.9.out mux2.1.in0 mux2.2.in0 mux2.3.in0 mux2.4.in0
    net n_14 mux2.1.out halui.jog.0.analog
    net n_15 toggle.0.in or2.0.out
    net n_16 constant.2.out scale.0.gain
    net n_17 constant.5.out scale.1.gain
    net n_18 constant.3.out scale.2.gain
    net n_19 constant.4.out scale.3.gain
    net n_20 scale.4.gain constant.6.out
    net n_21 halui.jog.1.analog mux2.2.out
    net n_22 mux2.2.in1 scale.5.out
    net n_23 scale.6.out mux2.3.in1
    net n_24 constant.13.out halui.jog-deadband
    net n_25 wcomp.4.max constant.7.out wcomp.5.max
    net n_26 constant.8.out wcomp.4.min wcomp.5.min
    net n_27 mux2.3.out halui.jog.2.analog
    net n_28 halui.jog.3.analog mux2.4.out
    net n_29 timedelay.0.out and2.9.in1 and2.10.in1 and2.12.in1 and2.11.in1 and2.13.in1 and2.14.in1 and2.16.in1 and2.15.in1
    net n_30 and2.9.out halui.jog.0.minus
    net n_31 or2.9.out timedelay.0.in
    net n_32 constant.14.out timedelay.0.on-delay
    net n_33 constant.15.out timedelay.0.off-delay
    net n_34 and2.10.out halui.jog.0.plus
    net n_35 and2.11.out halui.jog.1.minus
    net n_36 halui.jog.1.plus and2.12.out
    net n_37 and2.13.out halui.jog.2.minus
    net n_38 and2.14.out halui.jog.2.plus
    net n_39 and2.15.out halui.jog.3.minus
    net n_40 and2.16.out halui.jog.3.plus
    net vel-per-minute scale.0.out scale.1.in scale.2.in
    net vel-per-second mux2.0.out scale.0.in
    net x-buttons-active or2.7.in0 or2.5.out
    net x-disable not.4.out and2.4.in1
    net x-enable not.4.in flipflop.0.out mux2.1.sel
    net x-hat-jog wcomp.4.in input.0.abs-hat0x-position
    net x-hat-minus wcomp.4.under or2.5.in1 and2.9.in0
    net x-hat-plus or2.5.in0 wcomp.4.over and2.10.in0
    net x-jog wcomp.0.in input.0.abs-x-position mux2.1.in1
    net x-knob-active not.0.out and2.1.in0
    net x-knob-inactive wcomp.0.out not.0.in and2.2.in0 and2.3.in0
    net x-set and2.1.out flipflop.0.set
    net xy-buttons-active or2.7.out or2.8.in0 or2.9.in1
    net xy-reset flipflop.0.reset and2.2.out flipflop.1.reset
    net y-buttons-active or2.6.out or2.7.in1
    net y-disable not.5.out and2.1.in1
    net y-enable flipflop.1.out not.5.in mux2.2.sel
    net y-hat-jog wcomp.5.in input.0.abs-hat0y-position
    net y-hat-minus wcomp.5.under or2.6.in1 and2.12.in0
    net y-hat-plus or2.6.in0 wcomp.5.over and2.11.in0
    net y-jog wcomp.1.in input.0.abs-y-position scale.5.in
    net y-knob-active not.1.out and2.3.in1
    net y-knob-inactive not.1.in wcomp.1.out and2.2.in1
    net y-select and2.4.in0 and2.3.out
    net y-set flipflop.1.set and2.4.out
    net z-button-minus or2.1.in0 input.0.btn-thumb and2.13.in0
    net z-button-plus or2.1.in1 input.0.btn-top and2.14.in0
    net z-buttons-active or2.1.out or2.3.in1
    net z-disable not.6.out and2.8.in1
    net z-enable not.6.in flipflop.2.out mux2.3.sel
    net z-jog wcomp.3.in input.0.abs-rz-position scale.6.in
    net z-knob-active not.3.out and2.5.in0
    net z-knob-inactive not.3.in wcomp.3.out and2.7.in0 and2.6.in0
    net z-set and2.5.out flipflop.2.set