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: Improvements

Making the world a better place, one piece at a time

  • Layered Paper: Mariner’s Compass in Colors

    Layered Paper: Mariner’s Compass in Colors

    Having recently shotgunned Amazon’s selection of colored art paper, this becomes possible:

    Mariners Compass - inset browns
    Mariners Compass – inset browns

    It’s the same geometry as the plain white layered version, with somewhat more attention to detail, and consists of a dozen layers glued and stacked on an assembly fixture.

    The quilt-block version uses simple layering:

    Layered Paper - Mariners Compass - Beyer 133
    Layered Paper – Mariners Compass – Beyer 133

    No commercial potential, but I like the effect.

  • The Good Old Days Weren’t: Arsenical Poisons

    The Good Old Days Weren’t: Arsenical Poisons

    An entry from The New Garden Encylopedia, copyright 1936 through 1946, gives recommendations for using arsenical poisons in your garden:

    Arsenical poisons
    Arsenical poisons

    My father always said anybody who talks fondly of The Good Old Days wasn’t alive back then. He was and thought things had definitely improved since then.

    Words to live by.

  • Wire Plant Stand Feet

    Wire Plant Stand Feet

    A pair of plant stands from a friend’s collection ended up in Mary’s care and cried out for feet to keep their welded steel wire legs from scratching the floor:

    Wire plant stand feet - indoor stand
    Wire plant stand feet – indoor stand

    Admittedly, it’s not the prettiest stand you can imagine, but the sentimental value outweighs all other considerations.

    The feet are shrink-wrapped around the legs with enough curviness to look good:

    Wire plant stand feet - show side view
    Wire plant stand feet – show side view

    With a drain hole in the bottom to prevent water from rusting the wires any more than they already are:

    Wire plant stand feet - show bottom view
    Wire plant stand feet – show bottom view

    I briefly considered a flat bottom at the proper angle to sit on the floor, but came to my senses; it would never sit at the proper angle.

    The end results snapped into place:

    Wire plant stand feet - indoor detail
    Wire plant stand feet – indoor detail

    Of course the other stand, at first glance identical to the one above, has a different wire size and slightly different geometry, which I only discovered after printing another trio of feet. Changing the appropriate constants in the OpenSCAD program and waiting an hour produced a better outcome:

    Wire plant stand feet - outdoor stand
    Wire plant stand feet – outdoor stand

    Living in the future is good, all things considered.

    The OpenSCAD code as a GitHub Gist:

    // Wire plant stand feet
    // Ed Nisley KE4ZNU
    // 2024-11-06
    Layout = "Show"; // [Show,Build,Leg,LegPair,FootShell,Foot,Section]
    /* [Hidden] */
    ID = 0;
    OD = 1;
    LENGTH = 2;
    TOP = 0;
    BOT = 1;
    FootLength = 30.0; // vertical foot length
    LegRings = // [255.0,350.0,300.0]; // top dia, bottom dia, vertical height
    [260.0,312.0,300.0];
    WireOD = //4.6 + 0.4; // oversize to handle bent legs
    5.7 + 1.0;
    DrainOD = 4.0; // drain hole in the bottom
    LegWidth = // [65.0,9.7]; // outer width at top & bottom
    [95.0, 12.0];
    LegAngle = atan((LegWidth[TOP] – LegWidth[BOT])/(2*LegRings[LENGTH]));
    StandAngle = atan((LegRings[TOP] – LegRings[BOT])/(2*LegRings[LENGTH]));
    WallThick = 3.0;
    FootWidth = 2*[WallThick,WallThick] +
    [LegWidth[BOT] + LegWidth[TOP]*FootLength/LegRings[LENGTH],LegWidth[BOT]];
    echo(FootWidth=FootWidth);
    NumSides = 2*3*4;
    Protrusion = 0.1;
    //—– Set up pieces
    module Leg() {
    hull()
    for (k = [0,1])
    translate([0,0,k*LegRings[LENGTH]])
    sphere(d=WireOD,$fn=NumSides);
    }
    module LegPair() {
    for (i = [-1,1])
    translate([i*(LegWidth[BOT] – WireOD)/2,0,0])
    rotate([0,i*LegAngle,0])
    rotate(180/NumSides)
    Leg();
    hull() // simulate weld for flat bottom
    for (i = [-1,1])
    translate([i*(LegWidth[BOT] – WireOD)/2,0,0])
    rotate([0,i*LegAngle,0])
    rotate(180/NumSides)
    sphere(d=WireOD,$fn=NumSides);
    }
    module FootShell() {
    difference() {
    hull() {
    for (i = [-1,1]) {
    translate([i*((FootWidth[BOT] – WireOD)/2 – WallThick),0,0])
    rotate(180/NumSides)
    sphere(d=(WireOD + 2*WallThick),$fn=NumSides);
    translate([i*((FootWidth[TOP] – WireOD)/2 – WallThick),0,FootLength – WireOD/2])
    rotate(180/NumSides)
    sphere(d=(WireOD + 2*WallThick),$fn=NumSides);
    }
    }
    translate([0,0,FootLength + FootLength/2])
    cube([2*FootWidth[TOP],10*WallThick,FootLength],center=true);
    rotate(180/NumSides)
    cylinder(d=DrainOD,h=4*FootLength,center=true,$fn=NumSides);
    }
    }
    module Foot() {
    difference() {
    FootShell();
    hull()
    LegPair();
    }
    }
    //—– Build it
    if (Layout == "Leg")
    Leg();
    if (Layout == "LegPair")
    LegPair();
    if (Layout == "FootShell")
    FootShell();
    if (Layout == "Foot")
    Foot();
    if (Layout == "Section")
    difference() {
    Foot();
    cube([FootWidth[TOP],(WireOD + 2*WallThick),2*FootLength],center=false);
    }
    if (Layout == "Show") {
    rotate([StandAngle,0,0]) {
    Foot();
    color("Green",0.5)
    LegPair();
    }
    }
    if (Layout == "Build")
    translate([0,0,FootLength])
    rotate([0*(90-StandAngle),180,0])
    Foot();
  • Curtain Rod Spring Pusher Block

    Curtain Rod Spring Pusher Block

    Spotted during Autumn Window Cleaning:

    Curtain rod pusher block - spring contortion
    Curtain rod pusher block – spring contortion

    That’s the compression spring inside the curtain rod over the kitchen sink, intended to push the ends against the cabinets on either side. The screw slides along the outer rod and when tightened, backstops the spring against the inner rod.

    The end of the spring is apparently intended to twist and jam inside the inner half of the rod, but that seemed so … unesthetic.

    Being in the midst of setting up a Windows 11 box for the laser cutter, I used it as an excuse to fiddle with the RDP configuration to get LightBurn running in full screen mode on the monitor atop my desk; more about all that later.

    The little pusher block is a hull around a pair of circles the same diameter as the smaller dimension of the inner rod, spaced apart enough to match its width, then laser-cut from a scrap of 1/4 inch acrylic:

    Curtain rod pusher block - overview
    Curtain rod pusher block – overview

    Which assembles as you’d expect:

    Curtain rod pusher block - installed
    Curtain rod pusher block – installed

    The spring seems much happier pushing against the block, doesn’t it?

    Admittedly, this was completely unnecessary, but if you think of it as a side effect of the Win 11 thing, it makes at least a little sense.

  • Gizo Spider Footpads

    Gizo Spider Footpads

    Given a 3% failure rate for the tiny footprint of Gizo spider legs, I added 5 mm pads to each foot:

    Gizo Spider - footpads
    Gizo Spider – footpads

    A few rounds of successive approximation and one copypasta hit the right spots:

    // Gizo spider footpads
    // Ed Nisley - KE4ZNU
    // 2024-10-26
    
    pts = [
    [24,-23],[28.5,-7],[29.5,14.5],[20,28],
    [-24,-23],[-28.5,-7],[-29.5,14.5],[-20,28]
    ];
    
    translate([14,0,2.8])
      import("/mnt/bulkdata/Project Files/Prusa Mk4/Models/Gizo Spider/GizoSpider.stl");
    
    linear_extrude(height=0.2)
      for (pt = pts)
        translate(pt)
          circle(d=5,$fn=2*3*4);
    

    Which was enough to stick the legs firmly to the build platform:

    Gizo spider - white leg towers
    Gizo spider – white leg towers

    Talk about blank looks:

    Gizo spider - black on platform
    Gizo spider – black on platform

    White filament is particularly susceptible to charred globbing:

    Gizo spider - white char inclusion
    Gizo spider – white char inclusion

    Which was, fortunately, completely hidden inside the shell.

    Extensive testing showed the pads pushed the error rate below 1.5%:

    Gizo spider pile
    Gizo spider pile

    As before, dots of hot melt glue hold the eyes in place.

    All’s well that ends well: just in time, too.

  • Laser Cutter: Focus Ramp Tests

    Laser Cutter: Focus Ramp Tests

    A few ramp tests with various Focus Distance + Home Offset settings as noted:

    Ramp Test Targets - 14-17 mm
    Ramp Test Targets – 14-17 mm

    The bottom test was at 15 mm, which (contrary to previous estimates) seems to center the narrow band round 0.0 mm. Given the depth of field, a millimeter one way or the other likely doesn’t matter, particularly given the mmm lack of flatness in many materials.

    The controller settings making it happen:

    KT332N Autofocus settings
    KT332N Autofocus settings

    What they mean:

    • Home Offset = distance to retract after the autofocus “pen” = switch activates so the tip of the pen clears the material
    • Focus Distance = distance beyond Home Offset to put the focal point at the surface of the material (or wherever you want)
    • Enable Homing = makes autofocus work at the push of a button
    • Homing Speed = how fast the platform moves while focusing

    Getting the focus right really makes the laser cut like it should!

  • Laser Cutter: Focus Ramp Fixture

    Laser Cutter: Focus Ramp Fixture

    After figuring out the Ruida focus settings, a focus ramp fixture seemed like a good thing to have around:

    Ramp Test Fixture - setup
    Ramp Test Fixture – setup

    The solid model shows a bit more detail:

    Laser Focus Ramp Fixture - solid model
    Laser Focus Ramp Fixture – solid model

    Centering the autofocus “pen” = switch on the peg in the back puts the beam dead-center in the fixture, with the notches as comfort marks. The top of the peg is flush with the center notch, so the machine should be properly focused at that level after a focus operation.

    Obviously, your laser has a different pen location, as will this one the next time I fiddle with anything around the nozzle.

    The general idea is to tape a target to the ramp, with some attention to flattening the paper (tape the edges in critical spots as needed) & putting its zero at the center marks, align the fixture to the laser path along the X axis & secure it with a few magnets, then burn a single line at low power along the length of the scale:

    Ramp Test Fixture - laser line
    Ramp Test Fixture – laser line

    The mark will be thinnest in the region with the best focus, which should be centered around the 0.0 mark in the middle. In that photo, the thinnest section runs from about -2.0 to +1.0, although (at least for me) it does take some squinting to be sure.

    The ramp has a 1:10 = 5.71° slope to spread 1 mm of vertical focus across 10 mm of horizontal distance. If you’re being finicky, you should rescale the targets to correct the 0.5% cosine error, but IMO it’s irrelevant for this purpose.

    A few more tests varying the focus distance by a millimeter:

    Ramp Test Targets - 15 16 mm
    Ramp Test Targets – 15 16 mm

    AFAICT, setting the controller’s Focus Distance to 16 mm is about right. That puts the focal point 18 mm below the nozzle, as shown in the earlier post, and is pretty much what I’ve been using all along.

    The OpenSCAD code as a GitHub Gist, along with a simplified target layout in SVG format:

    // Laser Cutter Focus Ramp Fixture
    // Ed Nisley KE4ZNU
    // 2024-10-10
    FocusPenOffset = [-19,23,0];
    FocusPenOD = 10.0;
    RampHeight = 16.0;
    RampScale = 10;
    RampLength = RampScale * RampHeight;
    Magnet = [5.0,60.0,10.0];
    NumSides = 3*4;
    Protrusion = 0.1;
    RampAngle = atan(RampHeight/RampLength);
    echo(RampAngle=RampAngle);
    Slot = [(RampLength + 2*5.0),10.0,8*RampHeight]; // very tall to cut through everything
    Body = [(Slot.x + 2*10.0),30.0,3*RampHeight]; // extend Z to reach baseplate
    FocusPillarHeight = (RampHeight/2) + Body.z/3; // match Z at center of body
    BasePlate = [(Body.x + 2*Magnet.x + 2*5.0),max(Magnet.y,FocusPenOffset.y + 2*5.0),3.0];
    BaseRound = 5.0;
    //—– Build it
    difference() {
    union() {
    translate(FocusPenOffset)
    cylinder(d=FocusPenOD,h=FocusPillarHeight,$fn=NumSides);
    difference() {
    union() {
    rotate([0,RampAngle,0])
    cube(Body,center=true);
    linear_extrude(height=BasePlate.z)
    hull()
    for (i=[-1,1], j=[-1,1])
    translate([i*(BasePlate.x/2 – BaseRound),j*(BasePlate.y/2 – BaseRound)])
    circle(r=BaseRound,$fn=NumSides);
    }
    cube(Slot,center=true);
    translate([0,0,FocusPillarHeight]) {
    cube([0.5,2*Body.y,1.0],center=true);
    rotate([0,RampAngle,0])
    cube([2*Slot.x,0.5,1.0],center=true);
    }
    }
    }
    translate([0,0,-Body.z])
    cube(2*[BasePlate.x,BasePlate.y,Body.z],center=true);
    }
    Loading
    Sorry, something went wrong. Reload?
    Sorry, we cannot display this file.
    Sorry, this file is invalid so it cannot be displayed.

    Contrary to what you might think, the targets are not laser cut, although you could use the crosshairs for LightBurn’s Print and Cut alignment.