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

  • Ortur YRC-1 Chuck: Tube Reinforcement

    Ortur YRC-1 Chuck: Tube Reinforcement

    Tuck a neatly laser-cut disk into a flimsy cardboard tube:

    Ortur YRC-1 - cardboard tube reinforcement
    Ortur YRC-1 – cardboard tube reinforcement

    Put a big conical center in the tailstock:

    Ortur Chuck Rotary conical center - front
    Ortur Chuck Rotary conical center – front

    Whereupon the tube remains nicely tubular on both ends and aligned along the chuck axis:

    Ortur YRC-1 - chucked cardboard tube
    Ortur YRC-1 – chucked cardboard tube

    Which is why you save all that scrap material …

    Yes, it’s the core from a toilet paper roll, which is way cheaper than burning through tumblers / mugs / shot glasses / whatever while figuring this stuff out.

  • Prusa MK4 Nozzle Tool Mod

    Prusa MK4 Nozzle Tool Mod

    Contemplating a 0.8 mm nozzle to print more-transparent things, I ran off an Official MK4 Nozzle Replacement Tool to stabilize the heater block while applying a wrench to the nozzle:

    Prusa MK4 Nextruder Tool - without inlet scoop
    Prusa MK4 Nextruder Tool – without inlet scoop

    For obvious reasons, it doesn’t fit with the inlet scoop I installed as part of blinging the MK4:

    Prusa MK4 Nextruder Tool - inlet scoop installed
    Prusa MK4 Nextruder Tool – inlet scoop installed

    Removing the scoop is a matter of removing those two cap screws, which is no big deal, but a little flush-cutter action made that problem Go Away forever:

    Prusa MK4 Nextruder Tool - inlet scoop mod
    Prusa MK4 Nextruder Tool – inlet scoop mod

    Yeah, I should have modified the solid model. Maybe next time.

    A version of the tool fits extruders covered with an Official Prusa Silicone Sock thermal insulator, but they were out of stock when I was in the mood. My heater wears a knockoff sock:

    Prusa MK4 Nextruder Tool - silicone sock vs nozzle
    Prusa MK4 Nextruder Tool – silicone sock vs nozzle

    Unlike the Official Sock, there’s no way to get a wrench on the nozzle with that one installed, but removing the sock is no big deal.

    I apparently installed the nozzle / heater block slightly higher than specified, so the tool didn’t quite fit. Loosening those two thumbscrews and lowering the nozzle to fit the tool solved that problem. Fortunately, the automatic bed leveling routine corrects for nozzle height differences on the fly.

    The scoop is back on the fan, the sock once again surrounds the heater, and I can easily swap in the 0.8 mm nozzle when the time comes.

  • Olive Oil Bottle Cap Covers

    Olive Oil Bottle Cap Covers

    We buy olive oil in large bottles, then fill smaller bottles for easier handling. The caps on those bottles were never meant to last as long as we keep them and the thin, deeply drawn aluminum tends to crack after a while.

    So I conjured a cap cover from the vasty digital deep:

    Olive Oil Cap - solid model
    Olive Oil Cap – solid model

    Which looks exactly like you’d expect when printed in black PETG:

    Olive oil bottle cap - details
    Olive oil bottle cap – details

    You can see the raggedy edge of the original cap just inside the cover’s rim. A snippet of double-sided tape holds the cover in place, after de-oiling the cap with alcohol.

    Having gotten one to fit, I made enough for All The Bottles:

    Olive oil bottle cap - installed
    Olive oil bottle cap – installed

    Only two of those see regular service: one in use and another filled when the first is nearly empty. The remaining pair huddle in the back of the shelf against future need.

    The OpenSCAD source code produces those fancy knurls with BOSL2’s textured cyl() :

    // Shower soap dish
    // Ed Nisley - KE4ZNU
    // 2026-01-17
    
    include <BOSL2/std.scad>
    
    /* [Hidden] */
    
    HoleWindage = 0.2;
    Protrusion = 0.1;
    NumSides = 5*3*4;
    
    $fn=NumSides;
    
    ID = 0;
    OD = 1;
    LENGTH = 2;
    
    WallThick = 1.0;
    BaseThick = 2.0;
    
    CapOD = 36.0;
    
    CoverOA = [CapOD,CapOD + 2*WallThick,20.0 + BaseThick];
    
    //----------
    // Build it
    
      render()
        difference() {
          cyl(BaseThick,d=CoverOA[OD],chamfer1=1.0,anchor=BOTTOM) position(TOP)
            cyl(CoverOA[LENGTH] - BaseThick,d=CoverOA[OD],
                texture="trunc_pyramids",tex_size=[2,6], style="convex",
                anchor=BOTTOM);
          up(BaseThick)
            cyl(CoverOA[LENGTH],d=CoverOA[ID],anchor=BOTTOM);
        }
    
    
    
  • OMTech Laser Cutter vs. Ortur YRC-1 Rotary: Job Checklist

    OMTech Laser Cutter vs. Ortur YRC-1 Rotary: Job Checklist

    The process of switching the laser cutter from “normal” operation to the Ortur YRC-1 rotary and back again requires a checklist:

    Ortur YRC-1 Setup Checklist - installed
    Ortur YRC-1 Setup Checklist – installed

    Which looks like this:

    Ortur YRC-1 Setup Checklist
    Ortur YRC-1 Setup Checklist

    The same thing as a PDF will be more printable or readable.

    Previous posts cover what goes into making it work:

    Notes:

    • Always disable the rotary’s stepper driver before connecting or disconnecting its cable.
    • The Ortur YRC-1 rotary has a pulley ratio of 1:3, so the step/rev value is three times the DIP switch setting on the stepper driver. For this setup, 1600 → 4800 step/rev.
    • The honeycomb frame is a parallelogram, not a rectangle. I align the cardboard baffle / fixture to the bottom edge of the frame and the rotary to the bottom edge of the fixture opening, but your machine will be different. The angular alignment may not be off by enough to matter, but consistency is a virtue.
    • The Rotary.lbset and Linear.lbset files live on a file server with daily backups. Such backups will come in handy when you inadvertently overwrite one of those files with the other one. Trust me on this.
    • The Rotary.lbset file does not have Rotary Mode enabled, because the KT332N does not home the Y axis in that mode. If your rotary lacks a home switch, then it doesn’t matter and you’re on your own.
    • The KT332N controller has a [Reset] button that allegedly does a power-on reset and reloads all the changed Machine Settings. This sometimes does not work as expected: power-cycling the controller is the only way to be sure.
    • The autofocus operation must hit the focus pad, which can be ensured by positioning the pen near the pad, jogging the platform a few millimeters under the pen, tweaking X and the gantry while peering down parallel to the pen, then doing the autofocus.
    • The focus pad has a crosshair clearing the chonky Ortur 3-step jaws, but I set the controller’s [Origin] at the foot of the pad’s base for more elbow room.
    • The Z axis distance field in LightBurn’s Move window does not accept formulas, so you must divide the workpiece diameter by two. Using a focus stick to verify the ensuing nozzle-to-workpiece distance is a Good Idea™.
    • The LightBurn Job Origin dot must be on the top row, because the KT332N does not go into regions with negative coordinates. With the chuck on the left and the [Origin] just to its right, the upper left dot locks the LightBurn selection to the physical limits.
    • Selecting [Use Selection Origin] puts the Job Origin at the upper left (per the dot) of whatever you’ve selected, not everything on the LightBurn workspace. [User Origin] then locks the selection to the [Origin] set on the controller.

    As the saying goes, it works for me …

  • Translucent Night Light Light Guide

    Translucent Night Light Light Guide

    Our house came with several single-LED night lights featuring a transparent light guide / reflector:

    Nightlight light guide - original
    Nightlight light guide – original

    The plate had snapped off one of them and, being me, I wondered if I could replace it with something similar.

    Years passed.

    Obviously, this must be made from a transparent substance, which 3D printed things are not, but after some fiddling with parameters I thought the result might be informative.

    The guide plate is a section of a spherical surface, here approximated by a BOSL2 spheroid():

    Nightlight light guide - view side - solid model
    Nightlight light guide – view side – solid model

    The original is 3 mm thick, but 2 mm worked out better for my purposes by reducing the amount of infill:

    Nightlight light guide - wall side - solid model
    Nightlight light guide – wall side – solid model

    The intricate base latches into the lamp’s plastic case:

    Nightlight light guide - base - solid model
    Nightlight light guide – base – solid model

    The result is, at best, translucent, because it’s definitely not transparent:

    Nightlight light guide - translucent vs transparent
    Nightlight light guide – translucent vs transparent

    The zigzag pattern seems to come from the icosohedral approximation to the sphere, because it follows the surface tesselation.

    Getting the base shape right required several iterations, each printed with the model cut off just above the bottom of the guide plate:

    Nightlight light guide - test pieces
    Nightlight light guide – test pieces

    The first two attempts needed attention from a flush cutting pliers before fitting into the case, but they don’t call it rapid prototyping for nothin’.

    The original and replacement plugged into an outlet strip:

    Nightlight light guide - original vs printed on outlet strip
    Nightlight light guide – original vs printed on outlet strip

    While you can see the vague outline of the strip behind the printed light guide, it’s definitely lacking in detail:

    Nightlight light guide - outlet strip detail
    Nightlight light guide – outlet strip detail

    The striations throw more light into the room than the original:

    Nightlight light guide - printed
    Nightlight light guide – printed

    Fiddling with the 3D printing parameters might make it more transparent, but it’s going back into the box it came from after giving me a better idea of which parameters to tweak the next time around.

    The OpenSCAD source code as a GitHub Gist:

    // Nightlight light guide
    // Ed Nisley – KE4ZNU
    // 2026-01-13
    include <BOSL2/std.scad>
    Layout = "Show"; // [Show,Build,Plate,Base,Pipe]
    /* [Hidden] */
    HoleWindage = 0.2;
    Protrusion = 0.1;
    NumSides = 10*3*4;
    $fn=NumSides;
    ID = 0;
    OD = 1;
    LENGTH = 2;
    function ChordRadius(m,c) = (m^2 + (c^2)/4) / (2*m);
    PlateThick = 2.0;
    PlateOA = [60.0,50.0,PlateThick];
    PlateRound = 5.0;
    PlateTaper = 1.0;
    PlateAngle = atan(-2/60); // original plate angle, far end closer to wall
    PlateM = 2.4;
    PlateRadius = ChordRadius(PlateM,PlateOA.x); // light guide plate
    echo(PlateRadius=PlateRadius);
    WallThick = 2.0;
    MountOA = [23.4,17.0,5.5];
    MountRadius = ChordRadius(4.3,MountOA.x); // base arc in housing
    echo(MountRadius=MountRadius);
    PipeThick = 5.0;
    //———-
    // Define shapes
    // Oddly intricate base fitting into housing
    // Replete with magic numbers
    module Base() {
    difference() {
    union() {
    intersection() {
    cuboid([MountOA.x,MountOA.y,5.5],anchor=BOTTOM);
    back(6.5)
    tube(MountOA.z,or=MountRadius,wall=1.5,anchor=BOTTOM+BACK);
    }
    for (i=[-1,1])
    right(i*18.5/2)
    back(11.5)
    cuboid([1.8,8.0,MountOA.z],anchor=BOTTOM+BACK);
    for (i=[-1,1])
    right(i*22.0/2)
    cuboid([1.4,2.0,MountOA.z],anchor=BOTTOM+FRONT);
    fwd(5.0)
    cuboid([11.0,10.5,MountOA.z],anchor=BOTTOM+FRONT);
    }
    down(Protrusion)
    for (j=[-1,1])
    fwd(j*(1.5 + 10.0)/2)
    cuboid([7.0,10.0,MountOA.z + 2*Protrusion],anchor=BOTTOM);
    up(3.1)
    back(7.5)
    cuboid([MountOA.x,25.0,MountOA.z],anchor=BOTTOM+FRONT);
    }
    }
    // Light guide plate
    module Plate() {
    xrot(PlateAngle)
    zrot(90) yrot(90)
    left(PlateOA.x/2)
    down(PlateM + PlateThick/2)
    intersection() {
    up(PlateRadius)
    difference() {
    spheroid(PlateRadius,style="icosa");
    spheroid(PlateRadius – PlateThick,style="icosa");
    }
    cuboid(PlateOA + [0,0,2*PlateThick],rounding=PlateRound,edges="Z",anchor=BOTTOM);
    }
    }
    // Light pipe between base & plate
    // Magic numbers to fit case opening
    module Pipe() {
    difference() {
    intersection() {
    fwd(3.0/2 – 0.2)
    cuboid([MountOA.x,MountOA.y,PipeThick],rounding=0.5,edges="Z",anchor=BOTTOM+FRONT);
    back(6.5)
    cyl(MountOA.z,r=MountRadius,anchor=BOTTOM+BACK);
    }
    down(Protrusion)
    back((1.5 + 10.0)/2)
    cuboid([7.0,10.0,1.0 + Protrusion],anchor=BOTTOM);
    }
    }
    module Assembly() {
    Base();
    up(MountOA.z)
    Pipe();
    up(MountOA.z + PipeThick)
    Plate();
    }
    //———-
    // Build things
    if (Layout == "Base")
    Base();
    if (Layout == "Plate")
    Plate();
    if (Layout == "Pipe")
    Pipe();
    if (Layout == "Show" || Layout == "Build")
    Assembly();
  • Translucent Soap Dishes

    Translucent Soap Dishes

    A SquidWrench meeting discussion about printing transparent objects prompted me to conjure a soap dish from the vasty digital deep:

    Shower Soap Dish - solid model
    Shower Soap Dish – solid model

    They’re all done in “natural” PETG with sufficient variations in speed, temperature, extrusion multiplier, and fill pattern to stock the shower & tub:

    Translucent soap dishes
    Translucent soap dishes

    The single-thread sidewalls came out reasonably translucent in all the variations, but the baseplate remained stubbornly white-ish, even at 20 mm/s and 250 °C with 100% infill. The seams where the extruder retracts and lifts to the next layer remain conspicuous, with a scarf joint forming the white slab in the left-rear dish.

    Quite a while ago, I’d considered making soap dishes with shattered-glass bottoms, but came to my senses. These have some key advantages:

    • Exactly the right size for narrow shower shelves
    • Light enough to not damage anything when it inevitably falls off
    • Reasonably unbreakable when that happens
    • Easily replaced

    They’re also test pieces for the whole transparency thing, so it’s all good.

    The OpenSCAD source code as a GitHub Gist:

    // Shower soap dish
    // Ed Nisley – KE4ZNU
    // 2026-01-13
    include <BOSL2/std.scad>
    /* [Hidden] */
    HoleWindage = 0.2;
    Protrusion = 0.1;
    NumSides = 3*3*4;
    $fn=NumSides;
    ID = 0;
    OD = 1;
    LENGTH = 2;
    WallThick = 0.6;
    BaseThick = 2.0;
    //DishOA = [80.0,40.0,20.0]; // standing used Dove
    DishOA = [90.0,50.0,30.0]; // standing Dove
    //DishOA = [100.0,65.0,30.0]; // half-bar
    DishTaper = [10.0,10.0];
    CornerRadius = 15.0;
    DrainOA = [10.0,DishOA.y,3.0];
    DrainOC = DishOA.x/3;
    //———-
    // Build it
    difference() {
    union() {
    linear_extrude(BaseThick)
    rect([DishOA.x,DishOA.y] – DishTaper,rounding=CornerRadius);
    rect_tube(DishOA.z,wall=WallThick,
    size1=[DishOA.x,DishOA.y] – DishTaper,size2=[DishOA.x,DishOA.y],
    rounding=CornerRadius,anchor=BOTTOM);
    }
    for (j=[-1,1])
    right(j*DrainOC/2)
    up(BaseThick)
    cuboid(DrainOA,rounding=1.0,anchor=BOTTOM+BACK);
    }
  • Delta 17 Series Temperature Knob Removal

    Delta 17 Series Temperature Knob Removal

    As a reminder for the next time in this rodeo, the latches holding the temperature adjustment knob on the Delta 17 Series dual-handle bath / shower faucet look like this:

    Delta bath faucet cap latches
    Delta bath faucet cap latches

    I am unable to apply enough force to the smooth edge of the knob opposite the handle to un-latch it, so I jammed a small prydriver into the gap and twisted enough to pop the latch, at the obvious risk of scarring the chrome plating.

    A better approach would involve a plastic prydriver intended for consumer electronics case cracking.

    For the record:

    • Unlike the other bath faucets, this one has shutoff valves inside the wall
    • The replacement cartridge is RP46463
    • A dab of silicone grease on the rotating valve surface in the back improves its performance

    Ideally, I won’t need any of that information again.