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: Mini-lathe

Tweaking an LMS 5200 Mini-Lathe

  • Mini-Lathe Ball Drilling Fixture

    Mini-Lathe Ball Drilling Fixture

    Despite successfully drilling holes in a few plastic balls, I wanted a somewhat less terrifying setup than this:

    Micromark Ball Vise - lathe ball hack
    Micromark Ball Vise – lathe ball hack

    The stiffness of the bike helmet mirror mount suggested a similar clamp would have enough griptivity to immobilize the ball while cutting it in the lathe:

    Helmet Mirror Mount - 10 mm ball
    Helmet Mirror Mount – 10 mm ball

    Building the clamp around the lathe’s three-jaw lathe chuck eliminates the need for screws / washers / inserts:

    Lathe Ball Fixture - 19 mm - Show
    Lathe Ball Fixture – 19 mm – Show

    The Ah-ha! moment came when I realized the fixture can expose half of the ball’s diameter for drilling while clamping 87% of its diameter, because 0.5 = sin 30° and 0.87 = cos 30°:

    Lathe Ball Fixture - 19 mm - Show - front orthogonal
    Lathe Ball Fixture – 19 mm – Show – front orthogonal

    That’s an orthogonal view showing 13% of the ball radius sticking out of the fixture; it’s 6% of the diameter.

    Which looks like this in real life:

    Lathe Ball Fixture - 19 mm - sections with ball
    Lathe Ball Fixture – 19 mm – sections with ball

    The socket is offset toward the tailstock end of the clamp (on the right in the picture) to expose half its diameter flush with the surface perpendicular to the lathe axis. The other side necks down into a cylinder of the same diameter to clear the drill bit.

    This works nicely until the ball diameter equals the chuck jaw’s 20 mm length, whereupon larger balls protrude into the chuck body’s spindle opening. Although I haven’t yet built one, the 25 mm balls in my Box o’ Bearings should fit, with exceedingly sissy cuts required for large holes.

    The fixture doesn’t require support material, because the axial holes eliminate the worst of the overhang. Putting the tailstock side flat on the platform gives it the best-looking surface:

    Lathe Ball Fixture - 19 mm - Slic3r - equator
    Lathe Ball Fixture – 19 mm – Slic3r – equator

    The kerf between the segments ensures the jaws can apply pressure to the ball, whereupon the usual crappy serrated 3D printed surface firmly grabs it.

    The fixture is a slip fit on the chuck jaws:

    Lathe Ball Fixture - 19 mm - installed
    Lathe Ball Fixture – 19 mm – installed

    Tightening the jaws shoves them all the way into the fixture’s slots and clamps the ball:

    Lathe Ball Fixture - 19 mm - center drill
    Lathe Ball Fixture – 19 mm – center drill

    Overtightening the chuck will (probably) compress the ball around the drill, which will (best case) give you slightly oversize holes or (worst case) cause the ball to seize / melt around the drill bit, so sleaze up to the correct hole diameter maybe half a millimeter at a time:

    Lathe Ball Fixture - 19 mm - 6 mm drill
    Lathe Ball Fixture – 19 mm – 6 mm drill

    That fixture exposes 9.5 mm = 19/2 of the ball. The drill makes a 6 mm hole to fit the telescoping shaft seen above.

    Obviously, you must build a custom fixture for every ball diameter in your inventory, which is no big deal when you have a hands-off manufacturing process. Embossing the diameter into the fixture helps match them, although the scribbled Sharpie isn’t particularly elegant.

    The OpenSCAD source code as a GitHub Gist:

    // Lathe Ball Drilling Fixture
    // Ed Nisley KE4ZNU 2020-11
    /* [Layout options] */
    Layout = "Build"; // [Build, Show, Body, Jaws]
    BallDia = 10.0; // [5.0:0.5:25.0]
    /* [Extrusion parameters] */
    /* [Hidden] */
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    function IntegerLessMultiple(Size,Unit) = Unit * floor(Size / Unit);
    Protrusion = 0.1; // make holes end cleanly
    inch = 25.4;
    ID = 0;
    OD = 1;
    LENGTH = 2;
    //* [Basic dimensions] */
    Chuck = [21.0,100.0,20.0]; // chuck bore, OD, jaw length
    Jaw = [Chuck[LENGTH],15.0,12.0]; // jaw free length, base width, first step radius
    JawInclAngle = 112; // < 120 degrees for clearance!
    JawAngle = JawInclAngle/2; // angle from radius
    WallThick = 5.0; // min wall thickness
    Kerf = 0.75; // space between clamp blocks
    ClampSides = 8*(2*3);
    ClampBore = BallDia/2; // clear bore through clamp
    ClampAngle = asin(ClampBore/BallDia); // angle from lathe axis to clamp front
    Plate = [ClampBore,
    BallDia + 2*WallThick + 2*Jaw.z,
    Jaw.x];
    LegendDepth = 1*ThreadWidth;
    ShaftOD = 3.6; // sample shaft
    ShowGap = 1.5;
    //———————-
    // Chuck jaws
    // Real jaws have a concave radiused tip we simply ignore
    module ChuckJaws(l=Jaw.x,r=10) {
    for (a=[0:120:240])
    rotate(a)
    linear_extrude(height=l)
    translate([r,0])
    difference() {
    translate([Chuck[OD]/4,0])
    square([Chuck[OD]/2,Jaw.y],center=true);
    for (i=[-1,1])
    rotate(i*(90 – JawAngle))
    translate([-Jaw.z/2,0])
    square([Jaw.z,2*Jaw.y],center=true);
    }
    }
    //———————-
    // Clamp body
    module ClampBlocks() {
    difference() {
    cylinder(d=Plate[OD],h=Plate[LENGTH],$fn=ClampSides); // main disk
    translate([0,0,-Protrusion]) // central bore
    cylinder(d=ClampBore,h=2*Plate[LENGTH],$fn=ClampSides);
    for (a=[0:120:240]) // kerf slits
    rotate(60 + a)
    translate([Plate[OD]/2,0,Protrusion])
    cube([Plate[OD],Kerf,2*Plate[LENGTH]],center=true);
    translate([0,0,BallDia/2 * cos(ClampAngle)]) // ball socket
    sphere(d=BallDia,$fn=ClampSides);
    for (a=[0:120:240]) { // legend
    rotate(4.5*360/ClampSides + a)
    translate([Plate[OD]/2 – LegendDepth,0,Plate[LENGTH]/2])
    rotate([0,90,0])
    linear_extrude(height=LegendDepth + Protrusion,convexity=10)
    mirror([0,0,0])
    text(text=str(BallDia," mm"),size=2.5,spacing=1.20,font="Arial:style:Bold",halign="center",valign="center");
    rotate(-4.5*360/ClampSides + a)
    translate([Plate[OD]/2 – LegendDepth,0,Plate[LENGTH]/2])
    rotate([0,90,0])
    linear_extrude(height=LegendDepth + Protrusion,convexity=10)
    mirror([0,0,0])
    text(text="KE4ZNU",size=2.5,spacing=1.20,font="Arial:style:Bold",halign="center",valign="center");
    }
    }
    }
    //———————-
    // Clamp with jaw cutouts
    module ClampBody() {
    difference() {
    ClampBlocks();
    translate([0,0,-Protrusion])
    ChuckJaws(l=Jaw.x + 2*Protrusion,r=BallDia/2 + WallThick);
    }
    }
    //———————-
    // Lash it together
    if (Layout == "Body") {
    ClampBlocks();
    }
    if (Layout == "Jaws") {
    ChuckJaws();
    }
    if (Layout == "Build") {
    ClampBody();
    }
    if (Layout == "Show") {
    ClampBody();
    color("ivory",0.2)
    ChuckJaws(r=BallDia/2 + WallThick + ShowGap); // move out for E-Z viewing
    color("red",0.4)
    translate([0,0,-Jaw.x/2])
    cylinder(d=ShaftOD,h=2*Jaw.x,$fn=ClampSides,center=false);
    color("white",0.5)
    translate([0,0,BallDia/2 * cos(ClampAngle)]) // ball socket
    sphere(d=BallDia,$fn=ClampSides);
    }

    The dimension doodles, including some notions that didn’t work:

    Lathe Ball Clamp - dimension doodles
    Lathe Ball Clamp – dimension doodles
  • Ball Drilling Misadventure

    Ball Drilling Misadventure

    My new bike helmet mirror mounts required poking a 3.6 mm hole through a 10 mm polypropylene ball:

    Helmet Mirror Ball Mount - drilled ball test
    Helmet Mirror Ball Mount – drilled ball test

    Although how I did it worked, it wasn’t pretty.

    I had a Micromark Spherical Object Drilling and Finishing Vise which was obviously intended for smaller holes in less challenging objects:

    Micromark Ball Vise - overview
    Micromark Ball Vise – overview

    Given the angle between the two plates, I didn’t see any way to put a large hole though the center of the ball:

    Micromark Ball Vise - 10 mm ball
    Micromark Ball Vise – 10 mm ball

    A scrap of wood aligned the two plates somewhat better:

    Micromark Ball Vise - wood block
    Micromark Ball Vise – wood block

    With that as a hint, the Box o’ Brass Cutoffs disgorged a better spacer, although the original screw was just an itsy too short:

    Micromark Ball Vise - brass tube
    Micromark Ball Vise – brass tube

    Grabbing the modified vise in a machinist’s vise got me most of the way toward the goal:

    Micromark Ball Vise - drill press
    Micromark Ball Vise – drill press

    Polypropylene is grabby, so the drill stuck / rotated the ball inside the vise / made a mess:

    Micromark Ball Vise - offset hole
    Micromark Ball Vise – offset hole

    A close look at the top picture shows the nasty ring around the hole (on the right side). The vise grips the ball between two holes punched in the metal plates, contacting it only at the right-angle (-ish) edges forming two rings, so there’s really not enough friction against the plastic to hold the ball in position and any slippage results in a gouge. Perhaps pearls / beads / jewelry behave differently?

    Fortunately, I had a bag of 100 balls, so a few failures gave me enough of a clue to do what I should have done from the beginning:

    Micromark Ball Vise - lathe ball hack
    Micromark Ball Vise – lathe ball hack

    That’s silicone tape wrapped around a ball grabbed in the lathe chuck, with a center drill in the tailstock. There’s barely enough traction between the ball and the chuck to get the job done, but it worked out well enough to build a few new mirrors:

    Helmet Mirror Ball Mount - new vs old
    Helmet Mirror Ball Mount – new vs old

    There’s obviously a better way, although it took a few weeks to shake out the solid model …

  • Simple Small File Handles

    Simple Small File Handles

    I finally got around to making handles for some small files:

    Simple file handles - installed
    Simple file handles – installed

    You’re allowed to drill wood on a metal lathe, although running a vacuum cleaner to collect the fine dust is a Good Idea:

    Simple file handles - hole drilling
    Simple file handles – hole drilling

    Yes, I could 3D print nice knurled handles, but these are something of an homage to my father’s small files with similar wood handles.

    I’ve been meaning to do this for … decades …

  • Kenmore Progressive Vacuum Cleaner vs. Dust Brush Adapters

    Kenmore Progressive Vacuum Cleaner vs. Dust Brush Adapters

    Contemporary vacuum cleaner dust brush heads have bristles in some combination of [long | short] with [flexy | stiff]. The long + flexy combination results in the bristles jamming the inlet and the short + stiff combo seems unsuited for complex surfaces. Shaking the Amazonian dice brought a different combination:

    Vacuum cleaner dust brush assortment - with adapters
    Vacuum cleaner dust brush assortment – with adapters

    That’s the new one on the bottom and, contrary to what you might think from the picture, it is not identical to the one just above it.

    In particular, the black plastic housing came from a different mold (the seam lines are now top-and-bottom) and required a new adapter for the Kenmore Progressive vacuum cleaner’s complicated wand / hose inlet, with a 3/4 inch PVC pipe reinforcement inside.

    Early reports indicate it works fine, so I’ll declare a temporary victory in the war on entropy.

    I’m still using the same OpenSCAD source code with minute tweaks to suit the as-measured tapers.

  • Bike Helmet Mirror: Brasswork Clamp

    Bike Helmet Mirror: Brasswork Clamp

    A bit of Quality Shop Time produced a slight improvement to the clamp holding the mirror to the stalk:

    Helmet Mirror Ball Mount - mirror joint brasswork
    Helmet Mirror Ball Mount – mirror joint brasswork

    The general idea is to hold the wave washer (it’s mashed under the flat washer, honest) above those bumps on the plate holding the mirror and stalk balls. It’s a few millimeters from the end of a ¼ inch brass rod, drilled for the M3 screw, and reduced to 4.5 mm with a parting tool to clear the bumps.

    While I was at it, I made two spare mirrors, just to have ’em around:

    Helmet Mirror Ball Mount - new vs old
    Helmet Mirror Ball Mount – new vs old

    The new ball mount looks downright svelte compared to the old Az-El mount, doesn’t it?

    I should replace the steel clamp plates with a stainless-steel doodad of some sort to eliminate the unsightly rust, but that’s definitely in the nature of fine tuning.

  • More AAA-to-AA Alkaline Adapters

    More AAA-to-AA Alkaline Adapters

    Having a handful of not-dead-yet AAA alkalines and a bunch of LED blinkies built for AA alkalines, a pair of adapters seemed in order:

    AAA-to-AA Alkaline Adapters - installed
    AAA-to-AA Alkaline Adapters – installed

    The blinkies need a somewhat wider base than they’d get from a pair of AAA alkalines, so it’s not quite as dumb as it may seem.

    In any event, the positive terminal comes from a brass rod:

    AAA-to-AA Alkaline Adapters - brass terminal
    AAA-to-AA Alkaline Adapters – brass terminal

    Nobody will ever see the fancy Hilbert Curve infill around the brass:

    AAA-to-AA Alkaline Adapters - end view
    AAA-to-AA Alkaline Adapters – end view

    In this application, they’ll go from not-dead-yet to oh-it’s-dead faster than AA cells, so I can watch how the blinkies work with lower voltages.

  • Bike Helmet Mirror: Ball Mount

    Bike Helmet Mirror: Ball Mount

    Nine years ago, I didn’t know how enough to design a bike helmet mirror with a ball mount, but even an old dog can learn a new trick:

    Helmet Mirror Ball Mount - on helmet
    Helmet Mirror Ball Mount – on helmet

    However, it’s worth noting my original, butt-ugly Az-El mounts lasted for all of those nine years, admittedly with adjustments along the way, which is far more than the commercial mounts making me unhappy enough to scratch my itch.

    The mount adapts the split spherical clamp from the daytime running light:

    Helmet Mirror Mount - Ball
    Helmet Mirror Mount – Ball

    Scaling it down for a 10 mm polypropylene ball around the base of the 30 mm inspection mirror’s shaft simplified everything:

    Helmet Mirror Ball Mount - drilled ball test
    Helmet Mirror Ball Mount – drilled ball test

    I’m reasonably sure I couldn’t have bought 100 polypro balls for eight bucks a decade ago, but we’ll never know. Drilling the hole was a complete botch job, about which more later. The shaft came from a spare mirror mount I made up a while ago; a new shaft appears below.

    The solid model, like Gaul, is in three parts divided:

    Helmet Mirror Ball Mount - Slic3r
    Helmet Mirror Ball Mount – Slic3r

    The helmet plate (on the right) has a slight indent more-or-less matching the helmet curvature and gets a layer of good double-stick foam tape. The clamp base (on the left) has a pair of brass inserts epoxied into matching recesses below the M3 clearance holes:

    Helmet Mirror Ball Mount - inserts
    Helmet Mirror Ball Mount – inserts

    A layer of epoxy then sticks the helmet plate in place, with the inserts providing positive alignment:

    Helmet Mirror Ball Mount - plates
    Helmet Mirror Ball Mount – plates

    The clamp screws pull the inserts against the plastic in the clamp base, so they can’t pull out or through, and the plates give the epoxy enough bonding surface that (I’m pretty sure) they won’t ever come apart.

    I turned down a 2 mm brass insert to fit inside the butt end of the mirror shaft and topped it off with a random screw harvested from a dead hard drive:

    Helmet Mirror Ball Mount - assembled - rear view
    Helmet Mirror Ball Mount – assembled – rear view

    At the start, it wasn’t obvious the shaft would stay stuck in the ball, so I figured making it impossible to pull out would eliminate the need to find it by the side of the road. As things turned out, the clamp exerts enough force to ensure the shaft ain’t goin’ nowhere, so I’ll plug future shafts with epoxy.

    The front side of the clamp looks downright sleek:

    Helmet Mirror Ball Mount - assembled - front view
    Helmet Mirror Ball Mount – assembled – front view

    Well, how about “chunky”?

    The weird gray-black highlights are optical effects from clear / natural PETG, rather than embedded grunge; it looks better in person. I should have used retina-burn orange or stylin’ black.

    This mount is much smaller than the old one and should, in the event of a crash, not cause much injury. Based on how the running light clamp fractures, I expect the clamp will simply tear out of the base on impact. In the last decade, neither of us has crashed, so I don’t know what the old mount would do.

    The clamp is 7 mm thick (front-to-back), set by the M3 washer diameter, with 1.5 mm of ball sticking out on each side. The model has a kerf one thread high (0.25 mm) between the pieces to add clamping force and, with the screws tightened down, moving the ball requires a disturbingly large effort. I added a touch of rosin and that ball straight-up won’t move, which probably means the shaft will bend upon droppage; I have several spare mirrors in stock.

    On the other paw, the ball turns smoothly in the clamp and it’s easy to position the shaft as needed: much better than the old Az-El mount!

    The inspection mirror hangs from a double ball joint which arrives with a crappy screw + nut. I epoxied the old mirror mount nut in place, but this time around I drilled the plates for a 3 mm stainless SHCS, used a wave washer for a bit of flexible force, and topped it off with a nyloc nut:

    Helmet Mirror Ball Mount - mirror joint
    Helmet Mirror Ball Mount – mirror joint

    I’m unhappy with how it looks and don’t like how the washer hangs in free space between those bumps, so I may eventually turn little brass fittings to even things out. It’s either that or more epoxy.

    So far, though, it’s working pretty well and both units meet customer requirements.

    The OpenSCAD source code as a GitHub Gist:

    // Bike helmet mirror mount – ball joint
    // Ed Nisley KE4ZNU 2020-09
    /* [Layout options] */
    Layout = "Build"; // [Build, Show, Plate, Base, Clamp]
    //– Extrusion parameters
    // Extrusion parameters
    /* [Hidden] */
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    function IntegerLessMultiple(Size,Unit) = Unit * floor(Size / Unit);
    Protrusion = 0.1; // make holes end cleanly
    inch = 25.4;
    ID = 0;
    OD = 1;
    LENGTH = 2;
    //- Basic dimensions
    MountDia = 30.0; // footprint on helmet
    BallDia = 10.0;
    BallRad = BallDia / 2;
    WallThick = IntegerMultiple(2.0,ThreadWidth);
    FloorThick = IntegerMultiple(2.0,ThreadThick);
    CornerRound = 2.0;
    Insert = [3.0,4.0,4.0]; // threaded brass insert
    Screw = [3.0,5.5,25.0]; // clamp screw
    Washer = [3.7,7.0,0.7]; // washer
    ShowGap = 2.0;
    BuildGap = 5.0;
    //– Helmet Interface Plate
    ScrewOC = BallDia + 2*WallThick + Screw[ID];
    echo(str("Screw OC: ",ScrewOC));
    Clamp = [ceil(Washer[OD]), // barely holds washer under screw
    ScrewOC + Washer[OD], // minimal clearance for washer
    BallDia +2*FloorThick // screw fits through insert
    ];
    Kerf = ThreadThick;
    echo(str("Clamp: ",Clamp));
    HelmetCX = 60.0; // empirical helmet side curve
    HelmetMX = 3.0;
    HelmetRX = (pow(HelmetMX,2) + pow(HelmetCX,2)/4)/(2*HelmetMX);
    HelmetPlateC = MountDia;
    HelmetPlateTheta = atan(HelmetPlateC/HelmetRX);
    HelmetPlateM = 2*HelmetRX*pow(sin(HelmetPlateTheta/4),2);
    echo(str("Plate indent: ",HelmetPlateM));
    HelmetPlateThick = max(FloorThick,0.6*Insert[LENGTH]) + HelmetPlateM;
    echo(str("Screw length: ",Clamp.z + Insert[LENGTH]));
    MountSides = 2*3*4;
    //———————-
    // Useful routines
    module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes
    Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
    FixDia = Dia / cos(180/Sides);
    cylinder(r=(FixDia + HoleWindage)/2,h=Height,$fn=Sides);
    }
    //———————-
    // Clamp frame around ball
    module ClampFrame() {
    difference() {
    union() {
    hull()
    for (i=[-1,1], j=[-1,1]) {
    translate([i*(Clamp.x/2 – CornerRound),j*(Clamp.y/2 – CornerRound),Clamp.z/2 – CornerRound])
    sphere(r=CornerRound,$fn=24);
    translate([i*(Clamp.x/2 – CornerRound),j*(Clamp.y/2 – CornerRound),-Clamp.z/2])
    cylinder(r=CornerRound,$fn=24);
    }
    for (j=[-1,1])
    translate([0,j*ScrewOC/2,0])
    rotate(180/12)
    cylinder(d=Washer[OD],h=Clamp.z/2,$fn=12);
    }
    sphere(d=BallDia + HoleWindage,$fn=48);
    cube([2*MountDia,2*MountDia,Kerf],center=true);
    for (j=[-1,1])
    translate([0,j*ScrewOC/2,-Screw[LENGTH]])
    rotate(180/6)
    PolyCyl(Screw[ID],2*Screw[LENGTH],6);
    }
    }
    module ClampSelect(Section) {
    XlateZ = (Section == "Top") ? Clamp.z/2 :
    (Section == "Bottom") ? -Clamp.z/2 :
    0;
    intersection(convexity=5) {
    ClampFrame();
    translate([0,0,XlateZ])
    cube([2*Clamp.x,2*Clamp.y,Clamp.z + 2*Protrusion],center=true);
    }
    }
    //———————-
    // Concave plate fitting helmet shell
    module HelmetPlate() {
    render()
    difference() {
    cylinder(d=MountDia,h=HelmetPlateThick,$fn=MountSides);
    translate([0,0,HelmetPlateThick – HelmetPlateM + HelmetRX])
    sphere(r=HelmetRX,$fn=128);
    for (j=[-1,1])
    translate([0,j*ScrewOC/2,-Protrusion]) {
    PolyCyl(Insert[OD],0.6*Insert[LENGTH] + Protrusion,6);
    PolyCyl(Screw[ID],2*HelmetPlateThick,6);
    }
    }
    }
    //———————-
    // Base of clamp ring
    module MountBase() {
    difference() {
    union() {
    cylinder(d=MountDia,h=FloorThick,$fn=MountSides);
    translate([0,0,FloorThick + Clamp.z/2])
    ClampSelect("Bottom");
    }
    for (j=[-1,1])
    translate([0,j*ScrewOC/2,-Protrusion])
    rotate(180/6)
    PolyCyl(Insert[OD],0.6*Insert[LENGTH] + Protrusion,6);
    }
    }
    //———————-
    // Lash it together
    if (Layout == "Plate") {
    HelmetPlate();
    }
    if (Layout == "Base") {
    MountBase();
    }
    if (Layout == "Clamp") {
    ClampFrame();
    }
    if (Layout == "Show") {
    rotate([180,0,0])
    HelmetPlate();
    translate([0,0,ShowGap]) {
    MountBase();
    color("Ivory",0.3)
    translate([0,0,Clamp.z/2 + FloorThick + ShowGap/2])
    sphere(d=BallDia);
    translate([0,0,Clamp.z/2 + FloorThick + ShowGap])
    ClampSelect("Top");
    }
    }
    if (Layout == "Build") {
    translate([MountDia/2 + BuildGap,0,0])
    HelmetPlate();
    translate([-(MountDia/2 + BuildGap),0,0])
    MountBase();
    translate([0,MountDia/2 + BuildGap,Clamp.z/2])
    rotate([0,180,0])
    rotate(90)
    ClampSelect("Top");
    }

    The original doodles include a bit of dress-up fairing that didn’t make the cut:

    Helmet Mirror Ball Mount - doodles
    Helmet Mirror Ball Mount – doodles