Archive for category Aphorisms

Fairchild and Stoddard RF Current Probes / EMC Field Sniffers

I’ve always wondered how noisy those Arduino + fake Neopixel lamps might be and these RF sniffers might come in handy:

Fairchild MFC-25 and Stoddart 91550-1 Current Probes

Fairchild MFC-25 and Stoddart 91550-1 Current Probes

Even though they’re long obsolete, RF fields haven’t changed much in the intervening decades.

Fairchild Electronics may have become Electro-Metrics before they vanished in turn; the single useful search result offers a limited spec sheet that describes it as part of a set of three “loop probes covering the frequency range 10kHz-230MHz designed to search for RF magnetic leaks, especially in cabinets and shielded enclosures”. This one, with the blue coating, has a bandwidth of 22 MHz to 230 MHz. It has a TNC connector that now sports a cheap BNC adapter; note that it has standard polarity, not the reverse polarity required by FCC regulations that don’t take Amazon Prime into consideration.

Stoddard Aircraft Radio Co, Inc passed the 91550-1 baton to ETS-Lindgren, which (as of right now, anyway) offers a datasheet for a gadget that looks remarkably similar. The 30 Hz lower limit on the data plate suggests it’s roughly equivalent to ETS-L’s contemporary 20 Hz 91550-1L probe, but I doubt that makes much practical difference for my simple needs. The adapter takes the probe’s N connector to BNC.

The Word According to Mad Phil: If you can get to BNC, you can get to anything.


Leave a comment

Hard Drive Platter Mood Light: Correct Phase Timing

As noted earlier, the timing for a π/16 phase delay works out to

218 steps = (π/16) * (1 cycle/2π) * (7 * 1000 step/cycle)

which amounts to a delay of 5.45 s = 218 step * 25 ms/step. That means a color should appear on the top platter 11 s after it appears on the bottom platter:

Mood Light - pi over 16 phase - composite

Mood Light – pi over 16 phase – composite

But when I actually got out a stopwatch and timed the colors, the bottom-to-top delay worked out to a mere 3.5 s…

After establishing that the steps ticked along at the expected 25 ms pace, the phase-to-step calculation produced the right answer, the increments were working as expected, I finally slept on the problem (a few times, alas) and realized that the increment happened in the wrong place:

for (int i=0; i < LEDSTRINGCOUNT; i++) { // for each layer byte Value[PIXELSIZE]; for (byte c=0; c > PIXELSIZE; c++) { // figure the new PWM values if (++Pixels[c].Step >= Pixels[c].NumSteps) {   //  ... from incremented step
            Pixels[c].Step = 0;
        Value[c] = StepColor(c,-i*Pixels[c].PlatterPhase);
    uint32_t UniColor = strip.Color(Value[RED],Value[GREEN],Value[BLUE]);
    for (int j=0; j < LEDSTRIPCOUNT; j++) {              // fill layer with color

The outer loop runs “for each layer”, so the increment happens three times on each step, making the colors shift three times faster than they should.

Promoting the increments to their own loop solved the problem:

	MillisNow = millis();
	if ((MillisNow - MillisThen) > UpdateMS) {
		for (byte c=0; c < PIXELSIZE; c++) { // step to next increment in each color if (++Pixels[c].Step >= Pixels[c].NumSteps) {
				Pixels[c].Step = 0;
				printf("Cycle %d steps %d at %8ld delta %ld ms\r\n",c,Pixels[c].NumSteps,MillisNow,(MillisNow - MillisThen));

		for (int i=0; i < LEDSTRINGCOUNT; i++) {				// for each layer
			byte Value[PIXELSIZE];
			for (byte c=0; c < PIXELSIZE; c++) {				//  ... for each color
				Value[c] = StepColor(c,-i*Pixels[c].PlatterPhase);		// figure new PWM value
//				Value[c] = (c == RED && Value[c] == 0) ? Pixels[c].MaxPWM : Value[c];	// flash highlight for tracking
			uint32_t UniColor = strip.Color(Value[RED],Value[GREEN],Value[BLUE]);
			if (false && (i == 0))
				printf("L: %d C: %08lx\r\n",i,UniColor);
			for (int j=0; j < LEDSTRIPCOUNT; j++) {				// fill layer with color

		MillisThen = MillisNow;

And then It Just Worked.

Verily, it is written: One careful measurement trumps a thousand expert opinions.


(The WordPress editor wrecked these code snippets. I’m leaving them broken so WP can maybe fix the problem.) The problem isn’t fixed, but these are OK now… as long as I don’t unleash the “improved” editor on the post, anyway.

, ,


DC Motor Mounting Plate

The Squidwrench Power Wheels Racer needed a mounting bracket for its DC motor, so Matt handed me a precut steel slab and some drawings. I did a manual layout to get a feel for the sizes:

Motor Mount - dye layout

Motor Mount – dye layout

Yes, it’s slightly rhomboid & irregular on the sides; it’ll be welded to a U-channel. The front edge is the straightest and I scribed a perpendicular datum line over on the right, from which to measure the motor center point.

But then, realizing I’d have to mill the central hole anyway, I did what I should have done from the beginning and lined it up on the Sherline:

Motor Mount - Sherline laser centering

Motor Mount – Sherline laser centering

With the part zeroed at the center, everything has polar coordinates. The bolt holes are #10 on a 50 mm BCD, which is G0 @25^[45+90*i]. Rather than writing & debugging a program, I did it all by feeding manual instructions into the interpreter; the i gets typed as 0, 1, 2, and 3 by clicking on a previous command, backspacing, and retyping, which is both faster and easier than it sounds. The holes are drill cycles: G81 Z-7 R1 F30

This being steel on a Sherline, the rule of thumb that says you can drill at 100x the drill diameter (in inch/min or mm/min, as appropriate) at 3000 RPM gets derated by at least factor of 10. I settled on 30 mm/min for a #10 drill (0.194 inch = 4.9 mm → 500 mm/min = hogwash) after trying the first hole at 50 mm/min:

Motor Mount - bolt holes

Motor Mount – bolt holes

The least horrible way to cut out the hole for the motor mounting boss involved chain drilling to excavate the most steel with the least effort. These center drill points are at G0 @14 ^[15*i] with i in [0..23]:

Motor Mount - chain center drilling

Motor Mount – chain center drilling

I drilled every even hole #27, then every odd hole #28, both at 50 mm/min, to get a thin web:

Motor Mount - chain drilled

Motor Mount – chain drilled

Then helix-mill downward with a 1/8 inch end mill at 1 mm per pass:

Motor Mount - helix milling

Motor Mount – helix milling

That started at 14 mm from the origin to match the hole circle: G3 I-14 F100 Z-1

Then I switched to a 3/8 inch = 9.5 mm end mill to bring the hole up to size, ending with G3 I-12.75 F300

Motor Mount - center hole milled

Motor Mount – center hole milled

A trial fit showed the hole was slightly off-round, probably due to a few mils of backlash in both axes, and slightly too small, because that’s how I wanted it. Flipped back-to-front, reclamped, recentered, ran the cutter around at 12.75 mm to clear the ovalness, then crept out to 12.8 mm, and it was all good:

Motor Mount - test fit

Motor Mount – test fit

That’s an easy fit with maybe 0.1 mm = 4 mil radial play around the boss. Better than that, I cannot do.

Lacquer thinner stripped the layout dye and it’s ready for welding:

Motor Mount - with motor

Motor Mount – with motor

Reminders for next time…

The drill feed on a rigid machine with plenty of spindle power is 100 x (drill dia) @ 3000 RPM. On the Sherline, in steel, 10 x dia is optimistic. Aluminum feeds run higher, but don’t get stupid.

Re-centering to the accuracy required for this job is a matter of noting the coordinates where the cutter kisses the perimeter across a diameter along each axis, adding the coordinates, dividing by two, moving to that position, and zeroing the origin. Do that in X, Y, X, and Y and it’s good enough. You could automate that with a touch probe, of course. Hand-turning the spindle with the cutter in place to feel it kiss the workpiece is fine, but use the same cutting edge on both sides of the diameter.

Figure the chain drill diameter thusly:

  • Pick a reasonable drill diameter; #10 is about as large as you want on a Sherline
  • Drill circle dia = final milled hole diameter – drill dia – 2 mm, round down to lower integer
  • # holes = π x DCD / drill dia, rounded down to lower integer
  • Hole angle = 360 / # holes
  • Hole radius = DCD / 2

Wisely is it written that a man with a CNC milling machine has many friends.



Butt Fire!

As I rolled into the Stewart’s Shop on a milk-and-eggs run, a plume of smoke spiraled out of the cigarette butt station near the door, way off on the left side:

Smoldering Cigarette Dump

Smoldering Cigarette Dump

A closer look:

Smoldering Cigarette Dump - Detail

Smoldering Cigarette Dump – Detail

By the time I unhitched myself from the bike and reached the door, two smoke jets squirted from the top and a pall of breathtakingly foul smoke filled the parking lot. I mooched a big cup of water from the folks behind the counter and pulled off the container’s lid, which let in enough oxygen to ignite a full-up fire in the heap of cigarette packs, plastic wrappers, butts, lottery tickets, receipts, and other combustible junk atop the sand bucket in the base of the butt dump. Sprinkling the water over the blaze knocked it back; I replaced the lid and declared victory.

I always take a shower after returning home from a ride, but, this time, we also ran all my bike clothing through the washer right away.


Verily, it is written: Kissing a smoker is like licking an ashtray.


Green Grass Location: Goat Edition

Just because it’s a cliché doesn’t make it wrong:

Goats vs. fence - green grass

Goats vs. fence – green grass

Spotted at the U-Pick Blueberry Field Formerly Known As Secor’s.

Leave a comment

Cycliq Fly6: Rain-shedding Performance

Cycliq says “Using the latest nanotechnology, Fly6 is safeguarded against any wet weather nature can throw at you.” That’s not quite the same as saying it’s waterproof, but the plastic lens cover sheds water surprisingly well.

We were caught in a brief downpour on a recent ride and, not unexpectedly, water covered the rear-facing lens:

Fly6 - Rain 1

Fly6 – Rain 1

A larger drop ran down the left side, merged with the previous drop, and blurred two thirds of the image:

Fly6 - Rain 2

Fly6 – Rain 2

Three seconds and a few major jolts later, the lens was mostly clear:

Fly6 - Rain 3

Fly6 – Rain 3

Half a minute later, it’s looking even better:

Fly6 - Rain 4

Fly6 – Rain 4

The jolts come from the deteriorated paving and poor patches along Rt 376, but at least they shake the water off the lens:

Fly6 - Rain 5

Fly6 – Rain 5

Ten minutes after the first image, both the lens and the sky were almost completely clear:

Fly6 - Rain 6

Fly6 – Rain 6

A pleasant surprise!

That transverse crack just behind me? Charlie Brown’s First Principle of Puddles applies: you cannot tell how deep a puddle is from the top. That sucker goes down through at least three layers of paving:

Crack - Red Oaks Mill

Crack – Red Oaks Mill

I forgot to put the Sony HDR-AS30V helmet camera in its waterproof housing before we left, so I put it in the (not exactly waterproof, either) underseat pack when the first drops fell. Sony makes no pretense that the bare camera can survive a rainstorm, but the packs are good for our simple needs.

Ed’s First Principle of Rain Riding: After the first five minutes, you don’t get any wetter.


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.

Leave a comment