Monthly Science: Garden Soil Temperature

The soil temperature near the base of the bird box, under a few inches of chipped leaf mulch, shows the expected trend for the growing season, but there’s a weird bump in mid-October:

Garden Soil Temperature

Garden Soil Temperature

The NWS temperature summary confirms the anomaly, with the DEP column giving the departure from the historic average:

DY MAX MIN AVG DEP
==================
 1  65  58  62   5
 2  72  58  65   9
 3  73  49  61   5
 4  65  51  58   2
 5  62  40  51  -4
 6  70  38  54  -1
 7  76  52  64  10
 8  74  52  63   9
 9  70  44  57   4
10  63  37  50  -3
11  56  44  50  -3
12  63  35  49  -3
13  63  37  50  -2
14  78  59  69  17
15  79  69  74  23
16  72  53  63  12
17  73  52  63  13
18  68  50  59   9
19  56  33  45  -5
20  61  30  46  -4
21  57  48  53   4
22  53  50  52   3
23  52  48  50   2
24  59  41  50   2
25  66  34  50   2
26  58  43  51   3
27  64  38  51   4
28  73  38  56   9
29  68  42  55   8

The precipitation record shows over an inch of rain in those four days, so that weather probably blew in from the south.

About these ads

Leave a comment

Halloween Horror: Line Voltage on the Loose!

I hauled the Kenmore 158 sewing machine and controller to a Squidwrench meeting for some current measurements (and, admittedly, showing it off) while schmoozing. After hauling it home and setting it up on my bench again, it didn’t work: the motor didn’t run at all.

While doing the usual poking around under the cover, I spotted this horrifying sight:

Loose AC line hot wire

Loose AC line hot wire

The brown insulation tells you that’s a hot wire from the AC line and, in fact, it’s coming directly from the line fuse; it’s live whenever the plug is in.

It’s a stranded wire to allow flexing without breaking, but that same flexibility allows it to squeeze its way out of a tightly fastened screw terminal. In principle, one should crimp a pin on the wire, but the only pins in my heap don’t quite fit along the screw terminal block.

This sort of thing is why I’m being rather relentless about building a grounded, steel-lined box with all the pieces firmly mounted on plastic sheets and all the loose ends tucked in. If that wire had gone much further to the side or top, it would have blown the fuse when it tapped the steel frame. The non-isolated components on that board are facing you, with those connections as far from the terminal block as they can be.

Engineers tend to be difficult to live with, because we have certain fixed ways of doing things that are not amenable to debate. There’s probably a genetic trait involved, but we also realize that being sloppy can kill you rather quickly; the universe is not all about pink unicorns and rainbows.

In fact, the universe wants you dead.

Now, go play with those goblins and zombies tonight…

Memo to Self: Tighten those terminals every now and again. A wire will come loose shortly after you forget to do that, of course.

, ,

10 Comments

Kenmore 158: Hall Effect Pedal Connector

Built back in 2004, the Dell GX270 PC had PS/2 keyboard and mouse ports on its back panel, so I put a PS/2 plug on the cable from the Hall effect sensor in the foot pedal. Although the original sockets mounted on a complex system board structure that I can’t repurpose, it’s easy enough to conjure up a mount for a single socket on the back panel:

PS2 Socket Mount

PS2 Socket Mount

A quick fit check verified the dimensions:

PS2 Connector mount - trial fit on platform

PS2 Connector mount – trial fit on platform

Astonishingly, the socket slid firmly into its slot. I love it when that happens on the first try!

The flat plate in front of the mount snaps into the chassis cutout to locate the 2-56 screw hole positions:

PS2 Mount - drill guide

PS2 Mount – drill guide

The screws thread directly into the mount, with the holes tapped for 2-56. PLA isn’t all that strong, but there’s enough meat to hold the mount firmly enough for my simple purposes.

And it looks pretty good, in a post-apocalyptic missing-windows sort of way:

PS2 Connector mount - in place

PS2 Connector mount – in place

That was easy…

The OpenSCAD source code:

// PS/2 Socket Mount
// Ed Nisley - KE4ZNU - October 2014

Layout = "Build";			// Build Socket Guide

//- Extrusion parameters must match reality!

ThreadThick = 0.20;
ThreadWidth = 0.40;

HoleWindage = 0.2;			// extra clearance

Protrusion = 0.1;			// make holes end cleanly

AlignPinOD = 1.70;			// assembly alignment pins: filament dia

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

//----------------------
// Dimensions

Socket = [14.1,13.3,13.0];	// PS/2 socket outline, minus tabs & wires on bottom

Flange = 6.0;

WallThick = IntegerMultiple(2.0,ThreadWidth);

Mount = Socket + [2*Flange,WallThick,WallThick];

ScrewTap = 1.90;			// 2-56 tap for machine screws

ScrewOC = 19.0;

echo(str("Screw OC: ",ScrewOC));

ChassisHole = [13.0,13.0,1.0];
GuideLayers = IntegerMultiple(0.5,ThreadThick);

//----------------------
// 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);
}

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 the mount

module SocketMount() {
	
	difference() {
		translate([0,Mount[1]/2,Mount[2]/2])
			cube(Mount,center=true);
		
		translate([0,Socket[1]/2,Socket[2]/2])
			cube(Socket + [0,Protrusion,Protrusion],center=true);
			
		for (i=[-1,1])							// holes centered on socket, not mount
			translate([i*ScrewOC/2,-Protrusion,Socket[2]/2])
				rotate([-90,0,0])
					rotate(180/6)
						PolyCyl(ScrewTap,Mount[1] + 2*Protrusion,6);
	}
}

//-- Totally ad-hoc drill guide to center holes on PS/2 cutout

module DrillGuide() {
	
	union() {
		intersection() {
			translate([0,0,GuideLayers])
				cube([2*Mount[0],2*Mount[1],2*GuideLayers],center=true);
			translate([0,-Socket[2]/2,Mount[1]])
				rotate([-90,0,0])
					SocketMount();
		}

		translate([0,0,Protrusion])
			linear_extrude(height=(3*GuideLayers - Protrusion)) {
				circle(d=ChassisHole[0],$fn=8*4);
				translate([-ChassisHole[0]/2,0])
					square([ChassisHole[0],(ChassisHole[1] - ChassisHole[0]/2)],center=false);
			}

	}
}


//----------------------
// Build it

ShowPegGrid();

if (Layout == "Socket")
	SocketMount();

if (Layout == "Guide")
	DrillGuide();

if (Layout == "Build") {
	translate([0,-Mount[2],0])
		DrillGuide();
	translate([0,0,Mount[1]])
		rotate([-90,0,0])
			SocketMount();
}

,

Leave a comment

Kenmore 158 LED Strip Lighting: Now With Improved Wiring!

It Has Been Decided (in that place where what is decided must be) to allow a single hole in the sewing machine’s front panel:

Kenmore 158 - Front LED strip - wire routing

Kenmore 158 – Front LED strip – wire routing

The hole barely passes the 2 mm coaxial cable I’m misusing for the LED strips and is located where it:

  • Clears the machine’s metal frame to the upper left
  • Isn’t blocked by the knob’s mounting bracket to the lower right
  • Doesn’t snag the knob’s cam followers all over the insides
  • Lines up directly below the orange dot for pretty

The first three of those happen behind the front panel, inside the frame, where you (well, I) can neither see nor measure the locations. I used a large outside caliper to get a feel for where the hole could possibly fit, then got it right on the first try!

On the rear panel, it turns out that the presser foot lever doesn’t quite touch the top of its slot in the frame, so the cable for those LED strips can sneak through:

Kenmore 158 - Rear LED strips - wire routing

Kenmore 158 – Rear LED strips – wire routing

Just inside that slot, the cable turns right, passes into the endcap, then goes upward to re-emerge at the top, inside the channel used for the old 120 VAC zip cord that powered the incandescent bulb in the endcap.

I had some square cable clips lying around, so I used them, but the (yet to be designed) round versions will look better.

The grody frame tells you this is the crash test dummy machine I’m using to verify things before installing them in Mary’s machine.

The improved cable routing required different hole positions in the LED strip mounts:

Strip Light Mount - Drilled cable routing

Strip Light Mount – Drilled cable routing

The internal wire route follows the original 120 VAC zip cord’s route from the bottom of the machine to the endcap (on the left), with the new branch for the front LEDs curving over the main shaft:

Kenmore 158 - LED strips - internal wire routing

Kenmore 158 – LED strips – internal wire routing

The four-conductor ribbon cable also carries the supply voltage for the yet-to-be-built high intensity LED emitters in the end cap that will replace the 10 mm LEDs, with the ends terminated under the clamp in the middle. Those old steel wire clamps seem grossly oversized for the job, but that’s OK with me.

The ribbon cable eases past that whirling crank arm, then passes through the frame to the outside cover under the handwheel, where it just barely clears the drive belts. A few zip ties hold it out of the way.

The OpenSCAD source code offsets the wiring holes by 0.5 mm from the ends of the LED strips for easier wire bending, but is otherwise pretty much the same as before:

// LED Strip Lighting Brackets for Kenmore Model 158 Sewing Machine
// Ed Nisley - KE4ZNU - March 2014
//  October 2014 - tweak endcap length & channel position

Layout = "Build";			// Build Show Channels Strip

//- Extrusion parameters must match reality!
//  Print with 2 shells and 3 solid layers

ThreadThick = 0.20;
ThreadWidth = 0.40;

HoleWindage = 0.2;			// extra clearance

Protrusion = 0.1;			// make holes end cleanly

AlignPinOD = 1.70;			// assembly alignment pins: filament dia

inch = 25.4;

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

//----------------------
// Dimensions

LEDSegment = [25.0,10.0,3.0];		//  size of each LED segment
SEGLENGTH = 0;
SEGWIDTH = 1;
SEGHEIGHT = 2;

WireChannel = 3.0;				// wire routing channel diameter

StripHeight = 12.0;				// sticky tape width

DefaultLayout = [1,2,"Wire","NoWire"];
NUMSEGS = 0;
NUMSTRIPS = 1;
WIRELEFT = 2;
WIRERIGHT = 3;

EndCapSides = 8*4;				// endcap smoothness
EndCapShim = 0.5;				// additional space for easier wire bending

function EndCapSize(Layout) = [(2*WireChannel + EndCapShim),Layout[NUMSTRIPS]*LEDSegment[SEGWIDTH],StripHeight];

//----------------------
// 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);
}

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);

}

//-- The negative space used to thread wires into the endcap

module MakeWireChannel(Layout = DefaultLayout,Which = "Left") {

	EndCap = EndCapSize(Layout);	// radii of end cap spheroid

	HalfSpace = EndCap[0] * ((Which == "Left") ? 1 : -1);

	render(convexity=2)
	translate([0,LEDSegment[SEGWIDTH]/2,0])
		intersection() {
			union() {
				cube([2*WireChannel,WireChannel,EndCap[2]],center=true);
				translate([-2*EndCap[0],0,EndCap[2]/2])
					rotate([0,90,0]) rotate(180/6)
						PolyCyl(WireChannel,4*EndCap[0],6);
			}
			translate([HalfSpace,0,(EndCap[2] - Protrusion)]) {
				cube(2*EndCap,center=true);
			}
		}
}

//-- The whole strip, minus wiring channels

module MakeStrip(Layout = DefaultLayout) {

	EndCap = EndCapSize(Layout);	// radii of end cap spheroid

	BarLength = Layout[NUMSEGS] * LEDSegment[SEGLENGTH];				// central bar length

	echo(str("Strip OAL: ",BarLength + 2*EndCap[SEGLENGTH]));

	hull()
		difference() {
			for (x = [-1,1])						// endcaps as spheroids
				translate([x*BarLength/2,0,0])
					resize(2*EndCap) rotate([0,90,0]) sphere(1.0,$fn=EndCapSides);
			translate([0,0,-EndCap[2]])
				cube([2*BarLength,3*EndCap[1],2*EndCap[2]],center=true);
			translate([0,-EndCap[1],0])
				cube([2*BarLength,2*EndCap[1],3*EndCap[2]],center=true);
		}

}

//-- Cut wiring channels out of strip

module MakeMount(Layout = DefaultLayout) {

	BarLength = Layout[NUMSEGS] * LEDSegment[SEGLENGTH];

	difference() {
		MakeStrip(Layout);
		if (Layout[WIRELEFT] == "Wire")
			translate([(BarLength/2 + EndCapShim),0,0])
				MakeWireChannel(Layout,"Left");
		if (Layout[WIRERIGHT] == "Wire")
			translate([-(BarLength/2 + EndCapShim),0,0])
				MakeWireChannel(Layout,"Right");
	}
}

//- Build it

ShowPegGrid();

if (Layout == "Channels") {
	translate([ (2*WireChannel + 1.0),0,0]) MakeWireChannel(DefaultLayout,"Left");
	translate([-(2*WireChannel + 1.0),0,0]) MakeWireChannel(DefaultLayout,"Right");
}

if (Layout == "Strip") {
	MakeStrip(DefaultLayout);
}

if (Layout == "Show") {
	MakeMount(DefaultLayout);
}

if (Layout == "Build") {

	if (false) {					// original no-drill wiring
		translate([0,(3*LEDSegment[SEGWIDTH]),0]) MakeMount([1,2,"Wire","Wire"]);		// rear left side, vertical
		translate([0,0,0]) MakeMount([5,2,"Wire","NoWire"]);				// rear top, across arm
		translate([0,-(3*LEDSegment[SEGWIDTH]),0]) MakeMount([6,2,"NoWire","Wire"]);	// front top, across arm
	}

	if (true) {						// front: drill panel, rear: route through foot lift lever
		translate([0,(3*LEDSegment[SEGWIDTH]),0])
			MakeMount([1,2,"NoWire","Wire"]);				// rear left side, vertical
		translate([0,0,0])
			MakeMount([5,2,"Wire","Wire"]);					// rear top, across arm
		translate([0,-(1*LEDSegment[SEGWIDTH]),0])
			rotate(180)
			MakeMount([6,2,"NoWire","Wire"]);				// front top, across arm
	}
}

, ,

Leave a comment

Astable Multivibrator: Hairball Edition

Just to show all those precisely machined enclosures and tidy hand-wired boards don’t count for much:

Astable Multivibrator - as-built

Astable Multivibrator – as-built

The schematic again:

Astable Multivibrator - as-built - simulation

Astable Multivibrator – as-built – simulation

It started with that idea and evolved slightly.

5 Comments

Motor RPM Sensor Mounting: Bracket Madness

The first sensor bracket came from the scrap pile, but showed that it would produce 1/rev pulses from the motor shaft pulley. The positioning wasn’t quite right, so I made another bracket that put the TCRT5000 sensor at right angles to the pulley:

TCTR5000 Motor RPM Sensor - end view

TCTR5000 Motor RPM Sensor – end view

All of the sensors have a rakish tilt over their PCB, so at some point I must resolder them:

TCTR5000 Motor RPM Sensor - side view

TCTR5000 Motor RPM Sensor – side view

It might not matter, as the phototransistor on the left peers directly at the pulley, with the LED on the right acting as a floodlight.

“Made another bracket” sounds like the metal sprang fully formed from the concept. Herewith, the early contestants atop a sketch and the flat layout for The Ultimate Bracket:

Motor RPM Sensor Brackets

Motor RPM Sensor Brackets

A closer look at that final dimension sketch, because I’ll need it again:

RPM Bracket Dimensions

RPM Bracket Dimensions

The vertical size of the center section (12 mm) sets the perpendicular distance of the sensor from the shaft. The horizontal size (14 mm) controls the pulley-to-sensor spacing.

The horizontal distance from the center section to the hole on the right (10 mm) adjusts the sensor spacing parallel to the shaft.

I cut the overall rectangle with tin snips, drilled & cleaned the holes, applied a nibbling tool to the details, trimmed the corners, filed off sharp edges & spines, and it was all good.

The doodles for the first few attempts, as I don’t want to repeat those mistakes:

Bracket Doodles

Bracket Doodles

All in all, a few more hours of Quality Shop Time than I expected…

,

Leave a comment

Threading the Bicycling Needle on Raymond Avenue

The NYS DOT’s original planning documents said that roundabouts / rotaries weren’t optimal for pedestrians or bicyclists or large trucks, but, because DOT likes rotaries, that’s what they built on Raymond Avenue. However, they didn’t relocate the drainage lines under the road and left some catch boxes in awkward spots.

This Google Street View image from a few years ago shows the College Avenue intersection from northbound Raymond Avenue, with the catch box in the lane:

Google Street View - Raymond northbound at College

Google Street View – Raymond northbound at College

Raymond is basically the only bicycle route into Arlington from the south and has “shared roadway” signs, but the design flat-out doesn’t work for bikes and the implementation leaves a lot to be desired.

Here’s what it looks like from the bike:

MAH00138-2014-09-28-095

MAH00138-2014-09-28-095

Note the deteriorated asphalt and longitudinal cracks near the white fog line next to the curb. That forces bike traffic another few feet into the deliberately narrowed traffic lane at the entrance to the intersection.

Mary’s about as far to the right as practicable (that’s a legal term):

MAH00138-2014-09-28-155

MAH00138-2014-09-28-155

I’m angling over from the middle of the lane, because, unless I take the lane, motorists will attempt to pass us in the rotary entrances. The asphalt on the far side of the box has subsided several inches into a tooth-rattling drop, you can see the crevice adjacent to the right side of the box, and I know better than to cross steel grates while turning.

Notice that the Google view shows four bollards marking what DOT charmingly calls the “pedestrian refuge” in the median, but only two appear in my pictures. NYS DOT recently removed half the bollards from each refuge and relocated the remainder, apparently to reduce the number of street furniture targets. Early on, they were losing one bollard per intersection per year, but that’s slowed down now that they’ve stopped replacing smashed hardware.

It was never clear to me why putting nonreflective black bollards a foot or two from the traffic lane made any sense, but that’s how it was done. Most of the relocated bollards stand close to the center of the median, so maybe it didn’t make any sense.

Anyhow, bikes can’t stay too far to the right after the box, because the asphalt has crumbled away in furrows around Yet Another Crappy Patch:

MAH00138-2014-09-28-184

MAH00138-2014-09-28-184

That’s pretty much the state of the traffic engineering art around here. A while back, the NYS DOT engineer in charge of the project assured me it’s all built in compliance with the relevant standards.

It’s worth noting that Mary’s on the Dutchess County Bicycle and Pedestrian Advisory Committee, so we volunteered to count cyclists and pedestrians on Raymond a few months ago. When I say that we’re essentially the only cyclists riding Raymond Avenue, we have the numbers to back it up. Everybody else rides on the sidewalks, despite that being of questionable legality and dubious for pedestrian safety, because, well, you’d be crazy to ride in the shared roadway.

,

Leave a comment