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

Prusa Mk 4 3D printer with MMU3 feeder

  • Stack Light Base

    Stack Light Base

    Having external indications for the laser cutter’s internal status signals seemed like a good idea and, rather than build the whole thing, I got a five-layer stack light:

    Stack Light - disassembly
    Stack Light – disassembly

    It arrives sans instructions, apart from the data plate / wiring diagram label on the housing, so the first puzzle involves taking it apart to see what’s inside. My motivation came from a tiny chip of blue plastic on the kitchen table where I’d opened the unpadded bag. Apparently, a mighty force had whacked the equally unpadded box with enough force to crack the blue lens, but I have no idea how the sliver escaped the still-assembled stack.

    Anyhow, hold the blue/green lenses in one hand and twist the red/yellow lenses counterclockwise as seen looking at the cap over the red layer. Apply more force than you think appropriate and the latches will reluctantly give way. Do the same to adjacent layers all the way down, then glue the blue chip in place while contemplating other matters.

    A switch on each layer selects either steady (the default and what I wanted) or blinking (too exciting for my needs). Reassemble in reverse order.

    A Stack Light generally mounts on a production-line machine which might have a suitable cutout for exactly that purpose. I have no such machine and entirely too much clutter for a lamp, so I screwed it to a floor joist over the laser:

    Stack Light - installed
    Stack Light – installed

    The tidy blue PETG-CF base started as a scan of the lamp’s base to serve as a dimension reference:

    Stack Light - base scan
    Stack Light – base scan

    Import into LightBurn:

    • Draw a 70 mm square centered on the workspace
    • Round the corners until they match the 13 mm radius
    • Draw one 5.6 mm circle at the origin
    • Move the circle 52/2 mm left-and-down
    • Turn it into a 4 element array on 52 mm centers
    • Verify everything matches the image
    • Export as SVG

    Import into Inkscape:

    • Put the perimeter on one layer
    • Put the four holes on another
    • Center around an alignment mark at a known coordinate
    • Save as an Inkscape SVG

    Import into OpenSCAD, extrude into a solid model, and punch the holes:

    Stack Light Mount base - solid model
    Stack Light Mount base – solid model

    The lip around the inner edge aligns the lamp base.

    If I ever make another one, I’ll add pillars in the corners to put the threaded brass inserts close to the top for 10 mm screws instead of the awkward 30 mm screws in this one. More than a single screw hole in the bottom would align it on whatever you’re indicating.

    Now, to wire the thing up …

    The OpenSCAD source code as a GitHub Gist:

    Loading
    Sorry, something went wrong. Reload?
    Sorry, we cannot display this file.
    Sorry, this file is invalid so it cannot be displayed.
    // Stack Light mount
    // Ed Nisley – KE4ZNU
    // 2025-01-03
    include <BOSL2/std.scad>
    /* [Hidden] */
    ID = 0;
    OD = 1;
    LENGTH = 2;
    BaseCenter = [100,100,0];
    Base = [70,70]; // nominal, for figuring holes
    Insert = [4.9,5.9,6.0];
    PlateThick = Insert[LENGTH];
    HolderTall = 24.0;
    WallThick = 2.7; // outer wall of light base
    LipThick = 1.5; // alignment lip inside light base
    LipTall = 0.75;
    CableOD = 5.0;
    Protrusion = 0.1;
    difference() {
    translate(-BaseCenter)
    linear_extrude(height=HolderTall + LipTall)
    import("Stack Light – base layout.svg",layer="Base Perimeter");
    up(Insert[LENGTH])
    translate(-BaseCenter)
    linear_extrude(height=HolderTall – LipTall)
    offset(delta=-(WallThick + LipThick))
    import("Stack Light – base layout.svg",layer="Base Perimeter");
    up(HolderTall)
    linear_extrude(height=HolderTall,convexity=5)
    translate(-BaseCenter)
    difference() {
    offset(delta=WallThick) // avoid glitches on perimeter edge
    import("Stack Light – base layout.svg",layer="Base Perimeter");
    offset(delta=-WallThick)
    import("Stack Light – base layout.svg",layer="Base Perimeter");
    }
    down(Protrusion)
    translate(-BaseCenter)
    linear_extrude(height=2*HolderTall,convexity=5)
    import("Stack Light – base layout.svg",layer="Base Holes");
    up(HolderTall/2)
    yrot(90) zrot(180/6)
    cylinder(d=CableOD,h=Base.x,$fn=6);
    }

  • Quick-n-Easy Window Shade End Cap

    Quick-n-Easy Window Shade End Cap

    While tracking down an air leak in a living room window, I noticed one of the cellular blinds was missing an end cap, so I scanned a pair of surviving caps:

    Living Room shade end caps - level adjust
    Living Room shade end caps – level adjust

    Blow out the contrast, save as a JPG.

    Import into LightBurn:

    • Trace the outlines into paths
    • Use LightBurn’s shape optimization tool to dramatically reduce the number of nodes & smooth the outlines
    • Overlay & align the shapes
    • Export as an SVG file

    Import into Inkscape:

    • Put the paths on named layers
    • Center around an alignment mark
    • Save as an Inkscape SVG
    Living Room shade end caps - Inkscape alignment
    Living Room shade end caps – Inkscape alignment

    It is slightly tilted, but that doesn’t matter. You could devote more time to smoothing / reverse-engineering the shapes, but that doesn’t make much difference, either.

    Inkscape exports the SVG coordinates with respect to the overall page origin in the lower left corner, so when OpenSCAD imports the SVG the paths end up far away from the origin. The trick is to put a 2 mm diameter circle at a known location, center the paths around it, then have OpenSCAD use the circle’s location to recenter the paths.

    Because Inkscape uses the lower left corner of each shape as its origin, you must put the circle at (99,99) to have its center at (100,100). That is one of the many reasons you (well, I) can’t use Inkscape as a CAD program.

    Import into OpenSCAD, recenter, and extrude the shapes:

    CapCenter = [100,100];
    
    PlateThick = 1.8;       // thickness of visible end cap
    
    HolderTall = 10.0 + PlateThick;
    
    union() {
      linear_extrude(height=PlateThick)
          translate(-CapCenter)
                import("Living Room shade end caps - Inkscape.svg",layer="Exterior");
      linear_extrude(height=HolderTall)
          translate(-CapCenter)
                import("Living Room shade end caps - Inkscape.svg",layer="Retainer");
    }
    

    Which produces a solid model:

    Living Room shade end caps - solid model
    Living Room shade end caps – solid model

    Save the model as 3mf, import into PrusaSlicer, and slice:

    Living Room shade end caps - PrusaSlicer preview
    Living Room shade end caps – PrusaSlicer preview

    Making the retainer shape a little wider would be a good idea to get better infill, but it’s a slip fit into the blind (surely why it fell out long ago) and need not withstand any stress.

    Print as usual:

    Living Room shade end cap - on platform
    Living Room shade end cap – on platform

    And then It Just Works™:

    Living Room shade end cap - installed
    Living Room shade end cap – installed

    It’s sitting atop a bookcase while I finish tinkering with its window.

    All that seems like a lot of fiddling around, but it uses each program to its best advantage and it’s surprisingly easy after the first few models.

  • Laser-Engraved PETG / PETG-CF

    Laser-Engraved PETG / PETG-CF

    Prompted by scruss’s report of successfully “engraving” PLA, I had to try this:

    Laser engraved PETG-CF
    Laser engraved PETG-CF

    It’s blue PETG-CF from the scrap box, done at 500 mm/s and 20% of a 60 W laser and came out looking really nice.

    I did a pass at 10%, low enough that the laser barely fired, and the mark was, correspondingly, barely visible: no color change and only a slight depth. Obviously, you’d want to tune for best picture depending on whatever you were trying to achieve.

    The results on black PETG, also from the scrap box, were somewhat less attractive:

    Laser engraved PETG - bottom surface
    Laser engraved PETG – bottom surface

    That’s at 500 mm/s with power at 10% and 20, so the outcome definitely depends on the material. That surface was against the platform when it was printed on the Makergear M2, explaining the glossy smooth threads.

    The other side was rougher and needed more power to punch a visible result into the plastic:

    Laser engraved PETG - top surface
    Laser engraved PETG – top surface

    All in all, the PETG-CF result looks usable, particularly for small-ish annotations on a flat surface where full-on multimaterial printing would take forever without adding much value.

  • PrusaSlicer Scarf Joints

    PrusaSlicer Scarf Joints

    The release notes for PrusaSlicer 2.9 mention the addition of scarf joints on outer perimeters. Smooth joints seem like a Good Idea™, so I turned it on for comparison with a recent object:

    Double Gear fidget toy - scarf vs normal
    Double Gear fidget toy – scarf vs normal

    Those are flipped from the as-printed orientation: the orange ring builds upward, starting with two concentric threads on the platform.

    The normal aligned joint is on the right above, with a closer look here:

    Double Gear fidget toy - normal joInt
    Double Gear fidget toy – normal joInt

    The scarf joint has a offset between layers:

    Double Gear fidget toy - scarf joint
    Double Gear fidget toy – scarf joint

    The PrusaSlicer visualization shows the effect, looking up from below the platform:

    Double Gear fidget toy - scarf joint visualization
    Double Gear fidget toy – scarf joint visualization

    The blue PETG-CF parts have no visible seams anywhere with either setting, probably because the stuff swells slightly and obliterates any subtle differences.

    Scarf joints don’t make much difference for a fidget toy, but should improve the outcome for more critical circular / spherical models.

  • Plastic Plant Signs

    Plastic Plant Signs

    PrusaSlicer can recognize “things that look like logos” and process them with two different materials, so I tried it out with some plant signs:

    Plant Signs - 50pct scale
    Plant Signs – 50pct scale

    They came out surprisingly well, particularly for characters with two adjacent filament threads:

    Plant Signs - 50pct scale - 2-stroke
    Plant Signs – 50pct scale – 2-stroke

    Smaller characters with single threads show more stringing, a characteristic of PETG, but it brushes off easily enough:

    Plant Signs - 50pct scale - 1-stroke
    Plant Signs – 50pct scale – 1-stroke

    While the existing text isn’t nearly as informative as real plant tags, they’re surely more durable and a chunkier font would improve both printability and readability.

    I suggested Mary hand them out to any of her gardening cronies in need of a chuckle …

  • PrusaSlicer Flatpak: Adding an NFS Filesystem

    PrusaSlicer Flatpak: Adding an NFS Filesystem

    PrusaSlicer V 2.9.0 for Linux arrives as a Flatpak, instead of the previous AppImage, which wouldn’t matter except that the Flatpak sandbox prohibits access to anything outside each user’s home directory. I long ago set up access to the fileserver in the basement through filesystems mounted on /mnt, which is now inaccessible.

    Obviously, I’m not the first person to hit this issue, as some diligent searching turned up a hint leading to a description of Flatpak permissions, which eventually produced:

    sudo flatpak override com.prusa3d.PrusaSlicer --filesystem="/mnt/bulkdata"
    

    Overall, 2.9.0 seems significantly more sluggish and uglier than the 2.8.x series, but at least Prusa still supports Linux.

    Just to show PrusaSlicer can fetch files from the server and to have some pictures enhancing this post’s negligible SEO, I built a couple of Gear Fidget Toys:

    Double Gear fidget toy - on platform
    Double Gear fidget toy – on platform

    Which pop off the platform ready to roll:

    Double Gear fidget toy - finished
    Double Gear fidget toy – finished

    A trace of silicone grease eased between the pieces on a slip of paper makes the spinning action so smooth.

    As usual, the multi-material version takes twice as long to build due to all the filament swapping. I think I must improve the MMU3’s spoolholders, because the MMU3 (very) occasionally fails to ram the filament into the extruder, seemingly due to the force required to pull filament from the recalcitrant spools.

  • HQ Sixteen: Chin Light

    HQ Sixteen: Chin Light

    Setting the Handi-Quilter HQ Sixteen handlebars at a useful angle aimed the main PCB’s white LEDs at the front of the arm, rather than down at the needle:

    HQ Sixteen Chin Light - off
    HQ Sixteen Chin Light – off

    Having caused the problem, I must fix it:

    HQ Sixteen Chin Light - results
    HQ Sixteen Chin Light – results

    The light comes from a small chip-on-board LED affixed under the chin of the machine arm with heatsink tape:

    HQ Sixteen Chin Light - detail
    HQ Sixteen Chin Light – detail

    Yes, the pool of warm white COB LED light clashes horribly with the cool white 5 mm LEDs lighting the background (not to mention wintry daylight from the windows), but it’s sufficiently OK.

    I intended to run the wiring inside the machine arm, but all the pre-existing holes I wanted to use were oiling access points or blocked by whirling shafts inside, so the wire runs along the outside:

    HQ Sixteen Chin Light - wiring
    HQ Sixteen Chin Light – wiring

    The Handi-Quilter control & lighting goes through the bare gray ribbon cable to the handlebars, so I’m not too far down the stylin’ scale. The next version of the machine has round external cables, but this machine is what it is.

    I mounted the 12 VDC supply to the back panel of the machine’s power box with five 3 mm holes:

    HQ Sixteen Chin Light - power supply
    HQ Sixteen Chin Light – power supply

    A bag of right-angle barrel connectors will arrive shortly.

    The exposed wiring at the top (the white wires carry switched 120 VAC from the PCB inside the box) seemed … unaesthetic, so I conjured a cover from the vasty digital deep:

    Power Supply Cover - solid model
    Power Supply Cover – solid model

    Which fit neatly into place on the first try:

    HQ Sixteen Chin Light - supply cover fit test
    HQ Sixteen Chin Light – supply cover fit test

    That’s a trial fit, because I am not pulling the machine apart again until there’s more work to do inside.

    The blurry rocker switch below the Chin Light supply controls the machine power: turn it on and everything lights up as it should.

    The OpenSCAD source code as a GitHub Gist: