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.

The New Hotness

  • Seasonally Appropriate Teapot Knob

    Long years ago, the Bakelite (or some such) lid on our rarely used teapot disintegrated, whereupon I replaced it with an aluminum sheet and metal knob. Admittedly, a metal knob was not the brightest idea I ever had, but it sufficed for a few uses over the intervening decades.

    Mary hosted this month’s quilting bee and, after having someone else bring a larger teapot for the occasion, suggested I Make. A. Better. Knob. After a bit of searching, this statue seemed appropriate for the season:

    Skull teapot knob
    Skull teapot knob

    It’s printed with PETG filament that should easily withstand the no-more-than-boiling-water temperatures found atop a teapot.

    I imported the original model into PrusaSlicer, shrank it to 50 mm tall and simplified the mesh, exported it as an OBJ file, imported it into OpenSCAD, mashed it together with a 1/4-20 threaded_nut from BOSL2, added the finger protector, and got a suitable model:

    Teapot Knob - solid model bottom view
    Teapot Knob – solid model bottom view

    The as-printed threads were a bit snug with $slop=0, but running the screw in with a dot of silicone grease to ease the way worked fine.

    I should rebuild the whole lid in PETG-CF sometime.

    The OpenSCAD code stitches the parts together:

    // Teapot Knob
    // Ed Nisley - KE4ZNU
    // 2024-10-11
    
    include <BOSL2/std.scad>
    include <BOSL2/threading.scad>
    
    StackHeight = 50.0;
    ThreadLength = 25.0;
    HeatbreakOD = 40.0;
    HeatbreakThick = 3.0;
    
        intersection() {
            union() {
                cylinder(d=HeatbreakOD,h=HeatbreakThick,$fn=2*4*9);
                up(HeatbreakThick)
                    translate([-121,-105])      // totally eyeballometric
                        import("stackofskulls - 50mm.obj",convexity=10);
            }
    
            union() {
                threaded_nut(100,INCH/4,ThreadLength,INCH/20,        // flat size, root dia, height, pitch
                                         bevel=false,ibevel=false,anchor=BOTTOM);
                up(ThreadLength)
                    cylinder(d=100,h=StackHeight);
            }
        }