←

A wearable that notices before you do

Posture Patch

Feel a buzz. Sit up. Keep working.

A haptic wearable that tracks upper-body tilt and buzzes when you slouch — no app, no screen, no account.

The Posture Patch enclosure with the lid closed, showing the recalibrate button and status lens

Scroll to explore ↓

Inside

Every part, in its place.

Scroll to build it — one component at a time.

  1. 01 · Sense

    MPU6050

    6-axis IMU — accelerometer and gyro fused into one tilt angle.

  2. 02 · Compute

    Arduino

    Gyro bias on boot, complementary filter in the loop, motor pin on 5.

  3. 03 · Haptic

    Coin motor

    The only output. No LEDs, no display — just a buzz you can ignore or obey.

  4. 04 · Input

    Recalibrate button

    Hold still, press once. That angle becomes the new baseline.

  5. 05 · Wear

    Patch housing

    Small enough to sit on the upper back through a long study session.

  6. 06 · Logic

    Hold + gate

    Bad posture and a settled body for 2 seconds. Then the motor goes high.

Why

I only noticed I was slouching when my back already hurt.

After hours at a laptop my shoulders crept forward and my lower back rounded — but I caught it too late. I wanted one object that does this and nothing else: feel the pattern early, nudge me, get out of the way.

Why it’s built this way

Four problems. Four fixes.

01 · The problem

You only notice slouching when you’re already sore — shoulders forward, lower back rounded, session already wrecked.

The fix · Catch it early

If tilt stays 5° past your baseline for two seconds, a coin motor buzzes. Sit up and it stops. No charts, no streak, no lecture.

02 · The problem

Posture cameras and phone apps need a screen in your face — the same rectangle that pulled you into the slouch.

The fix · No app

The patch is the whole interface. Wear it, press to calibrate, keep working. The only feedback is haptic.

03 · The problem

“Sit up straight” is a lecture, not a measurement. People don’t share one upright.

The fix · Your baseline

A button on pin 10 writes the current fused angle as baseline. Recalibrate when you change chairs, not when a model says so.

04 · The problem

Reaching, stretching, or shifting in the chair looks like slouching if you only watch tilt.

The fix · Ignore fidgets

The gyro has to stay quiet (magnitude under 1.0). If the body is moving, the hold timer resets.

Try it yourself

Try the real thing.

Slouch the figure, hold still for two seconds, feel the buzz. Press recalibrate to make that lean your new upright.

Live firmware loop

Upright.

Same rules as the Arduino sketch: 5° past baseline, body settled, then two seconds. Recalibrate to claim the current lean as upright.

Fused

0.0°

Baseline

0.0°

Deviation

0.0°

Hold

0.0s

SettledMotor low

Drag or use the slider · hold still to fire the motor · phone buzzes if vibration is allowed

How it was made

How it all came together.

The housing with the lid removed — main board, MPU6050 breakout, and coin motor wired inside
Lid off — board, IMU, and coin motor seated in the housing
Exploded view of the Posture Patch with the lid, main board, IMU breakout, and coin motor separated
Exploded — four parts and the wiring between them

01

It started as a sore back, not a brief.

I wanted something I could forget I was wearing — light, quiet, and honest about when I actually slumped, not when I glanced at a notebook.

02

Breadboard first, then the filter.

MPU6050, motor, and a button on a bench. Accel-only tilt wandered. A complementary filter (0.95 gyro, 0.05 accel) and a 300-sample gyro bias on boot made the angle something I could trust.

03

The first firmware nagged too much.

Any dip past 5° fired the motor. I added a 2-second hold and a motion gate so fidgeting and a quick reach didn’t count as a slouch.

04

One button, one job.

Sit how you mean to sit, press, done. The baseline is personal and cheap to reset — more useful than a perfect enclosure on day one.

05

Next is thinner, not smarter.

The interesting upgrade isn’t another app. It’s graphene 2D tattoos — sensors that could sit closer to the skin than a rigid IMU board.

The specs.

0°

slouch threshold

0 s

hold before buzz

0-axis

MPU6050 IMU

0

gyro bias samples

ArduinoMPU6050Adafruit SensorComplementary filterCoin vibration motorI2C

posture_patch.ino


  float gx = g.gyro.x;
  float gy = g.gyro.y;
  float gz = g.gyro.z;
  float gyroMag = sqrt(gx * gx + gy * gy + gz * gz);

  bool postureBad = deviation > threshold;
  bool bodySettled = gyroMag < 1.00;

  if (postureBad && bodySettled) {
    if (!slouching) {
      slouching = true;
      slouchStart = now;
    }

    if (now - slouchStart >= holdTime) {
      alertOn = true;
    }
  } else {
    slouching = false;
    alertOn = false;
    slouchStart = now;
  }

  if (alertOn) {
    digitalWrite(motorPin, HIGH);
  } else {
    digitalWrite(motorPin, LOW);
  }