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

  • Sandisk 32 GB Flash Drive: Now With String!

    So I drill two holes in the dust caps of those teensy Sandisk drives and added a cheerful red string:

    Sandisk 32 GB Flash Drive - cap string
    Sandisk 32 GB Flash Drive – cap string

    That this should not be necessary goes without saying…

  • Kenmore Dishwasher Sound Deadening Sheets: Slip Sliding Away, Redux

    The springs balancing the dishwasher door started twanging again, which I now know is the diagnostic sign that an asphalt sound deadening sheet has slipped off the tub. A sheet on the right side almost perpetrated a clean escape, but the flap drooping over the spring gave it away:

    Dishwasher sound deadener - slipped away
    Dishwasher sound deadener – slipped away

    Another sheet on the left side was inching away, but hadn’t quite gotten over the fence:

    Dishwasher sound deadener - slipping away
    Dishwasher sound deadener – slipping away

    They’re pretty much a rigid solid at room temperature:

    Dishwasher sound deadener - wrinkled asphalt sheet
    Dishwasher sound deadener – wrinkled asphalt sheet

    It puts one in mind of the pitch drop experiments now running in various labs. In this case, we now know it takes about four years for an asphalt sheet to slide completely off the tub; those two sheets were definitely in place when I buttoned it up after the previous one broke free.

    I applied a heat gun to soften the sheets, then smoothed them around the tub again. This time I applied long strips of Gorilla Tape from one side to the other, rather than short strips of ordinary duct tape along the edges, and maybe this fix will outlast either the dishwasher or our tenure here, whichever comes first…

  • Planetary Gear Bearing: Now With Knurling!

    OK, I couldn’t resist. Tweaking a few lines of code wrapped a knurl around emmitt’s Gear Bearing for enhanced griptivity:

    Knurled vs original Planetary Gear Bearing
    Knurled vs original Planetary Gear Bearing

    That image has desaturated red to suppress the camera’s red burnout. It looks better in the realm of pure math:

    Planetary Gear Bearing - Kurled - solid model
    Planetary Gear Bearing – Kurled – solid model

    Reducing the tolerance parameter to 0.4 produced a surprisingly rigid, yet freely turning, bearing that required no cleanup: it popped off the plate ready to roll!

    The heavy lifting in the OpenSCAD source code remains emmitt’s work. I replaced the outer cylinder with a knurl and simplified his monogram to stand out better amid the diamonds. This is the affected section:

    ... snippage ...
    translate([0,0,T/2]){
    	difference(){
    //		cylinder(r=D/2,h=T,center=true,$fn=100);
    		render(convexity=10)
    		translate([0,0,-T/2])
    			knurl(k_cyl_hg=T,
    			k_cyl_od=D,
    			knurl_wd=5.0,
    			knurl_hg=5.0,
    			knurl_dp=0.5,
    			e_smooth=5.0/2);
    		herringbone(nr,pitch,P,DR,-tol,helix_angle,T+0.2);
    //		difference(){
    			translate([0,-(D/2+4.5),0])rotate([90,0,0])monogram(h=10);
    //			cylinder(r=D/2-0.25,h=T+2,center=true,$fn=100);
    //		}
    	}
    	rotate([0,0,(np+1)*180/ns+phi*(ns+np)*2/ns])
    	difference(){
    		mirror([0,1,0])
    			herringbone(ns,pitch,P,DR,tol,helix_angle,T);
    		cylinder(r=w/sqrt(3),h=T+1,center=true,$fn=6);
    	}
    	for(i=[1:m])rotate([0,0,i*360/m+phi])translate([pitchD/2*(ns+np)/nr,0,0])
    		rotate([0,0,i*ns/m*360/np-phi*(ns+np)/np-phi])
    			render(convexity=10)
    			herringbone(np,pitch,P,DR,tol,helix_angle,T);
    }
    

    I also added a few render(convexity=n) operations to improve the preview, but that’s just cosmetic.

  • Bell Helmet Visor Mount Tabs

    Santa delivered a pair of helmets that will require mirror mounts and a mic boom before the spring riding season kicks in. The visor has tabs that snap into sockets on each side of the helmet:

    Bell Helmet Visor Mount - socket
    Bell Helmet Visor Mount – socket

    It occurred to me that I could make an interposer between the helmet and the visor that could anchor the mic boom, with a tab for the helmet and a socket of some sort for the visor. While that’s still on the to-do list, the tab looks like this:

    Bell Helmet Visor Mount
    Bell Helmet Visor Mount

    Those are 1 mm cubes on 10 mm centers, so this is a teeny little thing.

    I don’t have a good idea for the corresponding socket, because those little grippers seem much too small for 3D printing, but now I have some tabs to play with:

    Bell Helmet Visor Mount - OEM vs 3D Printed
    Bell Helmet Visor Mount – OEM vs 3D Printed

    The OpenSCAD source code puts the tab atop an oval base plate, but it’ll eventually stick out of the boom mount:

    // Bell Helmet Visor Mount
    // Ed Nisley KE4ZNU
    // December 2013
    
    // Layout options
    
    Layout = "Build";			// Build Show
    
    //-----
    // Extrusion parameters must match reality!
    
    ThreadThick = 0.20;
    ThreadWidth = 0.4;
    
    HoleWindage = 0.2;
    
    //-- Handy stuff
    
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    
    Protrusion = 0.1;			// make holes end cleanly
    
    inch = 25.4;
    
    //----------------------
    // Dimensions
    
    //----------------------
    // 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);
    }
    
    //- 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);
    
    }
    
    //-------------------
    // Shapes
    
    TabBaseLength = 17.0;
    TabTopLength = 15.5;
    
    TabWidth = 4.00;
    TabHeight = 5.5;
    TabEmbed = 0.5;
    TabTaperHeight = 3.70;
    TabBaseHeight = TabHeight - TabTaperHeight;
    
    LatchBar = 2.25;					// square cross section
    WebIndent = 1.60;					// from outside edge of post
    WebThick = TabWidth - 2*WebIndent;
    LatchIndentTall = TabHeight - LatchBar;
    
    PostLength = 5.00;
    PostTaper = 1.25;
    LatchIndentLength = TabBaseLength - 2*(PostLength + PostTaper);
    
    module BellLatch() {
    
    	difference() {
    		intersection() {
    			translate([0,TabWidth/2,0]) rotate([90,0,0])				// side view
    			linear_extrude(height=TabWidth)
    				polygon(points=[
    					[-TabBaseLength/2,-TabEmbed],[-TabBaseLength/2,TabBaseHeight],[-TabTopLength/2,TabHeight],
    					[TabTopLength/2,TabHeight],[TabBaseLength/2,TabBaseHeight],[TabBaseLength/2,-TabEmbed]
    				]);
    
    			translate([0,0,-TabEmbed])
    			linear_extrude(height=(TabHeight + TabEmbed),convexity=3)				// top view
    				polygon(points=[
    					[-TabBaseLength/2,-TabWidth/2],
    					[-TabBaseLength/2, TabWidth/2],
    					[-(TabBaseLength/2 - PostLength), TabWidth/2],
    					[-(TabBaseLength/2 - PostLength - PostTaper),LatchBar/2],
    					[ (TabBaseLength/2 - PostLength - PostTaper),LatchBar/2],
    					[ (TabBaseLength/2 - PostLength),TabWidth/2],
    					[ TabBaseLength/2, TabWidth/2],
    					[ TabBaseLength/2,-TabWidth/2],
    					[ (TabBaseLength/2 - PostLength),-TabWidth/2],
    					[ (TabBaseLength/2 - PostLength - PostTaper),-LatchBar/2],
    					[-(TabBaseLength/2 - PostLength - PostTaper),-LatchBar/2],
    					[-(TabBaseLength/2 - PostLength),-TabWidth/2]
    				]);
    		}
    		for (y=[-1,1])
    		translate([0,y*((TabWidth/2 + WebThick/2)),LatchIndentTall/2])
    			cube([LatchIndentLength,TabWidth,LatchIndentTall],center=true);
    	}
    
    /*	difference() {
    		translate([0,0,TabHeight/2])
    		cube([TabLength,TabWidth,TabHeight],center=true);
    	}
    */
    }
    
    //-------------------
    // Build things...
    
    ShowPegGrid();
    
    if (Layout == "Show")
    	BellLatch();
    
    if (Layout == "Build") {
    	translate([0,0,2.0])
    		BellLatch();
    	difference() {
    		resize([20.0,10.5,2.0])
    			cylinder(r=2,h=2,$fn=32);
    		for (x=[-1,1])
    			translate([x*(5/2 + TabBaseLength/2 + 0.5),0,5+0.6])
    				cube([5,25,10],center=true);
    	}
    
    }
    
  • Blog Summary: 2013

    I should give up on the tech and write about, oh, kittens…

    Blog summary - YE 2013
    Blog summary – YE 2013

    If I knew anything about the Raspberry Pi’s PWM, writing about it might displace that Arduino PWM post from the top spot…

    And, once again, the fifth most popular post documents my struggle to remove a water heater anode rod. That says something, but I’m not sure what.

    The Christmas post from 2011 featuring the snow-covered pine tree evidently comes up near the top of everybody’s image search; I wonder how many homebrew Christmas cards feature it?

    Onward, into the new year…

  • Verifying a 32 GB USB Flash Memory Drive

    This resembles the 32 GB Micro SD card checkout, with the exception that, for some unknown reason, the available space doesn’t match up with the actual space occupied by the file. It also turns out that rsync deletes the incomplete file, rather than leaving a stub, which makes perfect sense, but was still a bit disappointing after two hours.

    I had two identical Sandisk Cruzer Fit Flash Drives, one of which appears here:

    32 GB Sandisk USB Flash Drive
    32 GB Sandisk USB Flash Drive

    Those squares are an inch on a side, so it’s a bit larger than the Micro SD card. Adding a lanyard loop on the plastic cap or a string between cap and drive seems like a great idea, because that little thing is certain to get lost.

    The snippets here represent a compendium of Things Done that happened over the course of two days; I didn’t save all the logs. The process started with the same 32 GB file of entropy I used for the Micro SD card:

    df -B1 /mnt/part2
    Filesystem       1B-blocks      Used   Available Use% Mounted on
    /dev/sdc1      31512350720 180424704 31331926016   1% /mnt/part2
    -----------------------
    time rsync --progress /mnt/part/Testdata/Testdata.bin /mnt/part2
    Testdata.bin
     31298191360  99%   14.18kB/s    0:39:38
    rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
    rsync: write failed on "/mnt/part2/Testdata.bin": No space left on device (28)
    rsync error: error in file IO (code 11) at receiver.c(322) [receiver=3.0.9]
    rsync: connection unexpectedly closed (28 bytes received so far) [sender]
    rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
    
    real	126m20.505s
    user	3m6.393s
    sys	2m17.492s
    -----------------------
    time dd bs=8K count=20000000 if=/mnt/part/Testdata/Testdata.bin of=/mnt/part2/Test1.bin
    dd: writing ‘/mnt/part2/Test1.bin’: No space left on device
    3820963+0 records in
    3820962+0 records out
    31301320704 bytes (31 GB) copied, 7455.97 s, 4.2 MB/s
    
    real	124m15.970s
    user	0m1.607s
    sys	1m17.546s
    -----------------------
    truncate -s 31301320704 /mnt/part/Testdata/Testdata.bin
    -----------------------
    ll /mnt/part/Testdata/Testdata.bin
    -rw-r--r-- 1 ed ed 31301320704 Dec 24 18:13 /mnt/part/Testdata/Testdata.bin
    -----------------------
    time diff /mnt/part/Testdata/Testdata.bin /mnt/part3/Test1.bin 
    
    real	26m37.081s
    user	0m4.400s
    sys	0m52.723s
    

    Notice that the write speed runs around 4 MB/s, which is a lot slower than you might expect from a USB 2.0 device; as with a hard drive, the interface doesn’t limit the throughput! The read speed, on the other paw, trots along at about 20 MB/s.

    One of these will go to Mary’s folks as an online daily backup device; their PC will soon run a version of the rsnapshot scripts that back up our basement file server. It’s not off-site backup and it’s not proof against catastrophic hardware failure, but it should be good enough.

  • Planetary Gear Bearing

    Most of the things I design don’t have moving parts, so I printed emmitt’s Gear Bearing as a fondletoy:

    Planetary Gear Bearing
    Planetary Gear Bearing

    Setting the clearance to 0.5 produced a free fit with absolutely no cleanup or run-in required; the center hole is a sliding fit for a 6 mm hex wrench.

    I should do another one with knurling around the outside…

    The picture has strongly desaturated reds, which reveals the top surface a bit more clearly.