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

  • Tour Easy: Cracked Fork Autopsy

    A look inside the cracked fork lug from my Tour Easy shows that it really did fracture at the top of the fork blade:

    Tour Easy - cracked fork - interior flash
    Tour Easy – cracked fork – interior flash

    Minus the flash, plus contrast enhancement:

    Tour Easy - cracked fork - interior
    Tour Easy – cracked fork – interior

    Looks rather grotendous in there, doesn’t it? Yeah, show me the interior of your fork…

    The front is at the top, blade on the left and crown on the right. The little shiny rectangle at 1 o’clock on the crown was probably the last fragment holding the blade in place.

    Finished!

  • Random LED Dots: Hardware Layout

    Quite some time ago, Sophi gave me a common-anode RGB LED panel and told me to make something of it. In a spate of desk-clearing, I hammered out a quick-and-dirty multiplexed display from found materials: 2N2907 transistors as row source drivers and 74HC595 shift registers abused as column sink drivers, plus the obligatory Arduino Pro Mini and 3D printed holder:

    Random LED Dots - circuit board
    Random LED Dots – circuit board

    A sheet of milk-white acrylic diffuses the glittery LED dots into pastel disks. I think it might look better without the diffuser; it certainly has a harder-edged tech look:

    Random LED Dots - overview - no diffuser
    Random LED Dots – overview – no diffuser

    A neutral-density filter would boost the contrast without hiding any of the details.

    It obviously needs an enclosure, but, around here, that’s in the nature of fine tuning.

    The transistors and shift registers  cower under the panel:

    Random LED Dots - circuit layout - top
    Random LED Dots – circuit layout – top

    The bottom view exposes the hand wiring, plus the slot required to adapt the LED panel’s non-100-mil layout to the protoboard’s holes. I chopped out the slot with a Dremel saw, attached socket strips to the panel, and epoxied the floating strip in place:

    Random LED Dots - circuit layout - bottom
    Random LED Dots – circuit layout – bottom

    The prospect of wiring 32 discrete resistors filled me with dread, so I just tombstoned SMD resistors onto the protoboard solder blobs:

    Random LED Dots - circuit layout - RB SMD resistors
    Random LED Dots – circuit layout – RB SMD resistors

    The slot required slightly longer bridge wires:

    Random LED Dots - circuit layout - G SMD resistors
    Random LED Dots – circuit layout – G SMD resistors

    The layout, such as it is, made those short, direct wires possible. A PCB with SMD chips would be even better.

    More on the circuitry tomorrow…

  • Proto Board Holder: 80×110 mm Version

    A simple holder for 80×110 mm prototyping boards:

    Random LED Dots - circuit board
    Random LED Dots – circuit board

    It’s similar to the holder for the LED current controller board, minus the center screws, plus nicely rounded corners and a cutout for wires emerging from underneath:

    Proto board holder
    Proto board holder

    Slic3r’s Hilbert Curve infill definitely looks better than the usual straight-line pattern:

    Circuit Board Holder - Slic3r preview
    Circuit Board Holder – Slic3r preview

    The OpenSCAD source code:

    // Test support frame for Hall Effect LED Blinky Light
    // Ed Nisley KE4ZNU - Sept 2013
    
    Layout = "Fancy";				// Fancy Plain
    
    PlainColor = "LightBlue";
    
    ClampFlange = true;
    
    //- 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;
    
    //- Screw sizes
    
    inch = 25.4;
    
    Tap4_40 = 0.089 * inch;
    Clear4_40 = 0.110 * inch;
    Head4_40 = 0.211 * inch;
    Head4_40Thick = 0.065 * inch;
    Nut4_40Dia = 0.228 * inch;
    Nut4_40Thick = 0.086 * inch;
    Washer4_40OD = 0.270 * inch;
    Washer4_40ID = 0.123 * inch;
    
    //- PCB sizes
    
    PCBSize = [110.0,80.0,1.5];
    PCBShelf = 2.0;
    
    Clearance = 2*[ThreadWidth,ThreadWidth,0];
    
    WallThick = IntegerMultiple(5.0,ThreadWidth);
    FrameHeight = 8.0;
    
    ScrewOffset = 0.0 + Clear4_40/2;
    
    OAHeight = FrameHeight + Clearance[2] + PCBSize[2];
    
    FlangeExtension = 5.0;
    FlangeThick = IntegerMultiple(2.0,ThreadThick);
    Flange = PCBSize
    			+ 2*[ScrewOffset,ScrewOffset,0]
    			+ 2*[Washer4_40OD,Washer4_40OD,0]
    			+ [2*FlangeExtension,2*FlangeExtension,(FlangeThick - PCBSize[2])]
    			;
    
    echo("Flange: ",Flange);
    NumSides = 4*5;
    
    WireChannel = [Flange[0],15.0,3.0 + PCBSize[2]];
    WireChannelOffset = [Flange[0]/2,25.0,( + FrameHeight + PCBSize[2] - WireChannel[2]/2)];
    
    //- Adjust hole diameter to make the size come out right
    
    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);
    }
    
    //- Put peg grid on build surface
    
    module ShowPegGrid(Space = 10.0,Size = 1.0) {
    
      RangeX = floor(100 / Space);
      RangeY = floor(125 / Space);
    
    	for (x=[-RangeX:RangeX])
    	  for (y=[-RangeY:RangeY])
    		translate([x*Space,y*Space,Size/2])
    		  %cube(Size,center=true);
    
    }
    
    //- Build it
    
    ShowPegGrid();
    
    difference() {
    	union() {									// body block and screw bosses
    		translate([0,0,OAHeight/2])
    			color(PlainColor)
    			cube(PCBSize + Clearance + [2*WallThick,2*WallThick,FrameHeight],center=true);
    		for (x=[-1,1], y=[-1,1]) {
    			translate([x*(PCBSize[0]/2 + ScrewOffset),
    						y*(PCBSize[1]/2 + ScrewOffset),
    						0])
    				color((Layout == "Fancy") ? "Orchid" : PlainColor)
    				cylinder(r=Washer4_40OD,h=OAHeight,$fn=NumSides);
    		}
    		if (ClampFlange)
    			color((Layout == "Fancy") ? "SeaGreen" : PlainColor)
    			linear_extrude(height=Flange[2])
    				hull()
    					for (i=[-1,1], j=[-1,1]) {
    						translate([i*(Flange[0]/2 - Washer4_40OD/2),j*(Flange[1]/2 - Washer4_40OD/2)])
    							circle(d=Washer4_40OD,$fn=NumSides);
    					}
    	}
    
    	for (x=[-1,1], y=[-1,1]) {				// screw holes and washer recesses
    		translate([x*(PCBSize[0]/2 + ScrewOffset),
    					y*(PCBSize[1]/2 + ScrewOffset),
    					-Protrusion])
    			rotate((x-1)*90)
    			PolyCyl(Tap4_40,(OAHeight + 2*Protrusion));
    		translate([x*(PCBSize[0]/2 + ScrewOffset),
    					y*(PCBSize[1]/2 + ScrewOffset),
    					OAHeight - PCBSize[2]])
    			PolyCyl(1.2*Washer4_40OD,(PCBSize[2] + Protrusion),NumSides);
    	}
    
    	translate([0,0,OAHeight/2])					// through hole below PCB
    		cube(PCBSize - 2*[PCBShelf,PCBShelf,0] + [0,0,2*OAHeight],center=true);
    
    	translate([0,0,(OAHeight - (PCBSize[2] + Clearance[2])/2 + Protrusion/2)])	// PCB pocket on top
    		cube(PCBSize + Clearance + [0,0,Protrusion],center=true);
    
    	translate(WireChannelOffset)									// clearance for cable on solder side
    		cube(WireChannel + [0,0,Protrusion],center=true);
    }
    
  • Tour Easy: New Front Fork

    A view from the wheel side shows the crack in my Tour Easy’s fork lug had opened a bit more to the rear, which is about what you’d expect from the forces involved:

    Tour Easy - cracked fork lug
    Tour Easy – cracked fork lug

    Removing the handlebar stem from the fork steerer tube requires removing the fairing, its mounting brackets, the fender, a speed sensor, then snipping cable ties to release all the cables and wires. Minus the prep work, removing the fork from the bike isn’t anything special.

    The lower bearing (a YST 8311N in black) has rollers, not balls. The headset has J.I.S. 1 inch dimensions, captured in a screen grab to forestall link rot:

    YST 8311N headset data
    YST 8311N headset data

    Which means cheap & readily available ISO standard headsets aren’t a drop-in replacement. The incomparable Harris Cyclery has J.I.S. ball-bearing headsets in stock and their Tange Levin CDS HD1002 needs just 1.6 mm of additional washer to match the YST’s 35 mm stack height…

    The front side of the crown got rather graunched over the last 14 years, but I punted the problem by rotating the race half a turn to put the eroded spots toward the rear, where they’ll be under minimal stress:

    Tour Easy crown bearing - damage
    Tour Easy crown bearing – damage

    Re-seating the race brought an ancient Headsetter tool from the drawer:

    Tour Easy fork with Headsetter
    Tour Easy fork with Headsetter

    It’s basically galvanized pipe, chamfered on one end, with a set of nuts & washers on a length of all-thread rod just slightly too short for the occasion: this might be the second time I’ve used the thing and I had to supply my own all-thread & nuts. Ah, well, it probably predates the Tour Easy’s design by a decade.

    The lower headset race looked to be in pretty good shape, so I left it alone. Normally, such bearing damage gives you indexed steering, but Tour Easy handlebars provide so much lever arm that nothing interferes with the bike’s steering.

    The new fork didn’t have a notch for the keyed washer isolating the locknut from the upper bearing race. The usual advice is to file off the key and apply threadlocker, which makes adjusting the two nuts tedious, so I restored the notch in the steerer threads:

    Tour Easy - filed steerer tube key slot
    Tour Easy – filed steerer tube key slot

    Yes, that’s a lethally sharp steel shaving from the not-very-well-reamed ID curling up in the middle of the notch.

    The fender mount bridge on the new fork sits half an inch higher in relation to the brake bosses, putting the fender against the V-brake cable hardware.  Anything touching the V-brake messes up the pad-to-rim alignment, so I conjured a snippet of aluminum to lower the fender just enough to clear the brakes:

    Tour Easy - new fork - fender extender
    Tour Easy – new fork – fender extender

    I think that calls for a nice 3D printed bracket, too, but the snippet got me back on the bike faster. When I preemptively replace the fork on Mary’s bike, then I’ll do a proper bracket for both of us.

    The garish red silicone tape replaces the previous black cable ties. It matches the tube paint surprisingly well and doesn’t look good on the fork, so I’ll replace it with cable ties in due course.

    A few miles of shakedown riding settled the crown race against the fork, another 1/6 turn of the upper race / lock nut snugged up the bearings, and it’s all good again.

    Wow, it’s great to be back on the bike!

    (Due to the vagaries of writing this stuff up ahead of time, there’s actually two weeks of realtime between the post that appeared on Monday and this one.)

  • Kenmore 158: Largest Spool Holder, Now With Eye Protection

    A tip o’ the cycling helmet to Mike for catching this oversight:

    Large spool holder - added bead and guide
    Large spool holder – added bead and guide

    I’d rounded the end of that steel rod, it stands behind the sewing machine, and blah blah blah. He was right: it needed a bead. That’s a fancy one pilfered from our Larval Engineer’s stash, held in place by a blob of fast-cure epoxy.

    Selah.

    The safety pin atop the bobbin on the left spool pin feeds the thread into the machine’s upper thread guide at the proper angle to make it all work; a direct line from the spool holder hook isn’t quite right.

  • Tour Easy: Cracked Fork!

    The fairing on my Tour Easy started making unusually loud booming sounds while we were out on an errand, so when we got home I poked around the front end to see what had worked itself loose. I finally managed to produce the sound, which turned out to be due to a very small motion in the fork:

    Cracked Tour Easy Fork
    Cracked Tour Easy Fork

    That’s after 14 years and maybe 30,000 miles, so I’d say it did pretty well, all things considered.

    On an upright bike a front fork failure kills you: the broken blade rotates forward, jams into the ground, and flips you over the handlebars. I rode about 8 miles with a broken fork and nothing exciting happened.

    The Tour Easy’s design dates back to the mid-1970s, when custom bike parts weren’t readily available, and the front fork seems sized for 26 inch tires. A tubular bridge welded across just over the 20 inch (37-406) tire provides a fender mount, stiffens the blades, and, in my case, acts as a second bridge. On my bike, the fork supports the polycarbonate fairing and the Phil Wood hub provides an absolutely rigid connection between the blade dropouts.

    For reference, the headset uses J.I.S 1 inch dimensions, with a 27.0 mm ID crown bearing. The stack height runs around 35 mm, but I don’t know the head tube ID.

    A pair of forks are on their way; I’ll replace the one on Mary’s bike before it fails…

     

  • Always Sign Your Work

    Quite some years ago, I added a wire shelf to the bottom of the “pantry” closet to hold odds-and-ends. The most recent deep-cleaning cycle required removing the shelf, which required removing the mounting brackets to get the fool thing out of the closet.

    The backside of one bracket shows I had a bit of trouble matching the mounting holes to the wall anchors:

    Pantry wire shelf brackets - overview
    Pantry wire shelf brackets – overview

    The lower bracket bears some advice from my Shop Assistant:

    Pantry wire shelf brackets - detail
    Pantry wire shelf brackets – detail

    Check thrice
    Measure twice
    Cut once

    From what little we hear these days, she’s learned the value of always checking her work…

    And she signs it, too.