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.

Author: Ed

  • Humanoid Finger

    Just for fun, I printed out Anthromod’s Kickstarter Hand finger:

    Anthromod Finger - parts on M2 platform
    Anthromod Finger – parts on M2 platform

    If I were doing it, I’d add 1.75 mm alignment holes in each part, but clamping each phalange in both directions came out close enough:

    Anthromod Finger - clamping
    Anthromod Finger – clamping

    The tolerances were a bit tight and it required some trimming before all the joints flexed freely. I used short segments of 3 mm orange filament for the knuckle hinges and heat-staked the ends, rather than having to trim a trio of 3 mm screws:

    Anthromod Finger - detail
    Anthromod Finger – detail

    After making three short rubber bands by tying and trimming loops from a longer band, the finger curled up just like yours:

    Anthromod Finger - curled
    Anthromod Finger – curled

    The overall quality isn’t as good as I’d like: there’s a bit of uplift on the edges and corners. If I print another one, I want to try less than 0.2 infill and less cooling.

     

  • Monster in the Mist

    We biked to Saugerties for the Hudson Valley Garlic Festival and spotted this monster looming in the morning mist during the ride home:

    Excavator on CSX gondola car - side
    Excavator on CSX gondola car – side

    The end view shows it’s not an optical illusion:

    Excavator on CSX gondola car - end
    Excavator on CSX gondola car – end

    Some Google Maps fiddling reveals the plant, with the excavator atop the first car on the siding, down in the lower-left corner of the image:

    Google Maps - Kings Highway at Tissal Rd
    Google Maps – Kings Highway at Tissal Rd

    A zoomed view, rotated a quarter-turn CCW so it’s not quite so vertiginous:

    Google Maps - Kings Highway at Tissal Rd - detail
    Google Maps – Kings Highway at Tissal Rd – detail

    My search-fu isn’t strong enough to uncover the plant’s name. They’ve obviously been doing something involving gravel and either asphalt or concrete for many years, so it’s not a prank…

  • Getting More Clearance While Bicycling: Fluids Division

    Based on recent experience, this “Baby, Think It Over” rig works even better than a propane tank:

    Tour Easy BOB Yak - Gasoline can
    Tour Easy BOB Yak – Gasoline can

    I was going to take a picture with it posed next to the gas pump, but the whole affair isn’t all that stable: it’s tough to look cool when your fancy faired Tour Easy ‘bent flops over like dead possum…

  • Sonicare Essence: Re-taping the Case

    Much to my astonishment, the ordinary adhesive tape holding the Sonicare Essence power toothbrush together lasted for a bit over a year. As the tape splits along the gap in the case, the coil driving the brush head begins vibrating inside its nest, making a truly horrendous racket.

    The new fix looks a bit odd, but works fine:

    Sonicare Essence - red tape
    Sonicare Essence – red tape

    The tape comes from Mad Phil’s stash and is, I think, splicing tape for reel-to-reel 1/4 inch recording tape: it has zero stretch, infinite strength, and adhesive that’s obviously lasted forever. The inside of the spool says “NOPI Made in Germany”, which doesn’t lead anywhere useful, although the NOPI name does seem to appear in a tape context.

    After a year, the replacement NiMH cells are doing fine, still operating about once a day for three weeks from a 24 hour charge.

  • Arduino Suicide Power Switch: First Light

    This may not look like much, but it’s the first test of the p-MOSFET power switch that completely kills power to the Arduino Pro Mini board and the Hall Effect LED Blinky Light:

    Power off - 30 mA load
    Power off – 30 mA load

    The top trace is the base drive to the NPN transistor that holds the p-MOSFET on while the Arduino is running. When it’s time to shut off, the Arduino drops the base drive output, the MOSFET turns off, and the switched battery voltage in the bottom trace drops like a rock. The current is about 30 mA when the Arduino is running and immeasurably low when it’s off; the MOSFET spec says it’s less than 1 μA, which is fine with me.

    I love it when reality matches the simulation.

    That part of the schematic:

    Hall Effect LED Blinky - Battery Switching
    Hall Effect LED Blinky – Battery Switching

    The PCB has those components clustered in the upper left corner, with the Arduino Pro Mini perched on header pins to the right:

    Hall LED PCB - power switch test
    Hall LED PCB – power switch test

    The test code is a crudely hacked version of the canonical Blink sketch that waits 5 s after it starts running, then pulls the plug:

    // Modified from Arduino Blink example
    // Drives external p-MOSFET power switch
    // Ed Nisley - KE4ZNU - Sep 2013
    
    int led = 13;
    
    // HIGH to enable power supply
    int PowerOn = 4;
    
    // HIGH to light Status LED
    int Status = 10;
    
    unsigned long MillisThen;
    
    void setup() {
    
      pinMode(led, OUTPUT);
    
      pinMode(PowerOn,OUTPUT);
      digitalWrite(PowerOn,HIGH);
      pinMode(Status,OUTPUT);
      digitalWrite(Status,HIGH);
    
    MillisThen = millis();
    }
    
    void loop() {
      digitalWrite(led, HIGH);
      delay(100);
      digitalWrite(led, LOW);
      delay(500);
    
      if (((millis() - MillisThen) > 5000ul)) {
          digitalWrite(Status,LOW);
          delay(50);
          digitalWrite(PowerOn,LOW);
          digitalWrite(Status,HIGH);
      }
    }
    

    It turns out that the Arduino runtime has a several-second delay after power comes up before the setup() routine starts running, so brief pulses from a vibration switch won’t last long enough to turn the thing on. That’s not a fatal flaw for now and, in fact, having to hold the power button in for a few seconds isn’t entirely a Bad Thing.

    However, once the power turns on, a vibration switch could trigger an Arduino interrupt pin to reset a power-off timer. I’d be tempted to put the vibration switch in parallel with the button, with a pair of steering diodes that isolate the raw battery from the input pin.

    This is, of course, a pure electronic implementation of a Useless Machine…

  • 3D Printed PCB Stiffening Bracket

    The brassboard PCB for the Hall effect blinky light is too bendy for the SMD parts to survive much debugging, particularly with all the wires hanging off the edges, so I whipped up a stiff mounting bracket that captures the whole thing, with a flange that fits in the work stand arms:

    PCB Test Frame - solid model
    PCB Test Frame – solid model

    I ran some self-tapping 4-40 hex-head screws into the holes while the plastic was still warm on the M2’s platform:

    PCB stiffener with screws on M2 platform
    PCB stiffener with screws on M2 platform

    Six screws seem excessive and I’ll probably wind up using just the middle two, but there’s no harm in having more holes and fittings than you really need.

    The flange fits neatly into the board holder on the Electronics Workbench, above all the construction clutter:

    PCB stiffener in board holder
    PCB stiffener in board holder

    The nice thing about having a 3D printer: when you need an object like this, a couple of hours later you have one!

    The OpenSCAD source code, slightly improved based the results you see above:

    // Test support frame for Hall Effect LED Blinky Light
    // Ed Nisley KE4ZNU - Sept 2013
    
    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 = [46.5,84.0,1.0];
    PCBShelf = 2.0;
    
    Clearance = 4*[ThreadWidth,ThreadWidth,0];
    
    WallThick = IntegerMultiple(4.0,ThreadWidth);
    FrameHeight = 5.0;
    
    ScrewOffset = 0.0 + Clear4_40/2;
    
    OAHeight = FrameHeight + Clearance[2] + PCBSize[2];
    
    FlangeExtension = 3.0;
    FlangeThick = IntegerMultiple(1.5,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;
    
    //- 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("LightBlue")
    			cube(PCBSize + Clearance + [2*WallThick,2*WallThick,FrameHeight],center=true);
    		for (x=[-1,1], y=[-1,0,1]) {
    			translate([x*(PCBSize[0]/2 + ScrewOffset),
    						y*(PCBSize[1]/2 + ScrewOffset),
    						0])
    				color("Orchid") cylinder(r=Washer4_40OD,h=OAHeight,$fn=NumSides);
    		}
    		if (ClampFlange)
    			translate([0,0,Flange[2]/2])
    			color("SeaGreen") cube(Flange,center=true);
    	}
    
    	for (x=[-1,1], y=[-1,0,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);
    }
    
  • Monthly Science: Silica Gel Status Report

    The last of the silica gel from one bulk can went into a mesh bag:

    Silica gel beads in mesh bag
    Silica gel beads in mesh bag

    That kept a batch of fresh-baked crackers crisp during several humid days. It started out at 110 g net = 112 g gross (with bag and ties), rose to 115 g after a day, then to 117 g by the time we were done with the crackers. That’s about 5 g of water = 4.5% by weight, so those charts say the humidity should be under 10 %RH, which agrees with the fading blue dot on the humidity indicator card I dropped in the can.

    When the bag gets up to 130 g = 30 %RH, then it’ll be time for a recharge… or, more likely, a refill from one of the remaining three cans.