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

  • American Standard Elite Kitchen Faucet: Handle Failure

    Strange though it may seem, the kitchen faucet handle broke while Mary was using it. The rear wall of the socket that fits over the cartridge valve stem fractured:

    American Standard Faucet Handle - broken mount
    American Standard Faucet Handle – broken mount

    Having no water in the kitchen is not to be tolerated, so I applied a redneck fix while pondering the problem:

    Kitchen Faucet - redneck handle repair
    Kitchen Faucet – redneck handle repair

    Based on that comment, I called the American Standard hotline (800-442-1920), described the situation, and they’re sending a replacement handle and cartridge. Evidently the new handle won’t fit the old cartridge, which makes me feel better about not stockpiling repair parts, even while I now wonder what the new cartridge part number might be and how you’d tell them apart.

    Anyhow, the redneck fix wouldn’t suffice for the next week; I needed something slightly more permanent. The broken wall fit neatly in place on the mount, but:

    • It must withstand far more force than a simple glue joint can provide
    • I can’t machine square holes
    • Wrapping a metal sleeve around the mount seemed like too much work

    You undoubtedly saw this coming a while ago:

    Am Std Faucet Handle Sleeve - solid model
    Am Std Faucet Handle Sleeve – solid model

    The mount tapers slightly from the handle body toward the open end to provide draft for the molding process. I applied a hull() operator to two thin rectangles spaced the right distance apart along the Z axis to create a positive model of the mount, which then gets subtracted from the blocky outer rectangle. The hole clears a 10-32 screw that fits the standard setscrew threads (normally hidden behind the handle’s red-and-blue button).

    Unlike most printed parts I’ve done recently, the sleeve suffered from severe shrinkage along the outside walls:

    Faucet handle sleeve - build distortion
    Faucet handle sleeve – build distortion

    The inside maintained the right shape, so I cleared the nubs with a file and pressed it in place around the mount with the rear wall snapped into position. The black plastic socket evidently isolates the handle from the valve stem and I used a stainless 10-32 screw to prevent the nightmare scenario of having the sleeve slide downward along the tapered mount and block the setscrew. Overall, it came out fine:

    American Standard faucet handle - compression sleeve
    American Standard faucet handle – compression sleeve

    However, the chunky sleeve didn’t clear the opening in the escutcheon cap, which put the cap on the windowsill for the next week. The result works much better than the redneck fix and looks almost presentable. It’s certainly less conspicuous:

    American Standard faucet handle - temporary repair
    American Standard faucet handle – temporary repair

    I hope the new handle has a much more robust socket…

    The OpenSCAD source code:

    // Quick fix for broken American Standard Elite 4454 faucet handle
    // Ed Nisley KE4ZNU February 2013
    
    //- Extrusion parameters must match reality!
    //  Print with +2 shells and 3 solid layers
    
    ThreadThick = 0.25;
    ThreadWidth = 2.0 * ThreadThick;
    
    HoleFinagle = 0.4;
    HoleFudge = 1.00;
    
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    function HoleAdjust(Diameter) = HoleFudge*Diameter + HoleFinagle;
    
    Protrusion = 0.1;           // make holes end cleanly
    
    //----------------------
    // Dimensions
    
    Wall = 5.0;
    
    Slice = ThreadThick;                // minimal thickness for hull object
    
    ShaftEnd = [11.6,17.8,Slice];
    ShaftBase = [12.1,18.8,Slice];
    ShaftLength = 19.0;
    
    Block = [(ShaftBase[0] + 2*Wall),(ShaftBase[1] + 2*Wall),ShaftLength - Protrusion];
    
    ScrewOffset = 6.5;          // from End
    ScrewDia = 5.0;             // clearance
    
    //----------------------
    // Useful routines
    
    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);
    
    }
    
    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);
    }
    
    //----------------------
    // Model the handle's tapered shaft
    
    module Shaft() {
    
        hull() {
            translate([0,0,ShaftLength - Slice/2])
                cube(ShaftEnd, center=true);
            translate([0,0,Slice/2])
                cube(ShaftBase, center=true);
        }
    
    }
    
    //----------------------
    // Build it!
    
    ShowPegGrid();
    
    difference() {
        translate([0,0,ShaftLength/2])
            cube(Block,center=true);
        Shaft();
        translate([0,0,ShaftLength - ScrewOffset])
            rotate([-90,0,0])
                PolyCyl(ScrewDia,ShaftBase[1],6);
    }
    
  • Capacity Test For New UPS Batteries

    Just got a quartet of 12 V 7 A·h lead batteries, prompted by a big Belkin UPS that instantly shut down during a power blink. It needs only two batteries, but the shipping was the same for two or four and I’m sure the spares will come in handy.

    A stiff 2 A discharge test shows that SLA batteries really don’t like high currents, which is exactly what they must provide in a UPS:

    Rhino SLA - 2013-01
    Rhino SLA – 2013-01

    The capacity is barely 4 A·h at 2 A, not to mention that I’m using a conservative 11.4 V cutoff.

    The two batteries with the highest capacity also were the closest matches, so they’re now in the UPS.

  • Dishwasher Rack Pins: More Plastic

    Those 3D printed dishwasher rack protectors solved the problem on the bottom of the pins, but the tops also had some rust. I dosed the pins with Evapo-Rust to stabilize the corrosion:

    Dishwasher rack - rusted pins
    Dishwasher rack – rusted pins

    After that picture, the pins soaked for a while, got a rinse & blotting, then sat for a while to dry. I can’t say that’s in complete accordance with the directions, but it’s close to the spirit of the thing.

    Meanwhile, the MEK / xylene / acetone I added to the bottle of stiffened ReRACK repair coating had softened it up pretty well.  They recommend several coats at half-hour intervals, of which this was the first:

    Dishwasher rack - first plastic layer
    Dishwasher rack – first plastic layer

    I probably should have chewed off the corrosion bulging the OEM coating, but, given the number of pins that needed chewing, that started looking like a major project. Let’s face it, I can always touch things up if the pins continue rotting out.

    The next morning, the rack was back in service:

    Dishwasher rack - recoated pins
    Dishwasher rack – recoated pins

    One advantage of a big blob atop each pin: the printed rack protectors might not wriggle off quite so easily.

     

  • RayTek IR Thermometer: Trigger Switch Replacement

    According to the sticker inside, I’ve been using my RayTek IR Thermometer since 2000. At some point in the last dozen or so year, Fluke Borged RayTek, which means yellow plastic instead of gray.

    The pushbutton switch behind the trigger has recently gone from intermittent to nonfunctional, but everything else still works fine: some simple surgery should suffice…

    The handle has a flip-down cover, for the battery compartment and °C/°F switch, that pivots on molded hinges.  The cover’s hinge pins are rectangular with a slight bevel and the case sockets have a notch that will just clear a properly aligned pin. Given this hint, you’ll get the cover off much faster than I did:

    RayTek IR Thermometer - handle joint
    RayTek IR Thermometer – handle joint

    Remove the obvious screw and press the latches while prying the two halves apart. A small screwdriver helps persuade the latches to release their death grip:

    RayTek IR Thermometer - case latches
    RayTek IR Thermometer – case latches

    The parts heap didn’t have any suitable through-hole pushbutton switches, but I managed to solder an SMD switch in place; the original switch is parked atop the IC for reference. Yes, the white button is slightly taller than the original black one, but it doesn’t matter:

    RayTek IR Thermometer - new switch installed
    RayTek IR Thermometer – new switch installed

    Then it’s just a matter of tucking everything in place:

    RayTek IR Thermometer - contents
    RayTek IR Thermometer – contents

    There. That was easy.

  • LibreOffice 3.6: Fixing Font Selection Problems

    This may not be a LibreOffice problem, but that’s where it shows up: the font selection dialog won’t display fonts with nonstandard Style names. There is, of course, no documentation anywhere (that I can find, anyway) on what Style names are permitted, so you discover this only when a font style that’s properly installed and accessible by other programs (like, say, Inkscape or Scribus) doesn’t render properly and doesn’t appear in the list.

    In Xubuntu 12.10, LibreOffice 3.6.2.2 can’t handle the American Typewriter font style called Medium, which is what I’ve been using for the return address field on my (very few, these days) mail envelopes. Over the years, various versions of OpenOffice and LibreOffice have alternately accepted and rejected the Medium style, so this isn’t exactly a regression. It is, however, Yet Another Annoyance.

    The solution, hinted at in that thread, involves using FontForge to rename the offending Style to, say, Regular, then saving the font. It’s actually the Weight property, hidden in Element → Font Info → PS Names tab. In this case, I changed the word “Medium” in the Fontname, Name for Humans, and Weight fields to “Regular”, which also updates the values in the TTF Names tab.

    I save the modified font files in ~/.local/share/fonts using TrueType format, just to be sure I don’t confuse them with the original Postscript version in /usr/share/fonts/custom, delete the original, and then run fc-cache -v -f to update the caches. This surely isn’t the cleanest way to make it happen and almost certainly isn’t allowed by the Adobe EULA I agreed to, back when I actually bought the fonts, but so it goes.

    And then It Just Works…

    LibreOffice vs American Typewriter font
    LibreOffice vs American Typewriter font
  • Fixing LibreOffice Document Graphic File Paths

    It turns out that if you put convenient symlinks in your directories, then use them to build a LibreOffice document, LO will cheerfully put those paths into the graphic file links inside its XML files. That will produce horrible breakage on a new system without those links. We’ve come to the conclusion that the only way to keep LO happy is to create a Pictures directory in whatever directory holds the document file, then put all of the document’s image files into that directory, and make sure LO stores relative paths. Of course, this leaves us with the prospect of updating a whole bunch of existing (and, alas, horribly broken) documents by hand, which is unappealing. My previous solution worked for a single file, but now it’s time for some scripting…

    This would probably be easier in Python, but Bash works fine after you get the quoting straightened out. This script builds several other scripts that actually do the heavy lifting, because that way you can inspect the scripts before running them to verify that you’re not about to make a bad situation much, much worse. I recommend copying the presentations into another directory, running this script, check the output scripts, run them by hand, and then copy the fixed files and the Pictures directory back where they belong.

    You must tweak the actual paths to the pictures to match your situation; for these documents, one simple change sufficed for all the image files. Those paths are not variables, because I can barely keep the quoting straight without adding another layer of indirection. Make sure all the paths match up, verify the scripts before you run them, and don’t trust anything you see.

    CAUTION: It’s highly likely that the multiple levels of character escaping required to make these listings appear correctly on the screen will produce incorrect results when copied-and-pasted. You can download the script file as FixGraphics.sh.odt, which is a bare-ASCII TXT file (which you must rename to eliminate the ODT extension, then make executable as a shell script), to see how it compares.

    The main FixGraphics.sh script, with some key lines highlighted:

    #!/bin/bash
    
    echo "Extract list of images from all ODP files"
    rm images.txt
    for f in *odp
    do
    	unzip -p "$f" content.xml | sed 's/></>\n</g' | grep Cameras | cut -d \" -f 2 | sort -u >> images.txt
    done
    
    echo "Make source file name list"
    # strip off leading relative pathing, set actual absolute path, un-quote blanks and special characters, add quotes
    sed 's/..\/..\/..\/../\/mnt/' images.txt | sed 's/%20/ /g' | sed 's/&amp;/\&/g' | sed 's/^.*/\"&\"/' > source.lst
    
    echo "Make target file name list"
    # set relative to current directory
    sed 's/\/mnt\/bulkdata\/Cameras\/MCWN/\.\/Pictures/' source.lst > target.lst
    
    echo "Make target directory list"
    # must add trailing quote stripped by dirname
    rm dirs.lst
    cat target.lst | while read tline ; do
    	tdir=`dirname "$tline"`
    	echo ${tdir}\"
    done > dirs.lst
    
    echo "Create target directory structure script"
    rm mkdirs.sh
    sort -u dirs.lst | while read dline ; do
    	echo mkdir --parents ${dline}
    done > mkdirs.sh
    chmod u+x mkdirs.sh
    
    echo "Create image file copy script"
    rm cpjpgs.sh
    cat dirs.lst | while read dline ; do
    	echo cp -n -t ${dline}
    done > cptemp.txt
    paste cptemp.txt source.lst > cpjpgs.sh
    chmod u+x cpjpgs.sh
    
    echo "Create ODP fixup script"
    echo "for f in *odp ; do" > fixodp.sh
    echo "unzip -p \"\$f\" content.xml > raw.xml" >> fixodp.sh
    echo "sed 's/..\/..\/..\/..\/bulkdata\/Cameras\/MCWN/\.\.\/Pictures/g' raw.xml > content.xml"  >> fixodp.sh
    echo "zip \"\$f\" content.xml"  >> fixodp.sh
    echo "done" >> fixodp.sh
    echo "rm raw.xml content.xml" >> fixodp.sh
    chmod u+x fixodp.sh
    

    Run mkdirs.sh, cpjpgs.sh, and fixodp.sh: then it Just Works.

    Some of the tricky parts:

    The content.xml file may be stored in unformatted mode, with everything mushed together into one huge line. To make it readable and parse-able, insert a newline between each pair of adjoining angle brackets:

    sed 's/></>\n</g'
    

    This burst of line noise un-escapes the file name from the way LO stores it internally. Note that the middle sed command really does have the literal escape sequence ampersand-amp-semicolon in it and the ampersand in the last one is the sed-ism for “the whole matching string”:

    sed 's/%20/ /g' | sed 's/&amp;/\&/g' | sed 's/^.*/\"&\"/'
    

    The difference between these two sed strings indicates the actual relative path to the Pictures subdirectory in the filesystem and the faked relative path from the LO pseudo-subdirectory where the document stores its internal state. The string of periods in the second command shows what LO stored for the original files in our documents; your mileage will certainly differ:

    sed 's/\/mnt\/bulkdata\/Cameras\/MCWN/\.\/Pictures/' source.lst > target.lst
    sed 's/..\/..\/..\/..\/bulkdata\/Cameras\/MCWN/\.\.\/Pictures/' raw.xml > content.xml
    

    I don’t know how they could make the file linkages work better, but it’d be really nice if there were a less horrible way to fix the breakage.

  • X10 Controller Lid Hinge Repair

    The modified lid for our X10 controller didn’t quite survive a fall from the dresser to a wood floor:

    X10 controller - hinge chip
    X10 controller – hinge chip

    Not even I could use more than one clamp on this job:

    X10 controller - hinge clamping
    X10 controller – hinge clamping

    Sometimes, it’s OK to do easy ones…