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

  • HP 7475A Plotter: CMY Ink Mixes

    Mixing bulk inkjet printer inks produces pretty colors:

    CMY Printer Ink Mixes - backlit
    CMY Printer Ink Mixes – backlit

    The small spots show the colors on paper (with the vials in a different order):

    CMY Printer Ink Mixes - paper spots
    CMY Printer Ink Mixes – paper spots

    Three of those vials contain the original CMY inks, taken from a trio of small generic inkjet refill bottles.

    Mixing 1:1 ratios of two inks produces the expected red / blue / green primaries.

    Six other colors came from 2:1 blends of two inks and, except maybe for that purple over on the right of the top picture, aren’t worth the aggravation; plotter drawings don’t score higher for having a rich color palette.

    In principle, I could dilute the mixes with water (alcohol? vodka?) to produce less saturated colors, but for plotter ink absolutely nothing exceeds like excess.

    The CMY and 1:1 (= 0.5 ml each) vials should contain 1.0 ml and the 2:1 vials hold 0.9 ml (= 0.3 + 0.6 ml), but I didn’t sweat the small stuff and there was some, ah, spillage along the way.

    The vials are 1.5 ml perfume sample vials from the usual eBay supplier: 50 of the things (with 10 squeezy plastic 3 ml pipettes) set me back nine bucks delivered. Refilling a plotter pen requires maybe 0.05 ml, so each vial holds 20-ish refills with plenty of headroom.

    Uncapping and recapping the vials inside a towel makes a lot of sense; the ink makes its way between the cap and vial, creeps up to the lip, and spatters as the lid snaps closed. Fortunately, that t-shirt was getting on toward worn out…

    Memo to Self: Do not fiddle with magenta ink immediately before chopping the supper vegetables.

  • Clover MCI-900 Mini Iron Holder

    Mary flattens seam allowances and prepares appliqué pieces with a Clover MCI-900 Mini Iron. The stand resembles the wire gadgets that came with soldering irons, back in the day:

    Clover MCI-900 Mini Iron - Clover holder
    Clover MCI-900 Mini Iron – Clover holder

    That stand may be suitable on a workbench, but it’s perilously unstable on an ironing board. After fiddling around for a while and becoming increasingly frustrated with it, she asked for a secure holder that wouldn’t fall over and perhaps had a heat shield around the hot end.

    I ran off a quick prototype to verify my measurements and provide a basis for further discussion:

    Clover MCI-900 Mini Iron - Level holder
    Clover MCI-900 Mini Iron – Level holder

    I proposed screwing that holder to a rectangle of leftover countertop extending under the hot end, with a U-shaped heat shield extending upward to keep fingers and fabric away from the blade. She decided the countertop might be entirely too heavy and the heat shield might be too confining, so she suggested just angling the iron upward and adding a flat platform to stabilize it.

    Her wish being my command:

    Clover MCI-900 Mini Iron - Angled holder
    Clover MCI-900 Mini Iron – Angled holder

    I’m still not convinced that having the hot end up in the air is a Good Thing, but she thinks it’s worth trying as-is. A pair of 10-32 screw holes under each end will let it mount to a base board, should that becomes necessary.

    I’ll stick a foam sheet under the platform so it doesn’t slide around. The cord normally dangles downward off the side of the ironing board or work table, so the iron won’t get up and walk away, but it might pull the whole affair toward the edge.

    Because OpenSCAD now includes a text() function, engraving her name in the platform turned out to be no big deal:

    Clover Mini Iron Holder - model
    Clover Mini Iron Holder – model

    I should fill the letters with JB Weld epoxy darkened with laser printer toner (who knew?) to make them stand out. They’re more conspicuous in person than in the picture, so maybe it doesn’t matter.

    The slots holding the iron have a semicircular bottom and straight-wall sides, created by extruding hulled 2D shapes, arranging them along the iron’s central axis, and tilting the “iron” at the appropriate angle:

    Clover Mini Iron Holder - solid model showing iron
    Clover Mini Iron Holder – solid model showing iron

    That’s a 10° tilt, chosen because it looked right. The model recomputes itself around the key dimensions, so we can raise / lower the iron, change the angle, and so forth and so on, as needed.

    Assuming that a hot end sticking out in mid-air isn’t too awful, this one looks like a keeper.

    The OpenSCAD source code:

    // Clover MCI-900 Mini Iron holder
    // Ed Nisley KE4ZNU - August 2015
    
    Layout = "Holder";					// Iron Holder
    
    //- Extrusion parameters - must match reality!
    
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    
    Protrusion = 0.1;
    
    HoleWindage = 0.2;
    
    inch = 25.4;
    
    Tap10_32 = 0.159 * inch;
    Clear10_32 = 0.190 * inch;
    Head10_32 = 0.373 * inch;
    Head10_32Thick = 0.110 * inch;
    Nut10_32Dia = 0.433 * inch;
    Nut10_32Thick = 0.130 * inch;
    Washer10_32OD = 0.381 * inch;
    Washer10_32ID = 0.204 * inch;
    
    //------
    // Dimensions
    
    CornerRadius = 4.0;
    
    CenterHeight = 25;							// center at cord inlet on body
    
    BodyLength = 110;							// cord inlet to body curve at front flange
    
    Incline = 10;								// central angle slope
    
    FrontOD = 29;
    FrontBlock = [20,1.5*FrontOD + 2*CornerRadius,FrontOD/2 + CenterHeight + BodyLength*sin(Incline)];
    
    CordOD = 10;
    CordLen = 10;
    
    RearOD = 22;
    RearBlock = [15 + CordLen,1.5*RearOD + 2*CornerRadius,RearOD/2 + CenterHeight];
    
    PlateWidth = 2*FrontBlock[1];
    
    TextDepth = 3*ThreadThick;
    
    ScrewOC = BodyLength - FrontBlock[0]/2;
    ScrewDepth = CenterHeight - FrontOD/2 - 5;
    
    echo(str("Screw OC: ",ScrewOC));
    
    BuildSize = [200,250,200];					// largest possible thing
    
    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);
    }
    
    // Trim bottom from child object
    
    module TrimBottom(BlockSize=BuildSize,Slice=CornerRadius) {
    	
    	intersection() {
    		translate([0,0,BlockSize[2]/2])
    			cube(BlockSize,center=true);
    		translate([0,0,-Slice])
    			children();
    	}
    }
    
    // Build a rounded block-like thing
    
    module RoundBlock(Size=[20,25,30],Radius=CornerRadius,Center=false) {
    	
    	HS = Size/2 - [Radius,Radius,Radius];
    	translate([0,0,Center ? 0 : (HS[2] + Radius)])
    	hull() {
    		for (i=[-1,1], j=[-1,1], k=[-1,1]) {
    			translate([i*HS[0],j*HS[1],k*HS[2]])
    				sphere(r=Radius,$fn=4*4);
    		}
    	}
    }
    
    // Create a channel to hold something
    // This will eventually be subtracted from a block
    // The offsets are specialized for this application...
    
    module Channel(Dia,Length) {
    	
    	rotate([0,90,0])
    		linear_extrude(height=Length)
    			rotate(90)
    				hull() {
    					for (i=[-1,1])
    						translate([i*Dia,2*Dia])
    							circle(d=Dia/8);
    					circle(d=Dia,$fn=8*4);
    				}
    }
    
    // Iron-shaped series of channels to be removed from blocks
    
    module IronCutout() {
    
    	union() {
    		translate([-2*CordLen,0,0])
    			Channel(CordOD,2*CordLen + Protrusion);
    		Channel(RearOD,RearBlock[0] + Protrusion);
    		translate([BodyLength - FrontBlock[0]/2 - FrontBlock[0],0,0])
    			Channel(FrontOD,2*FrontBlock[0]);
    
    	}
    	
    }
    
    //- Build it
    
    if (Layout == "Iron")
    	IronCutout();
    
    if (Layout == "Holder")
    	difference() {
    		union() {
    			translate([(BodyLength + CordLen)/2 - CordLen,0,0])
    				TrimBottom()
    					RoundBlock(Size=[(CordLen + BodyLength),PlateWidth,CornerRadius]);
    
    			translate([(RearBlock[0]/2 - CordLen),0,0])
    				TrimBottom()
    					RoundBlock(Size=RearBlock);
    
    			translate([BodyLength - FrontBlock[0]/2,0,0]) {
    				TrimBottom()
    					RoundBlock(Size=FrontBlock);
    			}
    		}
    		
    		translate([0,0,CenterHeight])
    			rotate([0,-Incline,0])
    				IronCutout();
    		
    		translate([0,0,-Protrusion])
    			PolyCyl(Tap10_32,ScrewDepth + Protrusion,6);
    			
    		translate([ScrewOC,0,-Protrusion])
    			PolyCyl(Tap10_32,ScrewDepth + Protrusion,6);
    
    		translate([(RearBlock[0] - CordLen) + BodyLength/2 - FrontBlock[0],0,CornerRadius - TextDepth]) {
    			
    			translate([0,10,0])
    				linear_extrude(height=TextDepth + Protrusion,convexity=1)		// rendering glitches for convexity > 1
    					text("Mary",font="Ubuntu:style=Bold Italic",halign="center",valign="center");
    					
    			translate([0,-10,0])
    				linear_extrude(height=TextDepth + Protrusion,convexity=1)		// rendering glitches for convexity > 1
    				text("Nisley",font="Ubuntu:style=Bold Italic",halign="center",valign="center");
    		}
    		
    	}
    

    The M2 buzzed away for four hours on that puppy, with the first 2½ hours devoted to building the platform. That’s the downside of applying Hilbert Curve infill to two big flat surfaces, but the texture looks really good.

  • The End of Tire Liners

    This marks the end of my infatuation with tire liners:

    Schwalbe 20 inch tube - tire liner damage
    Schwalbe 20 inch tube – tire liner damage

    There seems to be no way to eliminate tube erosion at the end of the liner. I’ve tried tapering the thickness, taping the joint, and so forth and so on.

    Fortunately, the tire went flat in the garage and I did a quick swap before our morning ride.

    Searching for tire liner will reveal the rest of the stories, both good and bad.

  • M2 Motor Mount: Better-looking Cable Cap

    An objection was raised to my original cable strain relief technique with the PETG motor mount:

    M2 Motor Mount - PETG installed - cable brace
    M2 Motor Mount – PETG installed – cable brace

    The proffered replacement had a difficult-to-print orientation:

    M2 Motor Mount - Cable Cap - original STL orientation
    M2 Motor Mount – Cable Cap – original STL orientation

    Which Meshlab’s Manipulators Tool rotated by 90°:

    M2 Motor Mount - Cable Cap
    M2 Motor Mount – Cable Cap

    And that printed without any drama (or support), at least after I sliced it to use a single perimeter thread that could cope with the arch:

    M2 Motor Mount - Cable Cap - on platform
    M2 Motor Mount – Cable Cap – on platform

    Then a few pretty cable ties wrapped everything up in a decorative package:

    M2 Motor Mount - Cable Cap - installed
    M2 Motor Mount – Cable Cap – installed

    And that’s that…

    Memo to Self: Bang on the ␛ key to get out of whatever mode the Manipulators Tool gets wedged into.

  • Sony HDR-AS30V: AKA-SF1 Skeleton Frame Latch Repair

    My Sony HDR-AS30V is an action camera, but requires an external case / frame to mount it on anything. Here’s the camera inside its AKA-SF1 Skeleton Frame atop my helmet:

    Sony HDR-AS30V camera on bike helmet - inverted
    Sony HDR-AS30V camera on bike helmet – inverted

    Four 1 mm tall ramps on the inside of the black base (the part just above the yellow sled) snap into 2.6 mm square sockets in the skeleton frame surrounding the camera. For an unknown reason(s) that surely involves applying forces I don’t remember, an opposing pair of those ramps broke off, leaving the other pair to loosely hold one end of the camera in place.

    In this picture, the left ramps (one visible) are missing, leaving a square-ish gray scar that’s nearly indistinguishable from the reflection on the intact ramp on the right:

    Sony HDR-AS30V Skeleton Mount - broken latch ramps
    Sony HDR-AS30V Skeleton Mount – broken latch ramps

    Surprisingly, the round head of a brass 0-80 machine screw fits neatly inside the square socket on the frame; they’re a bit more than 1 mm deep. The approach ramps visible below the sockets guide the latches on the base:

    Sony HDR-AS30V Skeleton Mount - frame sockets
    Sony HDR-AS30V Skeleton Mount – frame sockets

    So I figured I could just shave off the remaining two latch ramps, drill four holes at the proper spots, and replace the plastic ramps with metal screws.

    I clamped the skeleton frame to the Sherline’s tooling plate, aligned it parallel to the X axis, put the laser spot dead center in the square socket, then snapped the base onto the frame. The laser spot shows where the drill will hit:

    Sony HDR-AS30V Skeleton Mount - laser hole alignment
    Sony HDR-AS30V Skeleton Mount – laser hole alignment

    A carbide drill did the honors:

    Sony HDR-AS30V Skeleton Mount - 0-80 hole drilling
    Sony HDR-AS30V Skeleton Mount – 0-80 hole drilling

    That’s a #55 = 0.0520 hole for 50% thread, rather than the proper 3/64 = 0.0469 hole for 75% thread, because that’s the closest short carbide drill I had; an ordinary steel twist drill, even in the screw-machine length I use on the Sherline, would probably scamper away. The hole isn’t quite on the sloped bottom edge of the base, but it’s pretty close.

    The first hole didn’t emerge quite in the center of its ramp scar:

    Sony HDR-AS30V Skeleton Mount - hole position - interior
    Sony HDR-AS30V Skeleton Mount – hole position – interior

    Which made sense after I thought about it: the ramp tapers to nothing in the direction of the offset, so the hole actually was in the middle of the matching socket.

    Threading the holes required nothing more than finger-spinning an 0-80 tap:

    Sony HDR-AS30V Skeleton Mount - tapping 0-80
    Sony HDR-AS30V Skeleton Mount – tapping 0-80

    The feeble thread engagement didn’t matter, because those mysterious tabs-with-slots (possibly for tie-down strings?) just above the holes were a perfect fit for 0-80 brass nuts:

    Sony HDR-AS30V Skeleton Mount - reassembled
    Sony HDR-AS30V Skeleton Mount – reassembled

    The screw heads extend into the sockets, hold the frame solidly in the base, and make it impossible to pull out. Although the frame still slides / snaps into the base, that seems like it will wear out the sockets in fairly short order, so I’ll unlatch the frame (with the yellow slide latch on top), open it up, ease it into position, and then latch it in place. That was the only way to remove it from the original latches, so it’s not a big deal.

    I should add a drop of epoxy to each of those nuts and perhaps fill the screw slots with epoxy to keep them from abrading the plastic inside the sockets. Maybe a dab of epoxy on the heads, followed by latching the frame in place, would form four square pegs to exactly fill the sockets.

    This was a straightforward repair that should not have been necessary…

  • Helmet Mirror Mount: Elevation Set Screw Slide

    The elevation tension adjustment on both our bike helmet mirror mounts have become a bit sloppy. That’s no surprise, because I expected the tiny set screw in the tiny square hole near the top to eventually wear a depression in the ABS plastic arc upon which it bears:

    Helmet mirror mount - 3D model - Fit layout
    Helmet mirror mount – 3D model – Fit layout

    The only surprise was that it took four years. That’s far longer than all of the commercial mirror and their mounts lasted; this one’s definitely a keeper.

    So I got to do something I planned pretty much from the beginning of the project: cut a snippet of phosphor bronze spring stock to go between the Elevation mount and the arc, then bend the ends bent inward so they don’t slash an errant fingertip:

    Helmet mirror mount - elevation slide
    Helmet mirror mount – elevation slide

    Slipped in place, the ends look like they stick out anyway, but they’re really just about flush:

    Helmet mirror mount - El slide in place
    Helmet mirror mount – El slide in place

    Tightening the set screw pushes the strip against the arc, where it provides enough resistance to prevent slipping and enough smoothness for easy adjustment.

    While I had the mounts up on the repair stand, I unscrewed the mirror shaft and snugged up the Azimuth pivot screw by a micro-smidgen to tighten that motion.

    Four years ago, those ABS parts popped off the much-hacked Thing-O-Matic’s platform. The M2 produces somewhat better-looking results, but that yellow plastic has a certain charm…

  • HP 7475A Plotter: Refilling the Pens

    Plotters date back to the days before companies started using DRM to protect their monopoly positions, so refilling plotter pens requires little more than prying out the plug and squirting in more ink. Refilling the disposable liquid ink pens and the green ceramic pen suggested this would work.

    I shaved down the side of a Genuine HP pen to find out why the plug didn’t pop out. It turns out the plug has a long and aggressively ribbed profile to ensure a gas-tight fit:

    HP Plotter Pen - exposed plug
    HP Plotter Pen – exposed plug

    The easiest way to refill those is to drill an off-center 1/16 inch hole in the plug, then inject ink into the sponge with a syringe and blunt needle (and bulk ink!) from an inkjet cartridge refill kit. Angling the needle through the sponge close to the pen wall, then filling slowly, loads the sponge from the bottom up and expels the air along the way.

    Inmac pens have a shallow plug, more of a flat cap, that pries out with zero drama:

    Inmac Plotter Pen - removed plug
    Inmac Plotter Pen – removed plug

    Dripping the ink atop the sponge seems to work well, although that sponge is definitely over-filled.

    Inmac caps push back in place with zero drama.

    The pens have fiber nibs with vent channels along their sides that allow air into the reservoir, so overfilling the sponge nets you a mess when you take the cap off the nib: those same channels allow excess ink to run from the reservoir around the nib, without (much to my surprise) wetting the fiber tip.

    About 0.2 ml of ink fills the reservoir to saturation, 0.1 ml leaves it wet, and 0.05 ml seems to work well. The 1.0 ml syringes I’m using require about 0.05 ml to fill the (blunt!) needle shaft & hub, plus the syringe tip below the 0.0 ml index, so measuring the ink by drops might make practical sense.

    The old physician’s trick of expelling that air by inverting the syringe and pressing the plunger until liquid squirts from the needle is so not happening…

    I’ve had zero success refilling fossilized pens, probably because the OEM ink slowly evaporating from the nib clogs all the gaps between the fibers with pigment or coagulated solvent. Preemptively refilling good pens when they first show signs of running dry generally works well.

    Given the number of New Old Stock pens I have that are still in their original wrappers, this is more of a “Does it work?” exercise than a necessity.

    But, y’know, maybe becoming the last plotter pen refiller on the planet will be my ticket to fame & fortune! For sure, we’ve all seen over-hyped Internet startups with worse business plans and (the admittedly few) typewriter repair shops occupy a stable niche.