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

  • Oak Stool Leg Creak

    Oak Stool Leg Creak

    Our square oak stool developed an annoying creak in two of its legs, resulting in a teardown & glue-up.

    The legs come in pairs held in place by snug screw fittings:

    Oak Stool Legs - mechanical joint
    Oak Stool Legs – mechanical joint

    The screw on the left slides into the tapered fitting on the right and latches firmly in place: no creaks in there! I have no idea what that fitting is called; my search-fu is unavailing.

    In any event, the offending legs were loose enough to admit a 6 mil = 0.16 mm miniblind snippet shim:

    Oak Stool Legs - loose joint
    Oak Stool Legs – loose joint

    Our Young Engineer, having taken up woodworking as a serious hobby, suggested the joint might have a loose dowel, which will be difficult to fix. Peering into the gap with a flashlight below showed that was the case:

    Oak Stool Legs - dowel revealed
    Oak Stool Legs – dowel revealed

    While it might be possible to force the joint apart enough to properly re-glue the dowels, I opted for a half measure by applying a spreader and easing wood glue into the gaps using the shim:

    Oak Stool Legs - gluing
    Oak Stool Legs – gluing

    An overnight session with the pipe clamp eliminated the creak, at least for now:

    Oak Stool Legs - clamping
    Oak Stool Legs – clamping

    The blue-and-yellow clamp fixed the loose splinter you didn’t notice in the second picture.

    Traces of glue along inside the joints suggest I’d done something like in the deep past. Ideally, I’ve learned enough to get it right this time.

  • Steel Shelving Foot Pads

    Steel Shelving Foot Pads

    All of the plastic pads vanished from the legs of a steel shelf unit somewhere along the way:

    Steel Shelving Foot Pads - post shape
    Steel Shelving Foot Pads – post shape

    Some solid modeling produced a suitable replacement shape:

    Steel Shelving Foot Pads - no pegs - solid model
    Steel Shelving Foot Pads – no pegs – solid model

    A few prototypes (with a broken OEM version at lower left) matched the model to reality:

    Steel Shelving Foot Pads - test pieces
    Steel Shelving Foot Pads – test pieces

    They’re natural & black TPU, because the job requirements include being tough and bendy:

    Steel Shelving Foot Pads - installed
    Steel Shelving Foot Pads – installed

    Each one takes about half an hour to ooze from the Makergear M2, so after verifying the prototype’s fit, printing four at a time makes sense:

    Steel Shelving Foot Pads - slicer
    Steel Shelving Foot Pads – slicer

    The OpenSCAD code includes the pegs in the original and the first chunky TPU version:

    Steel Shelving Foot Pads - with pegs - solid model
    Steel Shelving Foot Pads – with pegs – solid model

    It turns out they don’t have any obvious benefit in a TPU pad, so they’re disabled in the code.

    Now those legs sit firmly on the floor and the post tops aren’t nearly so threatening.

    The OpenSCAD source code as a GitHub Gist:

    // Steel Shelf Foot Pads
    // Ed Nisley – KE4ZNU
    // 2026-04-18
    include <BOSL2/std.scad>
    /* [Hidden] */
    Protrusion = 0.01;
    NumSides = 4*9;
    $fn=NumSides;
    Clearance = 1.0/2;
    WallThick = 1.0 + Clearance;
    BaseThick = 2.0;
    PadOAH = BaseThick + 11.0;
    RollID = 6.4;
    RollOD = 7.4 + Clearance;
    RollOffset = 29.5;
    LegThick = 0.5 + 2*Clearance;
    Pins = [
    [-(RollOD/2), (RollOffset + RollOD/2),0],
    [(RollOffset + RollOD/2), -(RollOD/2),0],
    ];
    //—–
    // Build things
    union() {
    difference() {
    union() {
    for (pin = Pins)
    translate(pin)
    cyl(PadOAH,d=RollOD + 2*WallThick,anchor=BOTTOM);
    translate([-(WallThick + LegThick),-(WallThick + LegThick),0])
    cuboid([2*WallThick + LegThick,WallThick + LegThick + Pins[0].y,PadOAH],
    anchor=BOTTOM+LEFT+FRONT);
    translate([-(WallThick + LegThick),-(WallThick + LegThick),0])
    cuboid([WallThick + LegThick + Pins[1].x,2*WallThick + LegThick,PadOAH],
    anchor=BOTTOM+LEFT+FRONT);
    cyl(PadOAH,r=(WallThick + LegThick),anchor=BOTTOM);
    }
    up(BaseThick)
    cyl(PadOAH,r=LegThick,anchor=BOTTOM);
    up(BaseThick)
    for (pin = Pins)
    translate(pin)
    cyl(PadOAH,d=RollOD,anchor=BOTTOM);
    up(BaseThick) {
    translate(Pins[0])
    cuboid([RollOD/2,RollOD/2,PadOAH],anchor=BOTTOM+LEFT+BACK);
    translate(Pins[1])
    cuboid([RollOD/2,RollOD/2,PadOAH],anchor=BOTTOM+RIGHT+FRONT);
    }
    up(BaseThick) {
    fwd(LegThick)
    cuboid([LegThick,Pins[0].y + LegThick,PadOAH],anchor=BOTTOM+RIGHT+FRONT);
    left(LegThick)
    cuboid([Pins[1].x + LegThick,LegThick,PadOAH],anchor=BOTTOM+LEFT+BACK);
    }
    }
    if (false)
    for (pin = Pins)
    translate(pin) {
    cyl(PadOAH,d=RollID/2,anchor=BOTTOM);
    for (a = [0,90])
    zrot(a)
    cuboid([1.0,RollID – 2*Clearance,PadOAH],anchor=BOTTOM);
    }
    }

  • PolyDryer Humidity: April-ish

    PolyDryer Humidity: April-ish

    After about five weeks:

    2026-04-16
    Filament%RHWeight – gWt gain – gGain %
    PETG White14
    PETG Black14
    PETG Orange2252.52.55.0%
    PETG Natural15
    PETG-CF Blue2355.45.410.8%
    PETG-CF Gray18
    PETG-CF Black14
    PETG Blue10
    TPU Clear14
    TPU Black14

    Most of the PolyDryer boxes had the same humidity as before, so I didn’t disturb them. When the humidity starts to rise, then we’ll see what’s going on in there.

    The PETG Orange meter continues to misbehave and has been glitching from 22% to 30%. The indicator card shows the humidity is around 10% inside and the relatively low weight gain suggests there’s not much water to be adsorbed.

    The PETG-CF Blue spool is new and, once again, shows filament does not arrive bone-dry in the factory wrapper.

    Those two boxes now have alumina beads.

    Dehydrating the jar of wet silica gel on the induction cooktop (set for 405 °F) sweated it down from 532 g to 503 g over the course of four hours, with nearly all of that change in the first two hours.

    Obligatory photo from a while ago, because it looks pretty much the same now:

    Silica gel beads - drying
    Silica gel beads – drying
  • Image Trace and Cut

    Image Trace and Cut

    Having admired the paper craft at RavensBlight and with some experience in simple paper cuttery, I had to try my hand at the Ghost Truck. Rather than using an X-Acto knife and straight edge around the perimeter, I set it up for laser cutting.

    The instructions & layouts are images in PDF files, so it’s straightforward to import them into LightBurn and trace the outlines:

    Ghost Truck - LightBurn vectors
    Ghost Truck – LightBurn vectors

    Tracing produces short vectors and irregular curves:

    Ghost Truck - LightBurn pre-optimize
    Ghost Truck – LightBurn pre-optimize

    The Optimize Shapes tool and a little manual intervention clean things up:

    Ghost Truck - LightBurn post-optimize
    Ghost Truck – LightBurn post-optimize

    You must manually add any cuts buried in the pattern, as in the Trailer Wheels parts shown above, so pay attention to the instructions.

    Use the Move Laser tool to put the laser head at an obvious point on the layout, then skootch the printed page (in a Letter size fixture) to put that point under the beam. Repeat for another point, iterate until satisfied, then Fire The Laser:

    Ghost Truck - cutout overview
    Ghost Truck – cutout overview

    Some irregularities peek around the edges:

    Ghost Truck - cutout detail
    Ghost Truck – cutout detail

    On the whole, it’s much better than I could do with a knife.

    Repeat for the other seven pages of parts:

    Ghost Truck - Assembly
    Ghost Truck – Assembly

    With some diligence I may have it ready for All Hallows Eve …

  • Generator Cover Screw Knobs: Redux

    Generator Cover Screw Knobs: Redux

    So the tape holding the knobs onto the generator screws lost its grip after about three weeks. As with so many things these days, “eventually” isn’t nearly what it used to be.

    The screws now sport 3M outdoor-rated foam tape which generally requires force majeure to remove:

    Generator Cover Screw Knob - 3M tape
    Generator Cover Screw Knob – 3M tape

    Although I got one of the screws out of the cover while modeling the knob, the other was more firmly implanted and resisted my entreaties.

    However, having recently spotted the small tool kit accompanying the generator, should the knobs fall off again, I’ll forcibly remove the screws, put them in the tool bag, and rely on the snaps to hold the cover in place.

  • Punched Cards: Summary

    Punched Cards: Summary

    At last, I can make plausible-looking punched cards:

    Test Card 3 - punched
    Test Card 3 – punched

    Then chop most of them up to make a layered eagle:

    Apollo Eagle - V3 - overview
    Apollo Eagle – V3 – overview

    Back in the beginning, the grand overview explained the card production process, but now I can pull all the blog posts into a more coherent story.

    Start by making trays to hold the 1/3 Letter sized printed cards and the final cut cards. A coat of paint improves the result:

    Card Storage Tray - front
    Card Storage Tray – front

    Then make a fixture to position the 1/3 Letter printed cards in the laser and a simple cover for the honeycomb to direct the air flow:

    Punched cards - laser fixture overview
    Punched cards – laser fixture overview

    The current versions of the Python program to convert a line of text into the SVG images required to print and punch the cards, plus the Bash scripts handling all the command line parameters, are now in a single GitHub Gist . I used the source code from the Apollo 11 CSM AGC for historic reasons.

    The Bash scripts invoke the Python program twice to produce both the printed layout:

    Punched Cards - test card - printed
    Punched Cards – test card – printed

    And “punched” holes surrounded by the perimeter cut for the laser:

    Test Card 3 - LightBurn layout
    Test Card 3 – LightBurn layout

    The Python program handles translation from the ASCII (really Unicode) character set into the EBCDIC punched hole layout. Because LightBurn and Inkscape handle SVG scaling differently, the script sorts that out.

    Because my printer produces slightly off-size printed images, the script uses Inkscape to convert the SVG into a PNG, then downscales the image by a few percent (a different percent on each axis). It composites the card logo onto the PNG and slams the result onto a Letter page in the proper place to hit the 1/3 Letter sheets.

    Aligning the targets printed on the cards with the corresponding target positions in the laser SVG requires careful fixture skootching:

    Red dot vs printed target vs laser spot alignment
    Red dot vs printed target vs laser spot alignment

    A batch file feeds the laser SVGs into LightBurn, so the process boils down to a few mouse clicks per card.

    With a tray full of finished cards in hand, I converted the eagle from the Apollo 11 mission patch into a set of outlines:

    Apollo 11 Patch - eagle layers
    Apollo 11 Patch – eagle layers

    Each of those outlines defines the shape of a layer cut from those printed cards:

    Apollo Eagle - V3 - head
    Apollo Eagle – V3 – head

    Not gonna lie: it took serious effort to cut up those cards.

    Each layer has a specific set of cards chosen to put the holes in the proper place while hiding the card joints:

    Apollo Eagle - V4 Layer 1 cards
    Apollo Eagle – V4 Layer 1 cards

    Mirroring the layout helped me arrange the cards correctly while taping the back side of the joints with book repair tape:

    Apollo Eagle - V4 Layer 1 cards - mirrored
    Apollo Eagle – V4 Layer 1 cards – mirrored

    Slap a sheet of cards on the laser platform, align it to the layer’s outline, Fire The Laser, and stack up the results:

    Apollo Eagle - V3 - tail
    Apollo Eagle – V3 – tail

    I used Elmer’s All Purpose Glue Stick to hold the layers together, figuring if it’s good enough for kindergartners it’s good enough for me.

    And that’s all there is to it …

  • Punched Cards: Painted Storage Trays

    Punched Cards: Painted Storage Trays

    If you must have a stack of punched cards on your desk, a nice tray does wonders for the office decor:

    Card Storage Tray - overview
    Card Storage Tray – overview

    That’s a coat of Rustoleum Painter’s Touch 2x [many more adjectives] Kona Brown Gloss rattlecan paint atop Trocraft Eco board. I sprayed the separate parts on a sheet of newspaper, waited 20 minutes, flipped them over, sprayed the other side, gave them another 20 minutes, and got them inside out of the wind for a day of curing.

    They’re held together by cyanoacrylate adhesive dots between the tabs, with accelerator daubed on the other side of the joint to encourage prompt curing. In general I do not like cyanoacrylate, but sometimes it seems like the right hammer for the job.

    The trays are a definite step up from chipboard:

    Punched cards - storage trays
    Punched cards – storage trays

    It’s even pretty up close:

    Card Storage Tray - front
    Card Storage Tray – front

    They might be Presentation Grade.