3D Printed Chair With Designed Chair Safety System

by Ranvi25 in Circuits > Arduino

23 Views, 0 Favorites, 0 Comments

3D Printed Chair With Designed Chair Safety System

FHFKFC8MM59LHOP.png
F3T0073MM59KPOK.jpg

We’ve all been there. You’re at a family gathering or a party, and you finally find the perfect chair—the one with the best cushion and the perfect view of the TV. You get up for just a second to grab a snack or a drink, and when you come back, someone else is sitting in your spot! You try to tell them it’s your chair, but they just won't budge.

I decided that enough was enough. I needed a way to protect my territory.

Introducing the Security Throne: a smart chair that knows when an intruder is sitting in it. Using an Arduino Uno, an Ultrasonic "Tripwire" sensor, and a Servo-powered poker, this chair gives unauthorized users exactly ten seconds to enter the secret PIN before it starts an annoying "poking" sequence to get them to move!

Whether it's a sibling, a cousin, or a friend, your seat is now a high-tech fortress.

Supplies

Chair Skeleton

  1. 3D Printed Base: 1 piece
  2. 3D Printed Seat: 1 piece (Custom designed, approx. 30 x 30 cm).
  3. Adhesive
  4. Sandpaper: Mixed grit (80 for shaping, 220 for a smooth finish).

Circuits and Safety System

  1. LCD - (i2c module)
  2. Micro servo
  3. Ultrasound sensor
  4. Arduino Uno or above
  5. 4x4 keypad
  6. 20 to 30 jumper wires
  7. LiquidCrystal i2c Library
  8. Keypad Library

The Goal and Concept

The goal of this project is to create a chair that protects itself from unauthorised users. Using an Arduino Uno, an Ultrasonic sensor detects when someone sits down. If they don't enter the correct PIN on the 4x4 Keypad within 10 seconds, a Servo-powered arm begins to "poke" them until they leave or enter the code.

Circuit and Mechanical Assembly

IMG_20260227_204644.jpg
Screenshot 2026-02-28 084840.png

In this step, we combine the wiring and the physical "poker" mechanism.

The Mechanical Build:

The Servo Motor is mounted to the side of the chair frame. Attached to the servo horn is a "poking arm" (you can use a 3D-printed part or a wooden dowel).

The HC-SR04 Ultrasound sensor is mounted under the seat or on the backrest to detect the user's presence.

The Wiring (Hardware):

1. Ultrasonic Sensor (Distance/Proximity)

  1. VCC: Connect to Arduino 5V.
  2. GND: Connect to Arduino GND.
  3. Trig: Connect to Digital Pin 12.
  4. Echo: Connect to Digital Pin 13.

2. Servo Motor (Lock/Movement)

  1. Red (Power): Connect to Arduino 5V.
  2. Brown/Black (Ground): Connect to Arduino GND.
  3. Yellow/Orange (Signal): Connect to Digital Pin 9.

3. 4x4 Keypad (Security Input)

A membrane 4x4 keypad typically has 8 pins. Starting from Pin 1 (usually the leftmost when looking at the front):

  1. Pins 1–4 (Rows): Connect to Digital Pins 2, 3, 4, and 5.
  2. Pins 5–8 (Columns): Connect to Digital Pins 6, 7, 8, and 10.
  3. Note: We skipped Pin 9 because the Servo is using it.

4. I2C LCD (Status Display)

Using an I2C module (the small board on the back of the LCD) is highly recommended to save pins.

  1. GND: Connect to Arduino GND.
  2. VCC: Connect to Arduino 5V.
  3. SDA (Data): Connect to Analog Pin A4.
  4. SCL (Clock): Connect to Analog Pin A5.

if you are done with all the wiring it should look like the image at the top of this step but that is quite messy so here is another more graphic version using Autodesk Tinkercad below it .


The 3D Printed Chair

Screenshot 2026-02-28 091639.png

Above is a draft for the chair .The initial phase of this step focused on establishing a stable center of gravity within a compact footprint. Using Autodesk Fusion 360, I developed a parametric model to ensure the structural integrity of the stool's base and seating surface.

Here is a bit of a explanation of what I did

  1. Base Specification: I began by sketching a center-point rectangle on the XY plane. The dimensions were constrained to 312mm x 312mm to meet the specific requirements of my build environment.
  2. Volumetric Extrusion: The profile was extruded to a height of 40mm. This thickness was chosen to provide the necessary weight and lowered center of mass required for a free-standing stool of this scale.
  3. Seating Ergonomics: I projected the top face of the base to create the seating profile. The seat was designed with a slight overhang to improve user comfort while ensuring the perimeter did not exceed the tipping point of the base.
  4. Edge Refinement: To eliminate sharp stress concentrations and improve the tactile finish, I applied a 5mm Fillet to all primary edges using the Modify Tool.
  5. Export for Production: The finalized geometry was inspected for manifold errors and exported as a High-Resolution STL file, ready for slicing and additive manufacturing


What is needed:

  1. 3D Printed Base: 1 piece
  2. 3D Printed Seat: 1 piece (Custom designed, approx. 30 x 30 cm).


You'll first need access to a 3d printer to make the Base and the Seat of the chair. These parts were specially designed so the 50 mm PVC pipe could fit into the gaps and with a small amount of adhesive would fit perfectly. The files for the 3D print are listed here:




Assembly and Finishing

We are almost done to make sure you get your Vengeance on those pesky Chair stealers, so now after you have gotten your 3D Prints back gather all the rest of your supplies and we will add the finishing touches to the chair


Item that will be needed:

  1. Sandpaper or "wet and dry"
  2. Adhesive
  3. PVC Pipe
  4. Your 3D Prints

Lets start with sanding the 3D Prints

For a professional finish on a 3D-printed stool, you should use a progression of 80, 120, 220, and 400 grits but if you are looking to keep it simple I suggest a 220 or 120 grit piece of Sandpaper

At the finishing polishes Wet sanding is highly Suggested as the Plastic filament could melt due to the friction Heat

Once you are done with The sanding you can start assembling

First lightly sand the inner hole where the PVC pipe will enter then push the pipe in and you are done with a fully functioning Stool/Chair.

Code

The last step before you finally get to use your safety masterpiece. on your Arduino Uno from earlier connect the USB port to a Device, if the device is a Handheld then use the ArduinoDroid app But if it is a PC or Desktop Then use the Official Arduino IDE.

The Code

#include <Keypad.h>

#include <LiquidCrystal_I2C.h>

#include <Servo.h>


// --- Settings ---

const String SECRET_CODE = "1234";

const int SIT_DISTANCE = 50; // Distance in cm to detect a person

unsigned long timerStart;

bool personSitting = false;

bool authenticated = false;


// --- Pins ---

const int SERVO_PIN = 9;

const int TRIG_PIN = 12;

const int ECHO_PIN = 13;


// --- Setup ---

LiquidCrystal_I2C lcd(0x27, 16, 2);

Servo pokerServo;

const byte ROWS = 4, COLS = 4;

char keys[ROWS][COLS] = {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}};

byte rowPins[ROWS] = {2, 3, 4, 5}, colPins[COLS] = {6, 7, 8, 10};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);


String input = "";


void setup() {

lcd.init();

lcd.backlight();

pokerServo.attach(SERVO_PIN);

pokerServo.write(0); // Rest position

pinMode(TRIG_PIN, OUTPUT);

pinMode(ECHO_PIN, INPUT);

}


void loop() {

long distance = getDistance();

char key = keypad.getKey();


// 1. Check if someone just sat down

if (distance < SIT_DISTANCE && !personSitting) {

personSitting = true;

authenticated = false;

input = "";

// Initial attention poke

pokeAction();

lcd.clear();

lcd.print("ENTER PASSWORD:");

lcd.setCursor(0, 1);

lcd.print(" :-) "); // Funny emoji

timerStart = millis(); // Start the 10s countdown

}


// 2. Check if they stood up (Reset)

if (distance > SIT_DISTANCE && personSitting) {

personSitting = false;

authenticated = false;

lcd.clear();

lcd.print("Chair Empty");

delay(500);

}


// 3. Logic while person is sitting

if (personSitting && !authenticated) {

// Handle Keypad Input

if (key) {

if (key == '#') { input = ""; lcd.setCursor(0,1); lcd.print(" :-) "); }

else {

input += key;

lcd.setCursor(0,1);

lcd.print("Code: " + input);

if (input.length() == SECRET_CODE.length()) {

if (input == SECRET_CODE) {

authenticated = true;

lcd.clear();

lcd.print("PASS CONFIRMED");

lcd.setCursor(0, 1);

lcd.print("WELCOME USER!");

} else {

lcd.clear();

lcd.print("WRONG! *POKE*");

pokeAction();

input = "";

delay(1000);

lcd.clear();

lcd.print("ENTER PASSWORD:");

}

}

}

}


// 4. The 10-second "Poking" Timeout

if (millis() - timerStart > 10000) {

lcd.setCursor(0,1);

lcd.print("TOO SLOW! POKE!");

pokeAction();

delay(500); // Wait a bit before poking again

}

}

}


// Function to move servo back and forth

void pokeAction() {

pokerServo.write(60); // Poke out

delay(300);

pokerServo.write(0); // Pull back

}


long getDistance() {

digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2);

digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10);

digitalWrite(TRIG_PIN, LOW);

return pulseIn(ECHO_PIN, HIGH) * 0.034 / 2;

}



It is also attached to a PDF file Below

Use

Now you have your secret weapon, a chair with a sting,

A high-tech protector, a motorised thing!

The sensor is watching, so you better be wary,

If you sit without permission, things might get hairy.


A "Warning Poke" greets you—a tap on the back,

To let you know clearly your PIN is what’s lacked.

The LCD flickers with a smiley-face grin,

"Ten seconds," it says, "to type the code in."

If the keypad is silent or the numbers are wrong,

The poking gets steady, and the poking gets strong!

But type in the password, the "Welcome" will show,

The servo stays still and the pokes cease to go.

Security comfort is a wonderful thing,

A chair with a brain and a mechanical swing!

From Ranvijay Paul,