The Smart Sitting Posture Reminder: a chair pad that notices when you've slumped
A thin pad slips under a chair cushion, with four pressure sensors quietly reading how your weight is spread across the seat. Sit evenly, and nothing happens. Lean to one side or slump for too long, and a gentle light — then a soft buzz — reminds you to sit back up straight.
What you're building
A chair-mounted wellness gadget that teaches pressure sensing and gentle, non-annoying alerts.
The Smart Sitting Posture Reminder is a thin sensor pad that sits between a chair and its cushion. Four pressure sensors — one near each corner of where you'd sit — constantly measure how your weight is distributed. When all four read roughly balanced, you're sitting evenly, and the system stays quiet. When one side or corner carries noticeably more weight than the others for too long, a yellow LED lights up first as a gentle hint, and if the imbalance continues, a soft buzzer and red LED kick in — not to startle you, just to nudge you back toward sitting straight.
Pressure Sensing
Four sensors read how your weight is spread across the seat in real time.
Timed Detection
A short imbalance is ignored — only sitting unevenly for a while triggers a reminder.
Gentle Reminder
A soft light and light buzz nudge you to sit up, without ever being alarming.
Materials list
Most electronics can be reused from a beginner Arduino sensor kit.
Electronics
- 1x Arduino Uno
- 4x FSR (force-sensitive resistor) sensors
- 4x 10k-ohm resistors (voltage dividers for the FSRs)
- 1x 16x2 LCD display with I2C backpack
- 1x small buzzer
- 3x LEDs (green, yellow, red) + 220-ohm resistors
- Jumper wires + breadboard
- USB cable or small power bank
Build supplies
- A thin foam chair pad or seat cushion
- Thin cardboard or felt (sensor spacing guide)
- Hot glue gun (low-heat, used carefully near foam)
- Craft knife (adult use only)
- Fabric tape (to secure sensor wiring flat)
Circuit diagram
Four pressure sensors feed analog readings into the Arduino, which drives the LEDs, buzzer, and LCD.
Tip: Space the four FSR sensors evenly under the cushion — one toward each corner of where a person would sit — so the readings genuinely reflect left/right and front/back balance. Keep all grounds connected together.
Wiring reference table
| Component | Component Pin | Arduino Pin |
|---|---|---|
| FSR 1 (front-left) | Signal | A0 |
| FSR 2 (front-right) | Signal | A1 |
| FSR 3 (back-left) | Signal | A2 |
| FSR 4 (back-right) | Signal | A3 |
| Green LED (Balanced) | Anode | D5 |
| Yellow LED (Leaning) | Anode | D6 |
| Red LED (Reminder) | Anode | D7 |
| Buzzer | Signal | D8 |
| 16x2 LCD (I2C) | SDA / SCL | A4 / A5 |
| All components | GND | Common GND rail |
Step-by-step build instructions
Work through these in order — test the sensors on the bench before building them into a chair pad.
-
Wire the four FSR sensors
Build a simple voltage divider for each FSR using a 10k-ohm resistor, and connect their outputs to A0 through A3.
-
Test each sensor's readings
Upload a basic test sketch that prints all four values to the Serial Monitor, and press on each sensor individually to confirm its reading rises clearly under pressure.
-
Add the LEDs and buzzer
Wire the green, yellow, and red LEDs to D5, D6, and D7, and the buzzer to D8, as shown in the wiring table.
-
Add the LCD display
Connect the 16x2 LCD's SDA/SCL to A4/A5 so you can watch all four readings and the current posture status live.
-
Build the sensor pad
Mark four positions on a thin foam pad matching where a seated person's weight naturally falls, and fix one FSR at each position with fabric tape, keeping the wiring flat.
-
Upload the code and sit for a baseline test
Upload the sketch below, sit normally and evenly, and check the LCD shows all four readings reasonably close together.
-
Calibrate the imbalance threshold and timer
Adjust IMBALANCE_THRESHOLD and REMINDER_DELAY in the code until the system reliably catches real slouching without triggering on normal shifting.
-
Slip the pad under your chair cushion
Place the finished sensor pad under your regular seat cushion, with the Arduino and wiring tucked safely to one side, and test it during normal sitting.
Arduino code
Copy this into a new sketch in the Arduino IDE. Install the LiquidCrystal_I2C library first from the Library Manager.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// ---- Pin setup ----
#define FSR1_PIN A0 // front-left
#define FSR2_PIN A1 // front-right
#define FSR3_PIN A2 // back-left
#define FSR4_PIN A3 // back-right
#define LED_GREEN 5
#define LED_YELLOW 6
#define LED_RED 7
#define BUZZER_PIN 8
LiquidCrystal_I2C lcd(0x27, 16, 2);
int IMBALANCE_THRESHOLD = 180; // gap between highest & lowest reading (calibrate this)
unsigned long REMINDER_DELAY = 15000; // 15 seconds of leaning before the full reminder
unsigned long leanStartTime = 0;
bool isLeaning = false;
void setup() {
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
lcd.init();
lcd.backlight();
}
void loop() {
int fl = analogRead(FSR1_PIN);
int fr = analogRead(FSR2_PIN);
int bl = analogRead(FSR3_PIN);
int br = analogRead(FSR4_PIN);
int total = fl + fr + bl + br;
bool seatOccupied = total > 100; // ignore readings when chair is empty
int highest = max(max(fl, fr), max(bl, br));
int lowest = min(min(fl, fr), min(bl, br));
int imbalance = highest - lowest;
if (seatOccupied && imbalance > IMBALANCE_THRESHOLD) {
if (!isLeaning) {
isLeaning = true;
leanStartTime = millis();
}
} else {
isLeaning = false;
leanStartTime = 0;
}
updateStatus(seatOccupied, imbalance);
updateDisplay(fl, fr, bl, br, seatOccupied, imbalance);
delay(200);
}
void updateStatus(bool seatOccupied, int imbalance) {
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_RED, LOW);
noTone(BUZZER_PIN);
if (!seatOccupied) {
return; // chair is empty, everything stays off
}
if (!isLeaning) {
digitalWrite(LED_GREEN, HIGH); // sitting evenly
} else if (millis() - leanStartTime < REMINDER_DELAY) {
digitalWrite(LED_YELLOW, HIGH); // gentle early hint
} else {
digitalWrite(LED_RED, HIGH);
tone(BUZZER_PIN, 900, 150); // soft, short reminder tone
}
}
void updateDisplay(int fl, int fr, int bl, int br, bool seatOccupied, int imbalance) {
lcd.setCursor(0, 0);
if (!seatOccupied) {
lcd.print("Seat empty ");
} else if (!isLeaning) {
lcd.print("Posture: Good ");
} else if (millis() - leanStartTime < REMINDER_DELAY) {
lcd.print("Keep it even... ");
} else {
lcd.print("Sit up straight!");
}
lcd.setCursor(0, 1);
lcd.print("Gap:");
lcd.print(imbalance);
lcd.print(" ");
}
Beginner tip
Everyone's natural sitting pressure is a little different. Sit normally and note the readings on the LCD first, then set IMBALANCE_THRESHOLD a bit above what you see during ordinary, comfortable shifting in your seat.
Safety notes for young makers
Ask an adult to help with wiring and with placing the hot glue gun carefully, since it's being used near foam. Keep the buzzer volume gentle — this project is meant to nudge, not startle. This gadget is a fun posture-awareness project, not a medical device or a substitute for advice from a doctor or physical therapist about back pain or posture concerns.
Why this project works so well for learning
The Smart Sitting Posture Reminder teaches a subtle but important robotics idea: not every alert should fire instantly. Comparing four sensor readings to find the highest and lowest introduces working with several values together instead of just one. Using millis() to require a sustained imbalance before buzzing — rather than reacting to every small shift — is a real lesson in designing alerts that help rather than annoy, the same thinking behind good notification design in any product. And staging the response (quiet, then a light, then a sound) is a gentle introduction to escalation logic.
Frequently asked questions
What age group is this robotics project best suited for?
Ages 9 and up can build this with an adult helping on wiring and sensor placement. Ages 12+ with some Arduino experience can usually manage most of it, including calibration, independently.
Do I need to know how to code to build this?
No. The code above uploads and runs as-is. The one hands-on coding step is adjusting IMBALANCE_THRESHOLD and REMINDER_DELAY during calibration, which is a great first edit for a beginner.
Why does it wait before buzzing instead of reacting right away?
People naturally shift in their seat all the time without actually slouching. The delay built into REMINDER_DELAY makes sure the reminder only fires for a real, sustained imbalance — not a normal fidget.
Can I build this with fewer than four sensors?
Yes, two sensors (left and right) can detect side-to-side leaning on their own. You'll lose the front-to-back slouch detection, but the wiring and code are easy to simplify by removing the extra two FSR lines.
Will this fix bad posture on its own?
Not by itself — it's a helpful reminder, not a cure. It works best as a gentle nudge alongside good sitting habits, and anyone with ongoing back or posture concerns should talk to a doctor or physical therapist.

Comments
Post a Comment