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.

Category: Machine Shop

Mechanical widgetry

  • FG085 Function Generator

    The topic of function generators came up at Squidwrench a while ago (Sophi was tinkering with LCD shutters) and I finally picked up one of those JYE Tech FG085 DDS function generators to see how they work:

    FG085 Fn Gen - in case
    FG085 Fn Gen – in case

    Short answer: adequate, if you’re not too fussy.

    The board arrived with a bizarre solder defect. It seems a solder stalk yanked one terminal off a ceramic SMD caps:

    FG085 - Solder stalk - C26
    FG085 – Solder stalk – C26

    The schematic and adjacent parts suggested the victim was a 10 uF cap, so I replaced it with one from my stash that worked fine.

    However, after soldering enough of the switches to do something useful, the board wouldn’t power up. With a bit of poking around, I discovered the power jack had +15 V from the wall wart, but the center terminals on the DPDT power switch that should have been connected to the jack showed maybe 0.3 V. Jumpering around the failed via and a short trace on the bottom surface let the board power up correctly:

    FG085 - Jumpered power trace
    FG085 – Jumpered power trace

    If you’re building one of these, solder one pin of each switch, push all the switch caps in place, shove the faceplate over all of them, tape it to the PCB, make sure all the switches are push-able, then solder the remainder of the switch pins. If you do them one by one, you’re certain to end up with a few mis-aligned switches that will either prevent the faceplate from sliding over them or wedge firmly against the side of their assigned hole. Just sayin’.

    It lives in a case from Thingiverse:

    FG085enclosure - 1268379
    FG085enclosure – 1268379

    I tweaked the dimensions slightly to fit the (slightly larger, possibly new, maybe tolerance-eased) front panel, but the bottom mounting screw hole spacing depends on the front panel size, not a specific set of dimensions, leading me to relocate those holes by abrasive adjustment. I didn’t bother with the lid (which doesn’t clear the BNC jack anyway) or the printed plastic feet (having a supply of silicone rubber feet).

    The fancy vent gridwork along the sides printed surprisingly well, even in PETG. I’d have gone with larger slots, although I doubt the thing really needs vents in the first place.

    The DDS sine wave output is rough, to say the least:

    FG085 Fn Gen - 60 kHz sine
    FG085 Fn Gen – 60 kHz sine

    The spectrum shows oodles of harmonic content:

    FG085 Fn Gen - 60 kHz sine - spectrum
    FG085 Fn Gen – 60 kHz sine – spectrum

    A closer look:

    FG085 Fn Gen - 60 kHz sine - spectrum - detail
    FG085 Fn Gen – 60 kHz sine – spectrum – detail

    Stepping back a bit shows harmonics of (and around) the 2.5 MHz DDS sampling frequency:

    FG085 Fn Gen - 60 kHz sine - spectrum - 10 MHz
    FG085 Fn Gen – 60 kHz sine – spectrum – 10 MHz

    For comparison, my old Fordham FG-801 analog function generator has nice smooth harmonics:

    FG-801 Fn Gen - 60 kHz sine - spectrum
    FG-801 Fn Gen – 60 kHz sine – spectrum

    Closer in:

    FG-801 Fn Gen - 60 kHz sine - spectrum - detail
    FG-801 Fn Gen – 60 kHz sine – spectrum – detail

    Of course, that crusty old analog dial doesn’t provide nearly the set-ability of a nice digital display.

     

  • External Li-Ion Pack: More Sawing

    Two of the external Li-Ion battery packs I’m using with the bike radios seemed to fail quickly after being charged, so I sawed them open to check the state of the cells. This time I used the fine-tooth cutoff blades, rather than a coarse slitting saw:

    Li-Ion pack - sawing case
    Li-Ion pack – sawing case

    As before, a 2 mm depth-of-cut, done 0.25 mm per pass after the first millimeter, seems about right. I didn’t saw the front of the case near the jack, which proved to be a mistake; the interlocked case halves need cutting.

    No cell trouble found, which leads me to suspect an intermittent short in the battery-to-radio cable that trips the battery protection circuit. The spare cables went into hiding during the shop cleanout, so I can’t swap in a known-good cable just yet; of course, the existing cable behaves perfectly on the bench. The suspect cable is now on my bike and, if the problem follows the cable, further surgery will be in order.

    For the record, the insides look like this:

    Li-Ion pack - interior
    Li-Ion pack – interior

    The cell label seems to show a 2004 date code:

    Li-Ion pack - cell label
    Li-Ion pack – cell label

    Given that I got them on closeout in early 2010, it definitely isn’t 2014.

    Unlike some of the other cheap batteries around here, they’ve been spectacularly successful!

  • Michelin Protek Max Tubes

    Within the space of four days, we had three rear-tire flats:

    • A tire liner wear-through, after which I didn’t replace the liner
    • Four miles later, a blowout through a tread gash previously covered by the tire liner
    • A puncture flat directly through the tread

    Basically, erosion from the (last remaining, I think) liner in the rear tire of Mary’s bike caused the first flat; I patched the tube and didn’t notice the gash. After the blowout, I patched the tube again, booted the gash (with a snippet from a roll of PET bottle plastic I carry around for exactly that purpose), stuck an ordinary patch atop the boot to cover its edges, and the whole mess has held air just fine for the last week. I’m reluctant to mess with success.

    Not having a tire liner caused the third flat, this time on my bike. The wound looked like a nail or glass shard punched directly through the Kevlar armor behind the tread. Fortunately, it happened (or, more exactly, I realized I had a flat) half a mile from home, so I fired a CO2 cartridge into the tube and pedaled like crazy, which got me halfway to the goal and I rolled the rest of the way on a dead-flat tire.

    Ya can’t win.

    So I picked up a pair of Michelin Protek Max tubes, the weirdest things I’ve ever stuffed into a bike tire:

    Michelin Protek Max Tube - carton
    Michelin Protek Max Tube – carton

    The bumps along the tread surface are much larger and uglier than shown in that picture:

    Michelin Protek Max tube
    Michelin Protek Max tube

    The rubber forming the protrusions has the same thickness as the rest of the tube, so you’re looking at soft, flexible shapes, rather than thick bumps.

    The “liquid” inside must be a thin film over the inner surface. I’ve never been a big fan of tire sealants, mostly because they’re reputed to ooze to the bottom of the tire into off-balance puddles.

    For future reference, the Official Quasi-Instruction Manual / Blurb (clicky for more dots):

    Michelin Protek Max Tube - instructions
    Michelin Protek Max Tube – instructions

    We’ll see how well these work…

  • LF Loop Antenna: Joint Soldering

    Given five meters of 40 conductor ribbon cable, the object is to make a 40 turn five foot diameter loop antenna by soldering the ends together with a slight offset. After squaring off, marking, and taping the cable ends, I stripped the wires:

    LF Loop Antenna - wire stripping
    LF Loop Antenna – wire stripping

    Twirling those little snippets before pulling them off produced nicely twisted wire ends with no few loose strands. Separate the individual wires, wrap with transformer tape to prevent further separation, run a flux pen along the wire ends, tin with solder, repeat on the far end of the cable.

    Tape one end to the ceramic tile. Align the other end with a one-wire lateral offset and the stripped sections overlapping, then tape it down. Slide a paper strip between the ends, passing under every other wire, to separate the top pairs from the bottom pairs, then tape the strip in place:

    LF Loop Antenna - wire prep
    LF Loop Antenna – wire prep

    Grab each left wire with a needle point tweezer, forcibly align with the corresponding right wire, touch with the iron, iterate:

    LF Loop Antenna - top solder joints
    LF Loop Antenna – top solder joints

    The red wire trailing off to the left will become the center tap.

    Slide a strip of the obligatory Kapton tape underneath the finished joints, slobber on enough clear epoxy to bond the insulation on both sides of the joints into a solid mass, squish another strip atop the epoxy, smooth down, wait for curing.

    Untape from the tile, flip, re-tape, solder the bottom joints similarly, add Kapton / epoxy / Kapton, and that’s that:

    LF Loop Antenna - complete joint
    LF Loop Antenna – complete joint

    Prudence dictates checking for end-to-end continuity after you finish soldering and before you do the Kapton + epoxy thing, which is where I discovered I had 80 Ω of distributed resistance along 200 meters of cable. A quick check showed 40 Ω at the center tap and 20 Ω at the quarters (the black wires on the left mark those points), so it wasn’t a really crappy joint somewhere in the middle.

    The joint and its dangly wires cry out for a 3D printed stiffener which shall remain on the to-do list until I see how the loop tunes up.

  • BOB Yak Fender Fracture: Fixed

    We agreed that repairing the failed flag ferrule made the trailer much quieter, but it still seemed far more rattly than we remembered. It just had to be the fender, somehow, and eventually this appeared:

    BOB Yak Fender Mount - fractures
    BOB Yak Fender Mount – fractures

    The obviously missing piece of the fender fell out in my hand; the similar chunk just beyond the wire arch fell out after I took the pictures. Yes, the wire has indented the fender.

    The arch supports the aluminum fender, with a pair of (flat) steel plates clamping the wire to the fender:

    BOB Yak Fender Mount - screw plates and pads
    BOB Yak Fender Mount – screw plates and pads

    The cardboard scraps show I fixed a rattle in the distant past.

    Being aluminum, the fender can’t have a replacement piece brazed in place and, given the compound curves, I wasn’t up for the requisite fancy sheet metal work.

    Instead, a bit of math produces a pair of shapes:

    BOB Yak Fender Mount - solid model
    BOB Yak Fender Mount – solid model

    In this case, we know the curve radii, so the chord equation gives the depth of the curve across the (known) width & length of the plates; the maximum of those values sets the additional thickness required for the plates. The curves turn out to be rather steep, given the usual layer thickness and plate sizes, which gives them a weird angular look that absolutely doesn’t matter when pressed firmly against the fender:

    BOB Yak Fender Mount - Slic3r preview
    BOB Yak Fender Mount – Slic3r preview

    The computations required to fit Hilbert Curve surface infill into those small exposed areas took basically forever; given that nobody will ever see them, I used the traditional linear infill pattern. A 15% 3D Honeycomb interior infill turned them into rigid parts.

    The notch in the outer plate (top left, seen notch-side-down) accommodates the support wire:

    BOB Yak Fender Mount - outer
    BOB Yak Fender Mount – outer

    The upper surface would look better with chamfered edges, but that’s in the nature of fine tuning. That part must print with its top surface downward: an unsupported (shallow) chamfer would produce horrible surface finish and life is too short for fussing with support. Given the surrounding rust & dings, worrying about aesthetics seems bootless.

    The original screws weren’t quite long enough to reach through the plastic plates, so I dipped into my shiny-new assortment of stainless steel socket head cap screws. Although the (uncut) M5x16 screws seem to protrude dangerously far from the inner plate, there’s another inch of air between those screws and the tire tread:

    BOB Yak Fender Mount - inner
    BOB Yak Fender Mount – inner

    Given the increase in bearing area, that part of the fender shouldn’t fracture for another decade or two.

    I loves me my M2 3D printer …

    The OpenSCAD source code as a GitHub Gist:

    // BOB Yak Fender Mounting Bracket
    // Ed Nisley – KE4ZNU – July 2016
    Layout = "Build"; // Build Fender Rod BlockInner BlockOuter
    //- Extrusion parameters must match reality!
    // Print with 1 shell and 3 solid layers
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.3;
    Protrusion = 0.1; // make holes end cleanly
    inch = 25.4;
    //———————-
    // Dimensions
    IR = 0; // radii seem easier to measure here
    OR = 1;
    LENGTH = 2;
    Fender = [25,220,1]; // minor major thickness
    FenderSides = 128;
    FenderRod = [5.0/2,(Fender[IR] + 10),5.0/2]; // support rod dia/2, arch radius, rod dia/2 again
    ChordMajor = Fender[OR] – sqrt(pow(Fender[OR],2) – pow(40,2)/4);
    ChordMinor = Fender[IR] – sqrt(pow(Fender[IR],2) – pow(25,2)/4);
    ChordFit = max(ChordMajor,ChordMinor);
    echo("Chords: ",ChordMajor,ChordMinor,ChordFit);
    BlockInnerOA = [40,25,1 + ChordFit];
    BlockOuterOA = [35,25,2 + ChordFit];
    echo(str("Inner Block: ",BlockInnerOA));
    echo(str("Outer Block: ",BlockOuterOA));
    ScrewOD = 5.0;
    ScrewOC = 20.0;
    NumSides = 6*4;
    //———————-
    // 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(r=(FixDia + HoleWindage)/2,
    h=Height,
    $fn=Sides);
    }
    module FenderShape() {
    rotate([90,0*180/FenderSides,0])
    rotate_extrude(angle=180,$fn=FenderSides)
    translate([(Fender[OR] – Fender[IR]),0])
    circle(r=Fender[IR],$fn=2*NumSides);
    }
    module RodShape() {
    rotate([90,0*180/FenderSides,0])
    rotate_extrude(angle=180,convexity=2,$fn=FenderSides)
    translate([(FenderRod[OR] – FenderRod[IR]),0])
    circle(r=FenderRod[IR],$fn=NumSides);
    }
    module BlockInner() {
    intersection() {
    difference() {
    linear_extrude(height=BlockInnerOA[LENGTH],convexity=3)
    hull() {
    for (i=[-1,1])
    translate([i*(BlockInnerOA[0]/2 – BlockInnerOA[1]/2),0,0])
    circle(d=BlockInnerOA[1]);
    }
    for (i=[-1,1])
    translate([i*(ScrewOC/2),0,-Protrusion])
    PolyCyl(ScrewOD,2*BlockInnerOA[2],6);
    }
    translate([0,0,(BlockInnerOA[2] – Fender[OR])])
    FenderShape();
    }
    }
    module BlockOuter() {
    difference() {
    linear_extrude(height=BlockOuterOA[LENGTH],convexity=4)
    hull() {
    for (i=[-1,1])
    translate([i*(BlockOuterOA[0]/2 – BlockOuterOA[1]/2),0,0])
    circle(d=BlockOuterOA[1]);
    }
    for (i=[-1,1])
    translate([i*(ScrewOC/2),0,-Protrusion])
    PolyCyl(ScrewOD,2*BlockOuterOA[2],6);
    translate([0,0,(BlockOuterOA[2] – ChordFit + Fender[OR])])
    rotate([180,0,0])
    FenderShape();
    translate([0,0,(FenderRod[OR] – 2*FenderRod[IR])])
    rotate([180,0,90])
    RodShape();
    }
    }
    //- Build things
    if (Layout == "Fender")
    FenderShape();
    if (Layout == "Rod")
    RodShape();
    if (Layout == "BlockInner")
    BlockInner();
    if (Layout == "BlockOuter")
    BlockOuter();
    if (Layout == "Build") {
    translate([0,-BlockInnerOA[0]/2,0])
    BlockInner();
    translate([0,BlockOuterOA[0]/2,0])
    BlockOuter();
    }

    The original dimension measurement and design doodle:

    BOB Yak Fender Mount - doodles
    BOB Yak Fender Mount – doodles
  • BOB Yak Flag Ferrule Failure

    At some point along a recent grocery ride, the top half of the flag mast on the BOB Yak trailer went missing.

    We had a general idea of where it happened, but, fortunately, I Have The Technology:

    This slideshow requires JavaScript.

    The flag and pole ended up just off the road, only slightly the worse for wear. I hadn’t planned on riding two dozen miles on a rather hot and humid summer day, but so it goes.

    The lower ferrule chafed away enough of the fiberglass pole that it could slip downward, eventually releasing the upper ferrule:

    BOB Yak Flag - ferrule chafing
    BOB Yak Flag – ferrule chafing

    That split near the end enlarged the pole enough that the ferrule couldn’t slide off, so I contented myself with cross-drilling the whole affair for a 1-72 screw, packing epoxy into the hole, tucking more epoxy up inside the bottom end of the ferrule, then burying the screw and nut:

    BOB Yak Flag - reassembled ferrule
    BOB Yak Flag – reassembled ferrule

    While I had it on the bench, I replaced the somewhat shredded fluorescent orange tape just under the flag and added a strip of diagonally striped red-and-white retroreflective tape for an attractive barber-pole appearance.

    That should last for a little while longer…

     

  • Mini-Lathe: Electronics Box Screw Insert

    Two bags of knurled brass M4 inserts arrived from halfway around the planet, so I could fix the offending hole behind the LMS mini-lathe’s electronics box:

    LMS Mini-lathe - mistapped cover hole
    LMS Mini-lathe – mistapped cover hole

    Although you should remove the lathe from the chip pan and do it right, I gimmicked up a reducer for the long drill extension that, IIRC, came with the house:

    LMS mini-lathe - drill bit extension
    LMS mini-lathe – drill bit extension

    I figured that would be close enough, given the starting situation. The cast iron frame is perhaps half an inch thick at that point, with steel brackets bolted to the far side, so use the hole as a guide and don’t drill with wild abandon.

    A long M4 screw serves to align the insert eyeballometrically perpendicular to the surface while the JB Kwik epoxy cured:

    LMS mini-lathe - insert alignment
    LMS mini-lathe – insert alignment

    It definitely doesn’t look like it grew there and, indeed, looks like the obvious repair job it is:

    LMS mini-lathe - insert epoxied
    LMS mini-lathe – insert epoxied

    I thought about replacing all the screws, but decided it was so well hidden that, if I didn’t tell anybody, they’d never know:

    LMS mini-lathe - cover screw installed
    LMS mini-lathe – cover screw installed

    Done!