Blog / Neato D10 Brain Transplant / Ep. 18

episode 18

One wire at a time

Published 10 Aug 2026 · bench session 10 Aug 2026

One wire at a time

The morning’s verdict (episode 17) said the counts were lies and the wiring was the liar. So tonight I stopped patching the old rig and did the thing you’re supposed to do from the start: tear it all down and rebuild on a bare breadboard, one wire at a time, with the meter confirming every step before the next one goes in.

Dedicated 5 V onto the rails: 5.00 V. Same 5 V at the sensor’s own solder pads — so the power chain was honest end to end. Then the dividers, and that’s where I had to eat something.

All this time, my “divider” resistors sat in series — between the encoder wire and the GPIO — because in my head a resistor in the path protects the pin from 5 V. It doesn’t. A GPIO input draws essentially no current, and Ohm’s law is merciless about it: no current, no voltage drop. The full 5 V had been sailing through my “protection” and arriving at pins rated for 3.6 V absolute max, the whole time. What actually divides voltage is a resistor chain that current flows through — one from the signal, one down to ground, pin tapping the midpoint. I knew that shape from diagrams. I’d just built a different one.

Then the new divider refused to divide — 5 V barely sagged to 4.97 V — and that broke a second assumption. The firmware’s own comments said these outputs idle high through an internal pull-up. They don’t. They’re push-pull: the sensor drives the line hard in both directions, and a shunt resistor alone can’t argue with it. The fix is the classic two-resistor divider (2k in series, 2k+1k to ground), which finally metered a safe, solid 2.94 V at both nodes.

The rebuild had its comedy. I metered “5 V” between two systems that shared no ground wire and learned that a voltage between two floating islands is a measurement of nothing. I plugged a rail jumper into the pin next to GND — which is VIN — and briefly fed 5 V into my own ground bus. A magnet press jolted a shunt resistor’s leg loose and one node crept to 4.40 V while connected to a pin; the series resistor quietly capped the current and the pin lived. Every one of these mistakes got caught by the same boring discipline: meter it, then connect it.

And then the payoff. With the circuit finally known — not assumed, known — I pressed the magnet on the two hall chips and watched the live stream: channel A fired. Then channel B fired. B — the channel that has read zero since the very first session — put ten clean edges on the counter through the entire new chain. Both sensors work. And the full test battery came back silent everywhere it should be silent: zero phantom edges at every duty, both directions, where the old wiring screamed fifty thousand a second. The electrical war is over, and we won.

Which leaves the one part that never joined the party. Drive the motor, disc spinning right past two proven-working sensors: nothing. Run a magnetised screwdriver over those same sensors: counts. The disc — the little brown ferrite ring whose alternating poles are the entire point of the encoder — isn’t putting out enough field to trip its own chips. That’s the whole remaining fault, cornered on a circuit I now trust completely.

One uncomfortable footnote: ferrite pole patterns are exactly the kind of thing a strong magnet erases, and that disc has had a booster magnet stacked on it and a magnetic screwdriver dragged over it more than once today. Some of that may have been self-inflicted. The strong magnet and the disc are separated permanently now.

Next session is short and decisive: plug the second motor’s encoder into this proven rig and hand-turn its disc. If it counts, I’ve confirmed the diagnosis and I’m holding a working spare. And the logic analyzer that’s already in the post gets clipped straight onto A and B — no firmware, no divider, just the raw truth off the wire.