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

  • Prusa MK4 Input Shaper vs. Resonance Test Box

    Prusa MK4 Input Shaper vs. Resonance Test Box

    Although the laser ramp test fixture looked good, Brent wondered what a real test box would reveal about the Prusa MK4’s Input Shaper resonance control.

    Loading the STL into PrusaSlicer, adding a text label to remind me which way it printed, then slicing with my PETG-CF profile shows the “Actual Speed”, which seems to take acceleration into consideration:

    PrusaSlicer preview - actual speed
    PrusaSlicer preview – actual speed

    The colors in the legend don’t quite match the colors on the model, but the greenish layers with the jolts trundle along in the mid-20 mm/s range and the blue-ish straight-through layers at 30-ish mm/s.

    Eryone PETG-CF has a somewhat fuzzy appearance that seems not characteristic of other brands, so I’ll try something else when these spools run out:

    MK4 Resonance Test Box - overview
    MK4 Resonance Test Box – overview

    The right side of the box (as oriented on the platform) got all the layer retractions and came out festooned with PETG hairs:

    MK4 Resonance Test Box - right side
    MK4 Resonance Test Box – right side

    You can check my labels by tracking the small retraction zit sticking up from the top layer; I got it wrong the first time. Open the images in a new tab to see more pixels.

    The front:

    MK4 Resonance Test Box - front side
    MK4 Resonance Test Box – front side

    The left:

    MK4 Resonance Test Box - left side
    MK4 Resonance Test Box – left side

    And the rear:

    MK4 Resonance Test Box - rear side
    MK4 Resonance Test Box – rear side

    You can barely see the shadow of the “Rear” text on the surface, even though the wall is two threads thick and the text is indented by 0.2 mm, about half the thread width.

    As far as I can tell, the MK4 Input Shaper compensation does a great job of suppressing resonance or wobble in all directions.

    Looks good to me!

  • Prusa MK4 Input Shaper: Accelerometer Tuneup

    Prusa MK4 Input Shaper: Accelerometer Tuneup

    After adding bling to the Prusa MK4, I touched up the belt tensions and re-measured the axis resonances with the Prusa Accelerometer gadget to update the Input Shaper settings.

    The Prusa belt tension guide pretty much explains that subject, with their Belt Tuner making up for my utter tone deafness. FWIW, if the Belt Tuner produces inconsistent results differing by an octave, either up or down from the correct value, the belt is way too loose: give the axis belt tension screw a turn or two to drag the results into the right time zone, then fine-tune from there.

    While it is possible to reach both tensioning screws without too much trouble, they’re definitely not convenient.

    The accelerometer fits on the hot end:

    Prusa MK4 Accelerometer - on hot end
    Prusa MK4 Accelerometer – on hot end

    Then under the steel sheet, where it’s clamped by the platform magnets:

    Prusa MK4 Accelerometer - on platform
    Prusa MK4 Accelerometer – on platform

    The MK4 firmware measures the resonant frequencies while prompting you to put the accelerometer in the proper locations, then computes the best shaper values.

    For reference, the stock OEM values:

    • X = MZV 50 Hz
    • Y = MZV 40 Hz

    Just after I got the accelerometer and without doing anything to prep the MK4, these results popped out:

    • X = MZV 56 Hz
    • Y = MZV 42 Hz

    Now, with bling and properly tensioned belts:

    • X = MZV 59 Hz
    • Y = MZV 45 Hz

    The most recent values were also the most stable, once again pointing out the value of careful assembly and maintenance.

    With that in mind, though, I built the laser ramp focus fixture shortly after doing the first recalibration and it has no visible ripples on any of its walls:

    Ramp Test Fixture - corner detail
    Ramp Test Fixture – corner detail

    That’s a square corner perpendicular to the sloped top surface at the default 45 mm/s. It’s not as difficult a test as some you’ll see, but it suffices for my simple needs. The MK4 definitely behaves better around corners than the Makergear M2.

  • Prusa MK4 Bling

    Prusa MK4 Bling

    While figuring out an X Axis homing problem (about which, more later), I printed a bunch of add-ons for the Prusa MK4, all from printables.com.

    Stipulated: Using something other than black PETG and PETG-CF would make them more like bling.

    The heatsink fan gets a scoop inlet to keep fingers and tools farther from the blades:

    Prusa MK4 - fan cover - fan duct
    Prusa MK4 – fan cover – fan duct

    The small upward duct on the right side directs the exhaust air away from the platform. This is apparently critical for very high-temperature plastics like ABS and PC, but I did have one print fail due to excessively cold breezes on the platform.

    I made three different ducts in case I break one:

    Prusa MK4 - fan ducts on platform
    Prusa MK4 – fan ducts on platform

    The aluminum extrusions now have dust covers:

    Prusa MK4 - Extrusion cover - front
    Prusa MK4 – Extrusion cover – front

    There’s also an angled heater cable connector cover, with a matching cover on the electronics box routing the cable rearward to dress it away from the hulking extruder cable:

    Prusa MK4 - Extrusion cover - rear
    Prusa MK4 – Extrusion cover – rear

    And the Z axis stepper mounts have tidy dust covers:

    Prusa MK4 - Z axis motor cover
    Prusa MK4 – Z axis motor cover

    None of which are necessary, but they’re all easy to print while thinking of other things.

  • 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();
  • Doorbell Button Skulls

    Doorbell Button Skulls

    With only days to spare, I decorated the doorbell button:

    Doorbell button skulls - installed
    Doorbell button skulls – installed

    Yeah, I jammed Sharpies in the eye sockets, but they look exactly the way they should. The middle skull is in the middle of the actuator in the hope that’s where it’ll get pushed.

    The solid model comes directly from the seasonally appropriate teapot lid handle with a rectangle to suit the doorbell button actuator:

    Doorbell Button Skulls - solid model
    Doorbell Button Skulls – solid model

    Perforce, the OpenSCAD code has eyeballometric magic numbers:

    // Doorbell Button Enhancement
    // Ed Nisley - KE4ZNU
    // 2024-10-28
    
    Button = [5.0,13.0,40.0];    // button width, boss depth, button height
    
    union() {
        rotate([0,0,65])
        translate([-121,-105])      // totally eyeballometric
            import("stackofskulls - 50mm.obj",convexity=10);
    
            translate([0,Button.y/2,Button.z/2])
                cube(Button,center=true);
    }
    

    The rectangular slab goes all the way down to the platform because I couldn’t be bothered with support or a little wedge.

    I’m sure it will survive exactly as long as it must.

    Dunno how many little ones will venture up the driveway, though:

    Halloween mailbox decorations
    Halloween mailbox decorations
  • 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.

  • Cart Coin Handle vs. Reality

    Cart Coin Handle vs. Reality

    This failed pretty much the way I expected:

    Cart Coin - broken handle
    Cart Coin – broken handle

    The “carbon fiber” part of PETG-CF consists of very very short fibers, unlike the longer fibers in real carbon fiber materials, so the strength is nowhere near what you might expect from the marketing. I knew this going in and the break wasn’t surprising.

    Round cart coins continue to work exactly like US quarters.