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

  • HQ Sixteen: Wheel Base Leveling

    HQ Sixteen: Wheel Base Leveling

    Trying out the Track Lock Blocks brought a long-standing puzzle to the surface: the left front wheel rode about a millimeter above its track, with the other three wheels carrying the weight of the machine. Neither that wheel nor the diagonally opposite wheel on the right rear worked well with the Blocks, because the machine rocked on the other two wheels.

    I initially thought the carriage rail under the machine was warped, but some poking and prodding showed the left front wheel rode higher than the others from front to back across the entire length of the table.

    So I loosened the screws holding the front wheel base plate to the machine and jacked up the front of the machine to get the wheels off their tracks:

    HQ Sixteen - track lock - jacking machine
    HQ Sixteen – track lock – jacking machine

    Then I jammed two strips of chipboard into the left side of the gap:

    HQ Sixteen - front wheel base plate shim
    HQ Sixteen – front wheel base plate shim

    I planned to use one long strip across the entire wheel base plate, but the screw holding the machine casting to the plate blocks the way, so it now has two shorter strips. Tightening the screws clamped the chipboard in place.

    The chipboard tilted the base plate and lowered the left wheel, with the right wheel surely moving slightly upward. Lowering the machine showed both front wheels now carry roughly the same load and the Track Lock Blocks now work the way I expected.

    After doing that, I found the recommended procedure in the official HQ Sixteen Service and Troubleshooting manual:

    HQ Sixteen - Wheel base shim procedure
    HQ Sixteen – Wheel base shim procedure

    The only “planed surface” around here is on the surface plate in the Basement Shop, two flights of stairs away, and I am not carrying either object to meet the other.

    In any event, I think the chipboard serves the same purpose as a simple washer, with advantage of a much larger bearing surface, so I’ll call it Good Enough until something else causes me to take the wheel base plate off.

  • HQ Sixteen: Track Lock Blocks

    HQ Sixteen: Track Lock Blocks

    Mary’s practice quilts on the HQ Sixteen suggest locking the machine’s wheels will simplify sewing a line parallel to the long edge of a quilt parallel to the table, but contemporary “Channel Locks” fit newer machines with larger wheels than on this one.

    Duplicating those rings in a smaller size seemed both difficult and not obviously functional, so I built a pair of blocks to capture the wheel on its track:

    HQ Sixteen - track lock - engaged
    HQ Sixteen – track lock – engaged

    The wheel sits in a recess holding it just barely above the track surface, so the (considerable) weight of the machine holds the block in place.

    Because lines on quilts have precise placement and Mary has quilting rulers within reach, the block measures exactly two inches from the point where it first touches the wheel to the center of the recess:

    HQ Sixteen - track lock - setup
    HQ Sixteen – track lock – setup

    She can then lay a ruler on the quilt, roll the machine front or back two inches, slide a block against each wheel, then roll the machine up a slight incline until the wheel drops into the recess:

    HQ Sixteen - track lock block - solid model
    HQ Sixteen – track lock block – solid model

    The spacing looks like this:

    HQ Sixteen - track lock block - solid model - show view
    HQ Sixteen – track lock block – solid model – show view

    The usual 3D printing process puts 0.2 mm steps along the ramp, but they’re almost imperceptible while rolling the machine:

    HQ Sixteen - track lock block - PrusaSlicer preview
    HQ Sixteen – track lock block – PrusaSlicer preview

    The ramp slope is all of 1:20 = 2.5°, so pulling / pushing the machine requires very little oomph.

    I put thin cloth tape (approximately friction tape, but with real adhesive) on the bottom of the block by the simple expedient of sticking it to the block and scissoring off the excess. A little compliance between the block and the track prevents the hard plastic shapes from sliding more easily than I’d like. If your tape is thicker than mine, knock a little off the WheelZ value.

    The OpenSCAD code can produce shapes to laser-cut an adhesive sheet, although stacking a foam sheet will definitely require height adjustment :

    HQ Sixteen - track lock block - glue sheet
    HQ Sixteen – track lock block – glue sheet

    The OpenSCAD source code as a GitHub Gist:

    // HQ Sixteen – wheel track lock block
    // Ed Nisley – KE4ZNU
    // 2025-02-14
    include <BOSL2/std.scad>
    Layout = "Show"; // [Show,Build,Glue,Track,Block,Wheel]
    /* [Hidden] */
    ID = 0;
    OD = 1;
    LENGTH = 2;
    Protrusion = 0.1;
    Windage = 0.1;
    WallThick = 5.0; // minimum wall thickness
    RailOD = 5.5; // rounded top of rail
    RailHeight = RailOD; // … flange to top
    RailBase = [100,2*15.7 + RailOD,3]; // … Y = flange width, arbitrary X & Z
    WheelOD = 38.0; // rail roller
    WheelMinor = 6.2; // … rail recess
    WheelWidth = 8.3 + 2*Windage; // … outer sides
    WheelZ = RailHeight + (WheelOD – WheelMinor)/2; // axle centerline wrt rail flange
    LockOC = 2.0*INCH; // engagement to lock recess
    GripLength = 20.0;
    BlockOA = [GripLength + WheelOD/2 + LockOC,WheelWidth + 2*WallThick,2*RailHeight];
    BlockRadius = 2.0;
    $fn = 12*3*4; // smooth outer perimeters
    //———-
    // Construct the pieces
    module Track(Len = 2*BlockOA.x) {
    zrot(90) back(Len/2) down(RailBase.z) xrot(90)
    linear_extrude(height=Len,convexity=5)
    rect([RailBase.y,RailBase.z],anchor=FRONT)
    attach(BACK,FRONT) rect([RailOD,RailHeight – RailOD/2])
    attach(BACK) circle(d=RailOD);
    }
    module Wheel(Len = WheelWidth) {
    xrot(90)
    difference() {
    cylinder(d=WheelOD,h=Len,center=true);
    torus(r_maj=WheelOD/2,d_min=WheelMinor);
    }
    }
    module Block() {
    difference() {
    left(GripLength + WheelOD/2)
    cuboid(BlockOA,anchor=LEFT + BOTTOM,rounding=BlockRadius,except=BOTTOM);
    Track();
    up(WheelZ) xrot(90)
    cylinder(d=WheelOD,h=WheelWidth,center=true);
    right(LockOC)
    up(WheelZ – WheelOD/2) yrot(atan((RailHeight – WheelMinor/2)/LockOC))
    cuboid([LockOC,WheelWidth,BlockOA.z],anchor=RIGHT+BOTTOM);
    }
    }
    //———-
    // Show & build the results
    if (Layout == "Block" || Layout == "Build")
    Block();
    if (Layout == "Track")
    Track();
    if (Layout == "Wheel")
    Wheel();
    if (Layout == "Glue")
    projection(cut=true)
    Block();
    if (Layout == "Show") {
    color("SteelBlue")
    Block();
    for (i=[0,1])
    right(i*LockOC)
    color("Silver",0.7)
    up(WheelZ) Wheel();
    color("White",0.5)
    Track();
    }

  • Drive Wheelchair Foot Rest Lubrication

    Drive Wheelchair Foot Rest Lubrication

    After few days in the Drive Blue Streak wheelchair, I finally lubricated the foot rest pivots:

    Drive wheelchair foot rest lubrication
    Drive wheelchair foot rest lubrication

    The complex molded rests gripped their metal tubes so tightly as be nearly immovable, but one drop of Kroil at the four obvious spots let them turn much more easily.

    The flange overlapping the upright tube along the bottom of the picture hits the short protrusion and holds the rest parallel to the floor. A screw at the plastic cap near the top keeps the rests from working their way too far from the upright tube.

    I can make it to the Basement Shop™ and back, paying careful attention to detail.

  • HQ Sixteen: Handi Feet Conversion

    HQ Sixteen: Handi Feet Conversion

    Mary wanted a Ruler Foot (a.k.a. Handi Feet Sure Foot) on her Handi Quilter HQ Sixteen sewing machine, which required removing the original foot, installing the Handi Feet Conversion Kit, then adjusting the foot height above the needle plate:

    HQ Sixteen Handi-feet conversion - Sure-foot installed
    HQ Sixteen Handi-feet conversion – Sure-foot installed

    The Conversion Kit instructions repeatedly recommend hauling the machine to your local Handi Quilter authorized dealer / repair center, which would be an hour’s drive away. Suffice it to say I’m both authorized by a suitable authority and a dab hand with a hex wrench: I can do this thing.

    The original foot is a welded assembly with an M5×0.8 screw thread matching the leftmost (darker) rod on the machine:

    HQ Sixteen Handi-feet conversion - original foot
    HQ Sixteen Handi-feet conversion – original foot

    It’s sitting atop the label of the Sure Foot kit with a picture of the ruler foot.

    Although the instructions suggest you can install the conversion kit without removing the machine cover, I wanted to see what was going on in there and verify everything fit properly:

    HQ Sixteen Handi-feet conversion - foot rod clamp
    HQ Sixteen Handi-feet conversion – foot rod clamp

    As above, the foot / adapter screws into the left rod, with the rectangular aluminum clamp attached to the follower riding the cam near the top of the machine. The rod slides on the greasy pin absorbing the torque from the follower.

    I had to loosen the clamp, slide the rod upward, unscrew the original foot, install the adapter, adjust the rod position for the proper 0.5 mm spacing between ruler foot and the needle plate at bottom dead center, then tighten the screw. The disturbed grease above the block reveals I moved the rod upward about 8 mm through that block during the process; it now sits lower, just a few millimeters above where the factory tech assembled it for the original foot.

    The top photo shows half a dozen threads between the top of the adapter and the bottom of the jam nut. Without adjusting the rod position in the clamp, the adapter screw threads are the only way to adjust the foot-to-plate space: each full turn moves the foot 0.8 mm. I screwed the adapter completely into the rod, then backed it out three turns to leave enough adjustment for other feet and fabrics.

    The machine cover has a hole providing access to the clamp screw, so, in principle, you can stick a hex wrench in there to loosen / tighten the clamp while making fine adjustments in the foot position, all without removing the cover. If one full turn of the adapter doesn’t set the right position, I highly recommend removing the machine cover to see what you’re doing.

    We then installed the Ruler Base on the machine, which required removing the preinstalled Medium fuzzy spacer strips, and all’s well that ends well.

  • Laser-Engraved CD Stress Cracking

    Laser-Engraved CD Stress Cracking

    Given the cracking caused by vector patterns on CDs and DVDs, seeing stress cracks open up on large-area engravings came as no surprise:

    Laser engraved CD cracking - D
    Laser engraved CD cracking – D

    They start smaller in the more closely engraved areas:

    Laser engraved CD cracking - A
    Laser engraved CD cracking – A

    But eventually spread over the entire surface:

    Laser engraved CD cracking - C
    Laser engraved CD cracking – C

    They’re not always straight:

    Laser engraved CD cracking - B
    Laser engraved CD cracking – B

    And aren’t aligned with the engraving path:

    Laser engraved CD cracking - B detail
    Laser engraved CD cracking – B detail

    My threat model says those discs are definitely unreadable …

  • HQ Sixteen: Thread Cone Locating Disk

    HQ Sixteen: Thread Cone Locating Disk

    After installing (if that’s not too fancy a term) the horizontal thread spool adapter on the HQ Sixteen, I laser-cut an acrylic disk to keep thread cones centered on the other vertical spool pin:

    HQ Sixteen - thread cone base locator - installed
    HQ Sixteen – thread cone base locator – installed

    It’s trivial: an 11 mm circle to clear the washer and a 55 mm circle to locate the cone.

    However, I cut that disk with a 56 mm OD, because that’s what I measured on half a dozen cones. Come to find out at least some cone bases are juuust slightly oval and they latched onto that disk like they were gonna be best buddies forever.

    Rather than cut another acrylic disk, I laser-cut a friction ring from a scrap of stamp-pad rubber and jammed the disk against the chuck with a live center:

    HQ Sixteen - thread cone base locator - turning
    HQ Sixteen – thread cone base locator – turning

    A few minutes of sissy cuts made the disk nicely round and concentric with the inner hole, with a little file work knocking the edges off the rim.

    Done!

  • HQ Sixteen: Horizontal Thread Spool Adapter

    HQ Sixteen: Horizontal Thread Spool Adapter

    After watching the thread pull off the spool around the vertical spool adapter in an increasingly tight helix, I built a horizontal adapter:

    HQ Sixteen - horizontal thread spool adapter - installed
    HQ Sixteen – horizontal thread spool adapter – installed

    The thread now pulls off perpendicular to the axis, the way we thought it should, and the helix is gone.

    The adapter base plate fits snugly over the vertical pin, with the lip over the edge stabilizing the whole thing. The spool fits on a ¼ inch acrylic rod tightly press-fit into the side wall and, although it’s not shown here, the vertical adapter press-fits onto the end of the rod to keep the spool from wandering off.

    The solid model shows the arrangement:

    HQ Sixteen - horizontal thread spool adapter - solid model
    HQ Sixteen – horizontal thread spool adapter – solid model

    It builds standing on the wall to prevent any significant overhang:

    HQ Sixteen - horizontal thread spool adapter - PrusaSlicer
    HQ Sixteen – horizontal thread spool adapter – PrusaSlicer

    So we’ve reconfirmed our original knowledge that ordinary thread spools must feed off the side, not over the top. Living in the future with rapid prototyping and simple production is good!

    You can buy a Horizontal Spool Pin Clamp, but what’s the fun in that?

    Fun fact: although the vertical pins on the machine are ¼ inch in diameter, the thread on the end is neither the obvious ¼-20 nor the second-guess 10-32. Instead, it’s M5×0.8, perilously close to the 10-32 thread used in the handlebar setscrews. Don’t apply brute force when this thing doesn’t screw neatly into that hole.

    The OpenSCAD source code as a GitHub Gist:

    // HQ Sixteen – horizontal thread spool adapter
    // Ed Nisley – KE4ZNU
    // 2025-01-26
    include <BOSL2/std.scad>
    Layout = "Show"; // [Show,Build,Base,Wall]
    /* [Hidden] */
    ID = 0;
    OD = 1;
    LENGTH = 2;
    WallThick = 10.0;
    BaseThick = 5.0;
    PinOD = 0.25*INCH; // vertical spool pin
    PinWasher = [PinOD,11.0,2.0]; // pin base washer
    PinOffset = 49.0; // pin center to edge of platform
    Spool = [0.25*INCH,50.0,55.0]; // maximum thread spool
    echo(Spool=Spool);
    SpoolClearance = [5.0,2.0,5.0];
    SpoolOC = [-PinOffset + PinOD/2 + SpoolClearance.x + Spool[OD]/2,
    Spool[LENGTH]/2,
    BaseThick + SpoolClearance.z + Spool[OD]/2];
    BasePlate = [PinWasher[OD] + PinOffset + BaseThick,
    Spool[LENGTH] + SpoolClearance.y + WallThick,
    BaseThick];
    Protrusion = 0.1;
    $fn = 12*3*4; // smooth outer perimeters
    //———-
    // Construct the pieces
    module Base() {
    difference() {
    union() {
    left(BasePlate.x/2 – BaseThick) back((SpoolClearance.y + WallThick)/2)
    cuboid(BasePlate,rounding=BaseThick,edges=[FWD+LEFT,FWD+RIGHT],anchor=BOTTOM);
    back((SpoolClearance.y + WallThick)/2)
    cuboid([BaseThick,BasePlate.y,BaseThick],
    rounding=BaseThick,edges=[FWD+BOTTOM,FWD+RIGHT,BACK+BOTTOM],anchor=LEFT+TOP);
    }
    left(PinOffset) down(Protrusion) {
    cylinder(PinWasher[LENGTH],d=PinWasher[OD]); // washer clearance
    cylinder(2*BaseThick,d=PinOD);
    }
    }
    }
    module Wall() {
    difference() {
    union() {
    hull() {
    right(BaseThick)
    cube([BasePlate.x,BaseThick,WallThick],anchor=FWD+RIGHT+BOTTOM);
    back(SpoolOC.z) right(SpoolOC.x)
    cylinder(d=Spool[OD]/2,h=WallThick);
    }
    back(SpoolOC.z) right(SpoolOC.x)
    cylinder(d=Spool[OD]/2,h=WallThick + SpoolClearance.y);
    }
    back(SpoolOC.z) right(SpoolOC.x) down(Protrusion) zrot(180/8)
    cylinder(d=Spool[ID],h=2*WallThick,$fn=8);
    }
    }
    module Adapter() {
    union() {
    Base();
    back(SpoolOC.y + SpoolClearance.y + WallThick)
    xrot(90)
    Wall();
    }
    }
    //———-
    // Show & build the results
    if (Layout == "Base")
    Base();
    if (Layout == "Wall")
    Wall();
    if (Layout == "Show") {
    Adapter();
    left(PinOffset)
    color("Gray") {
    cylinder(d=PinOD,h=2*SpoolOC.z);
    cylinder(d=PinWasher[OD],h=PinWasher[LENGTH]);
    }
    up(SpoolOC.z) right(SpoolOC.x) back(SpoolOC.y)
    xrot(90)
    color("Green")
    cylinder(d=Spool[ID],h=Spool[LENGTH]);
    }
    if (Layout == "Build")
    up(SpoolOC.y + SpoolClearance.y + WallThick)
    xrot(-90)
    Adapter();