Ersatz Yellow Pages Scam

These mailings generally carry a “trash before reading” interest level, but this one stands out:

Biz Directory Scam - the deal
Biz Directory Scam – the deal

The Terms and Conditions feature some gems:

Biz Directory Scam - Terms and Conditions
Biz Directory Scam – Terms and Conditions

The first few sections suggest their past behavior has required some … admissions … to avoid future issues.

Section 9 says the laws of Florida apply and the “agreement is performable” (whatever that means) “at United Directories’ address located in Jacksonville Beach, Florida”. They’re so afraid of their customers that the only address appearing on the mailer is in Atlanta, Georgia, but a bit of poking around suggests their HQ is inside what looks like a beachfront house across from Joe’s Crab Shack or a biz building up the street.

Section 11 says your “listing” will be renewed every six months at $396, so you pay nigh onto 800 bucks a year for a “customizable web page” nobody visits.

Section 12 tells you “Unpaid accounts will incur a 10% late charge” and “Any credits will be applied to the next subscription period.”

This will come as no surprise:

Searching for obvious keywords + scam won’t turn up any surprises, either.

Sad fact: they actually have some listings.

I wish no ill will on anyone, but if somebody’s gotta be under the next meteor strike, I have a short list of candidates …

Arduino Joystick: Button Pullup FAIL

I wired a resistive joystick to the knockoff Nano controlling the crystal tester and connected the button to an analog input because I have a lot of those left over and why not. Unfortunately, the ADC returned a sequence of random-ish numbers indicating the button didn’t have a pullup to +5 V.

One might be forgiven for assuming the pads marked R5 would hold such a pullup resistor, had the joystick not been relentlessly cost-reduced:

Keyes resistive joystick - R5 location
Keyes resistive joystick – R5 location

One would, of course, be completely wrong.

Having been around this block several times, I measured the pad-to-pin resistances and found R5 firmly affixed to the GND and +5V pins, with the SW (a.k.a. button) pin floating free. Pressing the joystick hat closes the switch next to R5, thereby connecting the SW pin to GND.

Baffles me. Maybe a fresh intern did the PCB layout and just misplaced the resistor?

So I soldered an ordinary resistor (*) between the +5 V and SW pins:

Keyes resistive joystick - button pullup
Keyes resistive joystick – button pullup

Now it works just as it should.

(*) For long-lost reasons, I have a zillion 12.4 kΩ 1% resistors appearing in place of simple 10 kΩ resistors.


HP 7475A Plotter: Pen Carousel Geneva Drive

A note arrived from someone who obviously couldn’t pass up an orphaned HP 7475A plotter:

The plotter I received works beautifully, except that the carousel doesn’t rotate. I found a YouTube video showing a 7475a running with the cover off, and there’s a little plastic piece – it looks like a teardrop – that advances the carousel, and is apparently part of the carousel motor assembly. Mine is missing that piece …

The keyword is Geneva drive, a wonderfully simple technique to convert one rotation of the stepper motor into 1/6 turn of the pen carousel, with no need for fancy sensors.

The (unofficial) HP Computer Museum has All The HP 7475A Documents and the Plotter Service Manual shows All The Parts. And, of course, I’ve written a bit about my adventures with an old 7475A.

Back in the day, you could get the entire Pen Carousel Housing Assembly w/ Motor (PN 07475-60175) as a unit and the Carousel Motor Only (PN 3140-0687) as a separate thing, but not the Geneva drive wheel:

HP7475A Carousel - Geneva drive cam
HP7475A Carousel – Geneva drive cam

The cam’s drive wheel end (in inches, because early 1980s):

  • 0.25 thick overall
  • 0.10 thick plate under pin end
  • 1.09 OD – rounded end

The pin sticking up from the cam:

  • 0.154 OD (or fit to slot?)
  • 0.16 tall (above base plate)

I have no good (i.e., easy + accurate) way to measure the distance from the motor shaft to the pin, but I doubt it’s critical. As long as the pin doesn’t quite whack the hub end of the slot, it’s all good:

HP7475A Carousel - cam driving
HP7475A Carousel – cam driving

The 0.10 plate + 0.16 pin height don’t quite add up to the 0.25 overall measurement, but that’s certainly measurement error. I’d round the pin length downward and carve the drive from a 1/4 inch sheet.

A 3D printed part would probably work, apart from the accuracy required to fit the D-shaped motor shaft. Perhaps a round hole, reamed to fit the shaft, carefully aligned / positioned, with epoxy filling the D-shaped void, would suffice. A dent in the round hole would give the epoxy something to grab.

I’d be sorely tempted to use an actual metal / plastic rod for the pin, rather than depend on a stack of semi-fused plastic disks. The pin must withstand hitting the end of the “missing” slot during the power-on indexing rotation, because turning the carousel isn’t quite a non-contact sport. Normally, though, it enters the end of the slot without much fuss:

HP7475A Carousel - cam engaging
HP7475A Carousel – cam engaging

The blocked slot sits at the bottom of that picture, with a small locating pin sticking upward just above the circular feature at the end of the arm: we’re seeing the negative of a plug inserted into the original injection mold.

With a bit of luck, another HP 7475A plotter will fascinate everybody within hearing distance!

[Update: It lives! ]

LM75A vs. SOIC Adapter: Mirror Imaging

After hairballing an LM75A I²C temperature sensor to verify at least one of the eBay lot worked, a bag of SOIC-to-DIP space transformers arrived, so I soldered up another LM75A:

LM75A on DIP8 adapter - top
LM75A on DIP8 adapter – top

The SOIC chip pattern sits at right angles to the DIP pins, which took some getting used to.

The slightly defocused wire connecting pin 4 (on the IC) to pins 5, 6, and 7 (on the PCB) selects address 0x48.

So I flipped it over, soldered four wires (+5 V, GND, SDA, SCL) to the numbered pins on bottom of the board, made up a little header for the other end, wired a socket strip on the crystal tester board, plugged it in, and … nothing worked.

Turns out that the other side of the board carries a TSSOP pattern, which I’d neatly masked off with a snippet of Kapton tape, surrounded by eight numbered pins. Of course, those pin numbers correspond to the TSSOP pattern facing you, so they’re mirror-imaged for the SOIC pattern on the other side.

Soooo, the proper wiring for the SOIC pattern as seen from the TSSOP side has the pin numbers exactly bass-ackwards:

LM75A on DIP8 adapter - bottom
LM75A on DIP8 adapter – bottom

The insulation looked a lot better the first time I soldered the wires to the PCB. Honest.

Anyhow, when correctly wired, the LM75A worked as it should:

LM75A Temperature Sensor - installed
LM75A Temperature Sensor – installed

It’s snuggled chip-down against the top of the 125 MHz oscillator can, with a dab of heatsink compound improving their thermal bond and a yellow cable tie around the foam holding them together. The socket header is wired pin-for-pin to the DAC I²C socket directly above it.

The OLED temperature display shows 28.250 °C, because the oscillator just started up in a cool basement. It’ll eventually settle around 39-ish °C, where its output should be pretty close to the 125 MHz – 344 Hz value hardcoded into the source.

Oh, that’s a 3 mm amber LED next to the relay can: much less glaring than the white LED, no matter what it looks like here.

Mailing Tube End Caps: Screw-in Version

The mailing tube arrived with contents intact, although the USPS inlet scanning didn’t work and the tube pretty much teleported across several states without leaving any tracking data behind. The recipient suggested several modifications to the caps:

Review of user experience of tube end:
The ribs on the endcap are very good at holding the cap on, so much so that I had to use a prying implement to remove it, which cracked the flange.
Would consider less depth on the cap, and possibly another layer on the flange.

Some continuous process improvement (a.k.a OpenSCAD hackage) produced a swoopy threaded cap with thumb-and-finger grips:

Mailing Tube Screw Cap - top - Slic3r
Mailing Tube Screw Cap – top – Slic3r

The finger grips are what’s left after stepping a sphere out of the cap while rotating it around the middle:

Mailing Tube Cap - finger grip construction
Mailing Tube Cap – finger grip construction

That worked out surprisingly well, with the deep end providing enough of a vertical-ish surface to push against.

The two hex holes fit a pin wrench, because the grips twist only one way: outward. The wrench eliminates the need for a flange, as you can now adjust the cap insertion before slathering packing tape over the ends. Man, I loves me some good late binding action!

A three-start thread seemed like overkill, but was quick & easy. The “thread form” consists of square rods sunk into the cap perimeter, with one edge sticking out:

Mailing Tube Cap - thread detail
Mailing Tube Cap – thread detail

They’re 1.05 times longer than the cap perimeter facets to make their ends overlap, although they’re not tapered like the ones in the broom handle dingus, because it didn’t (seem to) make any difference to the model’s manifoldhood.

Not needing any endcaps right now, I built one for show-n-tell:

Threaded mailing tube end cap - installed
Threaded mailing tube end cap – installed

The OpenSCAD source code as a GitHub Gist:

// Mailing tube end cap
// Ed Nisley KE4ZNU - June 2017
Layout = "Build";
Model = "Screw";
//- 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;
TubeID = 2 * inch;
TubeWall = 0.1 * inch;
CapInsert = 15.0;
CapRim = 6*ThreadThick;
CapWall = 3*ThreadWidth;
NumFlanges = 3;
FlangeHeight = 3*ThreadThick;
FlangeWidth = ThreadWidth/2;
FlangeSpace = CapInsert / (NumFlanges + 1);
ThumbHoleOD = 20.0;
ThumbHoleAngle = 100;
ThumbHoleSteps = 10;
SpannerPinOD = 5.0;
HelixOD = 4*ThreadThick;
HelixHeight = 0.75*CapInsert;
HelixAngle = atan(HelixHeight/(PI*TubeID));
HelixStarts = 3;
OAHeight = CapInsert + CapRim;
NumRibs = 3*4;
NumSides = 3*NumRibs;
//- 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);
module ScrewCap() {
union() {
difference() {
for (a=[0,180])
for (i=[0:ThumbHoleSteps-1])
rotate(a + i*ThumbHoleAngle/ThumbHoleSteps)
for (a=[0,180])
rotate(a - 60)
for (s=[0:HelixStarts-1])
for (i=[0:NumSides-1])
rotate(i*360/NumSides + 180/NumSides + s*360/HelixStarts)
translate([TubeID/2 - 0.25*HelixOD,0,i*HelixHeight/NumSides + HelixOD])
rotate([90 + HelixAngle,0,0])
module PushCap() {
difference() {
cylinder(d=TubeID - 2*CapWall,h=OAHeight,$fn=NumSides);
for (i=[1:NumFlanges])
difference() {
cylinder(d=TubeID + 2*FlangeWidth,h=FlangeHeight,$fn=NumSides);
cylinder(d=TubeID - 2*CapWall,h=FlangeHeight + 2*Protrusion,$fn=NumSides);
for (i=[0:NumRibs-1])
translate([0,-ThreadWidth,CapWall + ThreadThick])
cube([TubeID/2 - CapWall/2,2*ThreadWidth,CapInsert + CapRim - CapWall - ThreadThick],center=false);
translate([0,0,CapInsert]) {
difference() {
cylinder(d=TubeID + 2*TubeWall,h=CapRim,$fn=NumSides);
cylinder(d=TubeID - 3*2*CapWall,h=2*CapRim,$fn=NumSides);
//- Build things
if (Model == "Push")
if (Layout == "Show")
else if (Layout == "Build")
if (Model == "Screw")
if (Layout == "Show")
else if (Layout == "Build")

Handbag Strap Rivet Repair

One of the leather strap anchors on Mary’s giant haul-everything-to-a-concert(*) handbag pulled its rivet through the canvas fabric:

Handbag - pulled-through rivet
Handbag – pulled-through rivet

We knotted the strap around the zippered opening and completed the mission.

Of course, it wouldn’t have pulled through if they’d splurged on washers, but noooo too expensive:

Handbag - intact rivet - inside
Handbag – intact rivet – inside

Some rummaging produced a pan-head M3 screw of suitable length:

Handbag - repaired - outside
Handbag – repaired – outside

A slightly battered acorn nut was a special treat for the inside, with another washer to keep me happy:

Handbag - repaired - inside
Handbag – repaired – inside

That was easy!

(*) At Tanglewood, where they don’t strip-search you on the way in, tow-behind coolers seemed de rigueur, and a good time was had by all.