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

  • PLA vs. PVC Purple Primer: Win!

    After that exchange, I dabbed some Oatey PVC Purple Primer/Cleaner on two PLA slabs:

    PLA test coupon - PVC Purple Primer
    PLA test coupon – PVC Purple Primer

    The active ingredient involved in PLA bonding is tetrahydrofuran, which makes up anywhere from 10 to 40% of the primer (the MSDS gives a broad range). The primer immediately marred the PLA surface, which is exactly what you want in a solvent adhesive.

    After an overnight clamping, I couldn’t pull or peel that joint apart: the two slabs had become one. That’s unlike the paint stripper test that didn’t bond well at all. Good enough for me.

    Obviously, you’d prefer Clear Primer for natural PLA, but Purple Primer is what I had on hand.

    Given that this stuff has no solid content, I think it’s more suitable as a PLA adhesive that the thicker PVC Cement. However, clear cement would be less likely to run along the thread seams and ruin the surface finish outside the joint than water-thin primer.

    Tradeoffs, tradeoffs… but now I can build things from PLA subassemblies!

  • MTD Snowthrower: Transmission Repair

    During the next-to-last snowfall, the gearshift on our MTD snowthrower jammed in high gear, but the wheels turned much more slowly than usual. Slightly before the last snowfall, I removed the cover over the transmission and discovered what went wrong:

    MTD Snowthrower - transmission failure
    MTD Snowthrower – transmission failure

    That rubber wheel should be resting on the circular transmission plate, but somehow it slid off the far right edge. The spring-loaded clutch cable then pulled the plate upward, so that the side of the wheel drove the edge of the plate. Ouch.

    The plate rotates on a bearing around a post on the folded red steel support structure underneath it, which pivots on a rod across the transmission housing behind everything that’s visible here. That rod used to protrude through the housing, but it had slipped inside and moved the plate to the left enough to let the wheel fall off. Some awkward maneuvering got it back through the hole, which made the real problem obvious:

    MTD Snowthrower - missing hitch pin clip
    MTD Snowthrower – missing hitch pin clip

    There’s supposed to be a cotter pin or hitch pin clip through that hole, with a washer matching the obvious wear marks:

    MTD Snowthrower - replacement cotter pin
    MTD Snowthrower – replacement cotter pin

    That’s actually a spacing shim from a collection that I’ve used rather infrequently over the years, but it’s exactly the right thickness to make the answer come out right.

    A few weeks later, we found the missing washer on the driveway at about the point where I first noticed the transmission wasn’t working. It’s in the box of parts, waiting for the new cotter pin to wear out.

  • Belkin F6C1500 UPS Battery Wiring Arrangement

    Given the length of the battery wires inside a Belkin F6C1500 UPS, you might think any arrangement will work. Not so. The wires from the guts of the UPS must exit to the batteries exactly like this:

    F6C1500 Battery wires from UPS
    F6C1500 Battery wires from UPS

    There’s a black wire tucked under the red wire, both of which must exit though the angled slot and run toward the front of the battery compartment.

    Seen from the front, the red wire connects the positive terminal of the lower (left) battery to the negative terminal of the top (right) battery and the black wire connects the negative terminal of the lower battery to the UPS circuitry:

    F6C1500 Battery interconnect wires
    F6C1500 Battery interconnect wires

    Trust me on this: there is no other arrangement of those wires that will simultaneously connect everything properly and fit within the case.

    As for disassembly, the small tab on the left end of the case holds the front panel in place. Press that inward with a flat screwdriver, then slide the cover toward the tab. Four locking slots along the sides will disengage and you can then lift the panel off.

    With that out of the way, there’s a screw hidden under the BELKIN label in the middle of the removable cover:

    Belkin F6C1500 UPS Cover Screw Locations
    Belkin F6C1500 UPS Cover Screw Locations
  • PLA vs. Methylene Chloride: Joint Peel Strength

    The only commonly available PLA adhesive seems to be methylene chloride, which is common only because it’s part of really nasty paint stripper that actually works; I suspect you can’t buy the pure stuff anywhere.

    Anyhow, I picked a pair of flat line width test plates from the PLA scrap pile, dabbed paint stripper on each, and clamped them together overnight:

    PLA test coupon - clamping
    PLA test coupon – clamping

    Unlike acetone on ABS, paint stripper doesn’t actually combine the parts into a single fused unit; I could peel the two plates apart with some effort:

    PLA test coupon - paint stripper adhesion
    PLA test coupon – paint stripper adhesion

    That picture shows the results of two glue-and-peel tests, with much the same result along the top and bottom edges. Some solvent damage appears as a thin white line around the edge of the glued joint, but with some care that wouldn’t be too bad.

    I think paint stripper makes an acceptable adhesive for PLA, at least for joints that aren’t subject to peeling loads. You must design an interlocking mechanical joint, perhaps filled with epoxy, to withstand peeling loads, which isn’t nearly as good as the ABS option of just fusing the parts together.

  • Makergear M2: Radial Engine Cylinder Head

    After some chiding by Jetguy, here’s a cylinder head from the MBI radial engine:

    Radial engine cylinder head - top - plug oblique
    Radial engine cylinder head – top – plug oblique

    The side fins came out nicely, but the top fins had a few misplaced threads (far side to the left of the valve):

    Radial engine cylinder head - intake
    Radial engine cylinder head – intake

    The view from the other port:

    Radial engine cylinder head - exhaust
    Radial engine cylinder head – exhaust

    Seen directly from the spark plug side, you can barely make out the impossibly thin fin section arching over the plug hole:

    Radial engine cylinder head - plug side
    Radial engine cylinder head – plug side

    The cylinder side looks OK:

    Radial engine cylinder head - bottom
    Radial engine cylinder head – bottom

    I built it standing on one of the ports with the fins vertical, as shown above, which is probably the only way to do it without soluble support material. If I were doing it for real with non-soluble support, I’d be tempted build it flat on the cylinder side with support under the piston head and thin support blocks inside the side fins. It’d look about the same, but with better finish on the top fins.

    All in all, I’d say it looks pretty good.

    The Slic3r header:

    ; generated by Slic3r 0.9.10-dev on 2013-04-20 at 20:24:18
    
    ; layer_height = 0.20
    ; perimeters = 1
    ; top_solid_layers = 3
    ; bottom_solid_layers = 3
    ; fill_density = 0.1
    ; perimeter_speed = 60
    ; infill_speed = 80
    ; travel_speed = 200
    ; nozzle_diameter = 0.35
    ; filament_diameter = 1.73
    ; extrusion_multiplier = 0.9
    ; perimeters extrusion width = 0.52mm
    ; infill extrusion width = 0.52mm
    ; solid infill extrusion width = 0.52mm
    ; top infill extrusion width = 0.52mm
    

    The STL file came direct from Thingiverse, riddled with the reversed normals and holes common to solid models generated by Sketchup, but a pass through NetFabb’s cleanup made it printable. The original STL positioned it far, far out on the X axis, so if you don’t see it right away, rummage around a bit.

  • Printed Chain Mail: Subtractive Model

    This is a subtractive version of Zomboe’s Chainmail, built by removing chunks from a solid rectangle the size of one link:

    Chain Mail Link - Subtractive
    Chain Mail Link – Subtractive

    Until what’s left is, indeed, a single link:

    Chain Mail Link
    Chain Mail Link

    The pillars in the original model weren’t nearly large enough; Slic3r omitted them from the G-Code. They’re now as wide as the bars and √2 times that width long, which means they actually get a bit of fill.

    Then a pair of nested loops replicates that link across the entire fabric:

    Chain Mail Sheet
    Chain Mail Sheet

    That technique didn’t work with Skeinforge (because it sent the nozzle scampering all over each layer, knocking things loose) and it didn’t work with Slic3r 0.9.8 (because it had problems with bridges), but Slic3r 0.9.10, hot from github, produced good results:

    Chain Mail - as built
    Chain Mail – as built

    There were some strings connecting adjacent links, but a few minutes with a flush cutter solved that. Retraction was 1 mm at 80 mm/s = 480 mm/min, which seems to work fine in other contexts, but adjacent links fell inside the 1 mm minimum distance setting I’d been using. That’s now down to 0.5 mm, which should suffice for nearly everything.

    The M2 sounded like I was hitting it with a hammer: each of the 480 pillar layers (!) required a quick squirt and a retraction, followed by a 500 mm/s move. Worked fine and didn’t miss a step anywhere along the way.

    A view from the bottom shows it really is flexy:

    Chain Mail - bottom
    Chain Mail – bottom

    I used zero perimeter threads on these tiny links, which means you can see the ripply edges of the second layer that was crosswise to the length of the link bars. Next time, I’ll try one perimeter thread, which should smooth that out.

    The links stuck to the glass like they were glued, which, indeed, they were: White Rain Unscented Extra Hold Hairspray in a pump bottle (either they didn’t have Maximum Hold pump spray or I couldn’t see it). I’m not a big fan of aerosol anything and decided to try wiping the stuff across the platform glass, rather than filling the air with a fine mist and getting some on the glass. Seems to work, but more examples are needed…

    The Slic3r configuration:

    ; generated by Slic3r 0.9.10-dev on 2013-04-17 at 17:28:11
    ; layer_height = 0.25
    ; perimeters = 0
    ; top_solid_layers = 3
    ; bottom_solid_layers = 3
    ; fill_density = 0.10
    ; perimeter_speed = 100
    ; infill_speed = 100
    ; travel_speed = 500
    ; nozzle_diameter = 0.35
    ; filament_diameter = 1.73
    ; extrusion_multiplier = 0.9
    ; perimeters extrusion width = 0.40mm
    ; infill extrusion width = 0.40mm
    ; solid infill extrusion width = 0.40mm
    ; top infill extrusion width = 0.40mm
    

    The OpenSCAD source code, with the platform marker cubes expanded to cover the M2’s glass plate:

    // Chain Mail Sheet
    // For Slic3r and M2 printer
    // Ed Nisley KE4ZNU - Apr 2013
    
    Layout = "Build";			// Link Build
    
    //-------
    //- Extrusion parameters must match reality!
    //  Print with +0 shells and 3 solid layers
    
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    
    HoleWindage = 0.2;
    
    Protrusion = 0.1;			// make holes end cleanly
    
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    
    //-------
    // Dimensions
    
    BarWidth = 5 * ThreadWidth;
    BarThick = 3 * ThreadThick;
    
    LinkSquare = IntegerMultiple(13.0,ThreadWidth);
    LinkHeight = 2*BarThick + 1*BarThick;
    
    LinkOutDiagonal = LinkSquare*sqrt(2) - BarWidth;
    LinkInDiagonal = LinkSquare*sqrt(2) - 2*(BarWidth/2 + BarWidth*sqrt(2));
    
    echo("Outside diagonal: ",LinkOutDiagonal);
    
    SheetSizeX = 75;
    SheetSizeY = 100;
    
    NumLinksX = 1 + floor(SheetSizeX / LinkOutDiagonal);
    NumLinksY = 1 + floor(SheetSizeY / LinkOutDiagonal);
    
    echo("Links X: ",NumLinksX," Y: ",NumLinksY);
    
    LinkSpacing = 0.59 * LinkOutDiagonal;
    
    //-------
    
    module ShowPegGrid(Space = 10.0,Size = 1.0) {
    
      RangeX = floor(95 / Space);
      RangeY = floor(125 / Space);
    
    	for (x=[-RangeX:RangeX])
    	  for (y=[-RangeY:RangeY])
    		translate([x*Space,y*Space,Size/2])
    		  %cube(Size,center=true);
    
    }
    
    //-------
    // Create basic link
    
    module Link() {
    
    	rotate(45)
    		difference(convexity=2) {
    			translate([0,0,LinkHeight/2]) {
    				difference(convexity=2) {
    					intersection() {		// outside shape
    						cube([LinkSquare,LinkSquare,LinkHeight],center=true);
    						rotate(45)
    							cube([LinkOutDiagonal,LinkOutDiagonal,LinkHeight],center=true);
    					}
    					intersection() {		// inside shape
    						cube([(LinkSquare - 2*BarWidth),(LinkSquare - 2*BarWidth),(LinkHeight + 2*Protrusion)],center=true);
    						rotate(45)
    							cube([LinkInDiagonal,LinkInDiagonal,(LinkHeight +2*Protrusion)],center=true);
    					}
    				}
    			}
    			for (i=[-1,1]) {				// create bars
    				translate([0,-i*(sqrt(2)*BarWidth/2),BarThick])
    					rotate(45 + 180*(i+1)/2)
    						cube([LinkOutDiagonal,LinkOutDiagonal,LinkHeight]);
    				translate([i*(sqrt(2)*BarWidth/2),0,-BarThick])
    					rotate(135 + 180*(i+1)/2)
    						cube([LinkOutDiagonal,LinkOutDiagonal,LinkHeight]);
    			}
    		}
    }
    
    //-------
    // Build it!
    
    ShowPegGrid();
    
    if (Layout == "Link") {
      Link();
    }
    
    if (Layout == "Build") {
    	for (ix=[-(NumLinksX/2 - 0):(NumLinksX/2 - 1)])
    		for (iy=[-(NumLinksY/2 - 0):(NumLinksY/2 - 1)])
    			translate([ix*LinkSpacing + LinkSpacing/2,iy*LinkSpacing + LinkSpacing/2,0])
    				Link();
    }

    [Update: The original doodles, in case I ever need the background info:]

    Chain Mail - Link Dimension Doodles
    Chain Mail – Link Dimension Doodles
  • Makergear M2: Z-minimum Switch

    The best orientation for the Z-minimum switch seems to be slightly angled back:

    M2 - Z min limit switch
    M2 – Z min limit switch

    I used an M4x0.7 socket head cap screw for the height adjustment, with a Nylock nut below the stage:

    M2 - Z min limit screw
    M2 – Z min limit screw

    The assembly instructions show a hex head screw, but the item numbers don’t match the BOM listings. The SHCS lets me hold it firmly in position with the ball-end driver provided in the M2 tool kit while adjusting it:

    • 1/4 turn (the handle is square-ish) = 0.7/4 = 0.175 mm
    • 1/6 turn (the shaft is hex) = 0.12 mm
    • 1/12 turn (you can do it!) = 0.06mm
    • less than that is probably fooling yourself.

    I printed a pair of tomlombardi’s  7 mm wrenches, which work well for adjusting the Nylock nut underneath the Z axis stage:

    M2 - 7 mm wrenches
    M2 – 7 mm wrenches

    The left end of the top wrench didn’t adhere to the glass plate, but the business end of the wrench came out OK.

    I adjusted the screw to trip the switch with the nozzle 1.0 mm above the platform, then feed that offset in using a G92 Z1.0 instruction in my customized Start G-Code.

    However, the most accurate way to set the switch height involves measuring the as-printed thickness of the skirt extrusion around the object. The average value should be 0.25 mm (for my current slic3r settings, anyhow) and all sides should be equally thick: adjust the screw to change the average and adjust the platform screws to remove any tilt. You’ll quickly accumulate a pile of skirt threads, but they make good tchotchkes when you give a presentation on your new toy:

    M2 skirt extrusions
    M2 skirt extrusions

    You could fiddle with the G92 value to make the average thickness come out right, but I favor making the machine as accurate as possible, so that the software begins from a known-good mechanical setting.