Power Outage

Just before Tropical Storm Isaias rolled through, my hygrometer reached a new high:

Pre-Isaias humidity
Pre-Isaias humidity

The National Weather Service reported 99% at the airport a few miles away, so the meter’s calibration seems about right.

Shortly thereafter, the humidity dropped to the mid-70s as the wind picked up and, over the next few hours, falling branches took out vast swaths of Central Hudson’s electrical infrastructure. My little generator saved our refrigerator & freezer during 15 hours of outage; three days later, thousands of folks around us still have no power.

A confluence of other events, none nearly so dramatic, will throttle my posting over the next two weeks.

We’re OK and hope you’re OK, too …

Rt 376 at Zach’s Way: Near Right Hook

We exchanged waves as he rode by Vassar Farms:

Rt 376 SB Marker 1124 Zachs Way - Near Right Hook - 2020-07-19 - 0
Rt 376 SB Marker 1124 Zachs Way – Near Right Hook – 2020-07-19 – 0

Although I can rarely hang with real roadies, I can put the fear in ’em for a while, so the chase is on.

About 25 seconds later, I’m southbound on Rt 376, accelerating past 20 mph = 30 feet/s. The overtaking pickup, which I haven’t noticed yet, is signaling a right turn at Zach’s Way, 350 feet ahead:

Rt 376 SB Marker 1124 Zachs Way - Near Right Hook - 2020-07-19 - 1
Rt 376 SB Marker 1124 Zachs Way – Near Right Hook – 2020-07-19 – 1

The pickup enters my field of view, but I can’t see the turn signals:

Rt 376 SB Marker 1124 Zachs Way - Near Right Hook - 2020-07-19 - 2
Rt 376 SB Marker 1124 Zachs Way – Near Right Hook – 2020-07-19 – 2

Two seconds later, the driver is braking:

Rt 376 SB Marker 1124 Zachs Way - Near Right Hook - 2020-07-19 - 3
Rt 376 SB Marker 1124 Zachs Way – Near Right Hook – 2020-07-19 – 3

During the next three seconds, the driver realizes I’m going much much faster than your usual cyclist and is braking hard:

Rt 376 SB Marker 1124 Zachs Way - Near Right Hook - 2020-07-19 - 4
Rt 376 SB Marker 1124 Zachs Way – Near Right Hook – 2020-07-19 – 4

My startled shout (“Don’t even think about it!“) may be misinterpreted, but I try to be friendly,

Rt 376 SB Marker 1124 Zachs Way - Near Right Hook - 2020-07-19 - 5
Rt 376 SB Marker 1124 Zachs Way – Near Right Hook – 2020-07-19 – 5

Alas, the cyclist turned into Boardman Road and all that adrenaline went to waste.

Elapsed time since the fender appeared: six seconds.

EonSmoke Vape Debris

Being the type of guy who uses metal bits & pieces, I thought this might be a useful aluminum rod:

EonSmoke vape stick
EonSmoke vape stick

It turns out to be an aluminum tube holding a lithium cell and a reservoir of oily brown juice:

EonSmoke - peeled open
EonSmoke – peeled open

The black plastic cap read “EonSmoke”, which led to a defunct website at the obvious URL. Apparently, EonSmoke went toes-up earlier this year after ten years of poisoning their customers, most likely due to “competitor litigation”.

The black cap held what looks like a pressure switch:

EonSmoke - switch
EonSmoke – switch

Suck on the icky end of the tube to activate the switch, pull air past the battery (?), pick up some toxic vapor around the heater, and carry it into your lungs:

EonSmoke - reservoir heater
EonSmoke – reservoir heater

Maybe there’s a missing mouthpiece letting you suck on the icky end, activate the switch, pull vapor through the heater, and plate your lungs with toxic compounds. I admit certain aspects of my education have been sadly neglected.

The lithium cell was down to 1.0 V, with no overdischarge protection and no provision for charging, so it’s a single-use item. I’m sure the instructions tell you to recycle the lithium cell according to local and state regulations, not toss it out the window of your car.

I had to wash my hands so hard

Shuttles Game: Tapered Pegs

As is all too common with 3D printed replacement parts done remotely, the first Shuttles game pegs didn’t quite fit into the game board’s holes. Fortunately, living in the future means rapid prototyping and quick turnaround:

Shuttles Game pegs - tapered - solid model
Shuttles Game pegs – tapered – solid model

They’re slightly smaller, tapered toward the bottom, and take slightly less time to print.

The OpenSCAD code in the GitHub Gist now has has the tweaks.

Finding & Copying Only The New Music Files

Given a collection of music files in various subdirectories, find all the mp3 files that aren’t in the target directory and copy them. The only catch: don’t use rsync, because the target directory is on a Google Pixel phone filesystem which doesn’t support various attributes required by rsync.

The solution goes like this:

cd /mnt/music/Netlabel Mixes
sudo jmtpfs /mnt/pixel -o allow_other,fsname="Pixel"
find . -name \*mp3 -execdir test ! -e  /mnt/pixel/Internal\ shared\ storage/Music/Netlabel/\{\} \; -execdir cp -v -t /mnt/pixel/Internal\ shared\ storage/Music/Netlabel/ \{\} \;
sudo umount /mnt/pixel

The trick is remembering the second execdir operation in find happens only if the first succeeds, so the cp runs when the target file doesn’t exist.

All the backslash escaping gets tedious, but it’s the least awful way to get the job done when the directories contain blanks, which is true for the default directory structure inside the Pixel.

Your choice in music will surely be different …

Extruder Clog

The test pieces for the Mesh Screen Frame came out a bit short:

Extruder Clog - failed print
Extruder Clog – failed print

Which turned out to be the M2’s first extruder clog in a long, long time. The printer shut down normally, with no error messages, and the objects look fine as far as they go, making the diagnosis fairly simple.

Just to be sure, I verified:

It’s worth noting I use only PETG plastic from a single supplier, so Slic3r uses set-and-forget temperature and speed values, and I manually change colors only on those rare occasions when color matters. Most clogs occur after switching from a higher- to a lower-temperature plastic (PETG to PLA), where a chunk of soft-but-not-molten plastic jams in the nozzle; not the situation here.

Unscrew the clamp screw enough to release the spring pressure on the idler bearing:

Makergear M2 - spring-loaded filament drive
Makergear M2 – spring-loaded filament drive

Undo the various screws holding the block to the drive gear housing and pull it off. The drive block looked fine, with a clear round hole along the entire filament path, so that’s not the problem.

The filament snippet sticking up out of the hot end also looked fine, apart from the expected drive gear gouge, with nice serrations below that point into the hot end. It’s the third filament from the top in this group photo:

Extruder Clog - filament snippets
Extruder Clog – filament snippets

Although it’s called a “cold pull“, you can’t yank a solid hunk of plastic out of the hot end. Warming the PETG to around 200 °C and pulling the snippet out produced the long tapered end shown above.

I rammed another snippet into the hot end to bond with whatever was inside:

Extruder Clog - PETG pull
Extruder Clog – PETG pull

Which produced the top snippet above, with no particular trouble found.

Repeating the process with some nylon (?) cleaning filament:

Extruder Clog - cleaner pull
Extruder Clog – cleaner pull

In need of more traction, I sank a #60 twist drill into the molten plastic:

Extruder Clog - drill bit insertion
Extruder Clog – drill bit insertion

Let things cool a bit, haul it out (it’s halfway in the picture above), and we’re making progress:

Extruder Clog - drill bit extraction
Extruder Clog – drill bit extraction

I warmed the PETG-encrusted bit over a butane flame, wiped it on a shop rag to get most of the plastic off, then drilled a few holes in a hardwood block.

Note that a #60 drill (40 mil = 1 mm) is much much much larger than the nozzle hole:

Extruder Clog - nozzle view
Extruder Clog – nozzle view

The vertiginous view looks downward into a small hand-held mirror.

Although some folks swear by 0.3 mm carbide drills for nozzle cleaning, I doubt I could avoid wrecking that nice round 0.35 mm hole. The new red silicone coat has chipped from around the nozzle over the last few sessions, so it’s no longer wiping the top layer.

During all this flailing, something that might have been a glass fiber emerged from the nozzle while shoving one of those PETG snippets into the hot end. Of course, when I pried it out of the goo with tweezers, it snapped away into the clutter, never to be seen again. Despite being covered in PETG, it was a rigid sliver, rather than the gooey extruded thread. Perhaps the whisker extending from the PETG surrounding the drill bit was a similar fiber, but I didn’t notice it at the time.

One of the PETG cold warm pulls contained two brownish lumps:

Extruder Clog - PETG inclusions
Extruder Clog – PETG inclusions

This chunk doesn’t appear in the group portrait. It’s obviously been melted, measures a bit under 1.75 mm diameter, and the drive gear tooth marks show it passed through the filament drive block under motor control, most likely retraction.

Passing the Xacto Knife of Inquiry through the leftmost lump split it neatly in two. The left section:

Extruder Clog - PETG inclusion - section L
Extruder Clog – PETG inclusion – section L

And the right section:

Extruder Clog - PETG inclusion - section R
Extruder Clog – PETG inclusion – section R

In person, the sections look like granular / burned residue surrounded by clear PETG. I’d expect anything burned to come from inside the hot end, but I don’t know how those lumps would get surrounded by nice, clear PETG inside a reasonably cylindrical section with drive gear notches.

Anyhow, the clog has now Gone Away™ and the M2 extrudes just fine. I’ll declare victory and move on …

Seedling Shelter Frame

Plant seedlings started in pots require some hardening off time outdoors before being transplanted. Veggie seedlings also require protection from critters regarding them as a buffet, so Mary covers them with a sheet of floating row cover, which must be both suspended over the plants to give them growing room and tucked under the tray to keep the bugs out. She asked for a frame to simplify the process:

Mesh Shelter Frame - assembled
Mesh Shelter Frame – assembled

The solid model shows the structure with no regard for proportion:

Mesh Shelter Frame - show view
Mesh Shelter Frame – show view

The 5 mm fiberglass rods come from our decommissioned six-passenger umbrella, cut to length in the Tiny Lathe™ by applying a Swiss Pattern knife file around the perimeter, over the ShopVac’s snout to catch the glass dust. I started with a pull saw (also over the vacuum) during the weekly Squidwrench v-meeting, whereupon Amber recommended either a Dremel slitting wheel or a file, so I mashed everything together and it worked wonderfully well, without producing any errant glass-fiber shards to impale my fingers.

The corners consist of three tubes stuck together at the origin:

Mesh Shelter Frame - non-hulled corner model
Mesh Shelter Frame – non-hulled corner model

Shrink-wrapping them with a hull() adds plenty of strength where it’s needed:

Mesh Shelter Frame - hulled corner model
Mesh Shelter Frame – hulled corner model

I decided putting the belly side (facing you in the picture) downward on the platform and the peak upward would distribute the distortion equally among the tubes and produce a nicely rounded outer surface for the mesh fabric:

Mesh Shelter Frame - build layout
Mesh Shelter Frame – build layout

Which led to some Wikipedia trawling to disturb the silt over my long-buried analytic geometry, plus some calculator work to help recall the process; back in the day I would have used a slipstick, but I was unwilling to go there. Although I could special-case this particular layout, the general method uses Euler’s Rotation Theorem, simplified because I need only one rotation.

Should you need concatenated rotations, you probably need quaternions, but, at this point, I don’t even remember forgetting quaternions.

Anyhow, the Euler rotation axis is the cross product of the [1,1,1] vector aimed through the middle of the corner’s belly with the [0,0,-1] target vector pointing downward toward the platform. The rotation amount is the acos() of the dot product of those two vectors divided by the product of their norms. With vector and angle in hand, dropping them into OpenSCAD’s rotate() transformation does exactly what’s needed:

rotate(acos((BaseVector*Nadir)/(norm(BaseVector)*norm(Nadir))),
       v=cross(BaseVector,Nadir))   // aim belly side downward
  Corner();

Dang, I was so happy when that worked!

Because the corner model rotates around the origin where all three tube centerlines meet, the result puts the belly below the platform, pointed downward. The next step applies a translation to haul the belly upward:

translate([ArmOAL,0,    // raise base to just below platform level
           ArmOC/sqrt(3) + (ArmRadius/cos(180/SocketSides))*cos(atan(sqrt(3)/2)) + Finagle])

This happens in a loop positioning the four corners for printing, so the first ArmOAL as the X axis parameter translates the shape far enough to let four of them coexist around the origin, as shown above.

The mess in the Z axis parameter has three terms:

  • Raise the centerline of the ends of the tubes to Z=0
  • Raise the rim of the tube to Z=0
  • Add a wee bit to make the answer come out right

The 0.18 mm Finagle constant fixes things having to do with the hull() applied to miscellaneous leftover angled-circles-as-polygons approximations and leaves just a skin below the platform to be sheared off by a huge cube below Z=0, matching the corner bellies with the bottoms of the feet.

Because the corners have awful overhangs, the results look a bit raggedy:

Mesh Shelter Frame - corner underside
Mesh Shelter Frame – corner underside

That’s after knocking off the high spots with a grubby sanding sponge and making a trial fit. They look somewhat less grotendous in person.

If we need another iteration, I’ll think hard about eliminating the overhangs by splitting the corner parallel to the belly, flipping the belly upward, and joining the pieces with a screw. What we have seems serviceable, though.

The OpenSCAD source code as a GitHub Gist: