← Work 03 / 04
Project 03

Gaze-primed ring interface

Two IMUs on one finger are both drowning in the same noise. That turns out to be the useful property, not the problem.

RoleSole author
StatusHost pipeline built
StackC++, nRF52840, Python
GateMeasured CMRR

The question

An input device you wear on one finger has to distinguish a deliberate flexion from the hand simply moving through space. A single IMU cannot: whole-arm motion swamps the articulation signal by an order of magnitude, and no amount of filtering separates them cleanly because they occupy the same band.

The approach here is to put a second IMU on the adjacent phalanx and treat whole-hand motion as a common-mode signal to be rejected, exactly as a differential amplifier rejects interference on a twisted pair. The articulation is the difference between the two. Whether that works depends entirely on how well the two sensors are correlated, which is an empirical question with a number attached.

How it was built

  • Sensor pair — two ICM-42688-P IMUs on a shared CLKIN line, so their sample instants coincide. Without that, the differencing operation introduces more error than it removes.
  • Commit and engagement — a force-sensing resistor under the thumb for deliberate confirmation, and a capacitive electrode to tell worn-but-idle from worn-and-active.
  • Mechanical — a parametric two-ring C-cuff assembly, open-profile so it fits a range of finger sizes without a per-user build, joined by flex cable.
  • Wire protocol — binary framing with CRC-16/CCITT-FALSE. Cheap to compute on an nRF52840 and catches the burst errors a flexing cable actually produces.
  • Host pipeline — protocol module, parser, and a CMRR analysis toolkit, all validated against synthetic signals with known ground truth before touching real hardware.

Why it's staged the way it is

The whole design rests on one assumption, so the roadmap has a hard go/no-go gate on measured common-mode rejection before any significant hardware spend. If the two IMUs aren't correlated enough, no downstream cleverness recovers it and the right decision is to stop.

Building the host-side analysis first, against synthetic data, means the gate can be evaluated the day the sensors arrive rather than weeks later — and means a disappointing result can't be quietly explained away by an untested toolchain.

What I'd do differently

The first cuff revisions were parameterised on finger diameter alone, which produced assemblies that fitted and still rotated under load. Circumference and taper both matter, and a rotating ring destroys the fixed relative geometry the entire method assumes.