A wearable that notices before you do
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.

Scroll to explore ↓
Inside
Scroll to build it — one component at a time.
01 / 06
MPU6050
01 · Sense
MPU6050
6-axis IMU — accelerometer and gyro fused into one tilt angle.
02 · Compute
Arduino
Gyro bias on boot, complementary filter in the loop, motor pin on 5.
03 · Haptic
Coin motor
The only output. No LEDs, no display — just a buzz you can ignore or obey.
04 · Input
Recalibrate button
Hold still, press once. That angle becomes the new baseline.
05 · Wear
Patch housing
Small enough to sit on the upper back through a long study session.
06 · Logic
Hold + gate
Bad posture and a settled body for 2 seconds. Then the motor goes high.
Why
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
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
Slouch the figure, hold still for two seconds, feel the buzz. Press recalibrate to make that lean your new upright.
Live firmware loop
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
Drag or use the slider · hold still to fire the motor · phone buzzes if vibration is allowed
How it was made


01
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
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
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
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
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.
0°
slouch threshold
0 s
hold before buzz
0-axis
MPU6050 IMU
0
gyro bias samples
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);
}