Skip to content

Touch Me Not

Slide

Concept

The starting point was deceptively simple:
What is the most legible way for a chair to say no?

A chair's primary proposition is an invitation to sit. Disrupting that invitation required identifying a mechanism that could make refusal readable—not as malfunction, but as intent.

We explored different mechanisms:

  • Swivel
  • Rotating the seat away from an approaching user
  • Sliding
  • Retracting the seat horizontally when approached
  • Folding
  • Collapsing the seat upward when a human approaches

We aligned with the folding direction because: - The motion is unambiguous - The seat withdraws into itself - It clearly denies the surface of rest
→ It becomes a refusal with a posture


Version 1

Task Allocation

Once the concept was defined, the project was divided to enable parallel work. Tasks were allocated based on: expereince and intrest but there was strong cross-collaboration across all domains. Documentation was a shared responsibility

Team Member Responsibilities
Auxence Mechanical + custom component design
Dhrishya V2 software & electrical, video, slides
Mohit Ideation, enclosure, assembly & integration
Yara Initial software & electrical, assembly & integration

Mechanical Design

The entire 3D design had to be adapted to the chair, ensuring that every component is securely fixed to it and remains stable when the motors are running. Most of the 3D modeling was done in SolidWorks and Rhino, then 3D printed on the Bambu Lab printers at IAAC. The different parts are assembled using screws and threaded inserts, which keep the structure rigid and prevent any movement when the motors apply force on the seat to fold it.

  • Designed to integrate securely with the chair
  • Ensures stability under motor actuation
  • Easily removabl and no permanent damage or impact to the chair

Tools used: - SolidWorks - Rhino - Bambu Lab 3D printers (IAAC)

Key features: - Screws + threaded inserts for rigidity - Non-slip material added to contact surfaces - Prevents movement during operation - All parts: - Printable without supports - Provided in HTML documentation

../../images/week11/wokwi.jpg

../../images/week11/wokwi.jpg


Electrical Design

Key Notes

  • Ground of Barduino and motor must be connected
  • Servo motors include a fourth wire (function still unclear)

../../images/week11/wokwi.jpg

../../images/week11/wokwi.jpg


Software

Motor Test Code

#include <ESP32Servo.h>

Servo myservo;
int pos = 0;

void setup() {
  myservo.attach(11);
  Serial.begin(9600);
}

void loop() {
  myservo.write(0);
  delay(1000);
  myservo.write(90);
  delay(1000);
}

1 Servo + PIR Sensor

#include <ESP32Servo.h>

Servo servo1;
int servoPin1 = 11;
int pirPin = 15;
int pirState = 0;

void setup() {
  Serial.begin(9600);
  servo1.attach(servoPin1);
  servo1.write(0);
  pinMode(pirPin, INPUT);
}

void loop() {
  pirState = digitalRead(pirPin);

  if (pirState == HIGH) {
    Serial.println("Motion detected!");
    servo1.write(90);
    delay(2000);
  } else {
    servo1.write(0);
  }

  delay(2000);
}

Iterative Problem Solving

Issues & Solutions

  • Poor grip on chair legs
  • Motor housing rotated instead of lifting seat
  • ✅ Solution: added rubber tape for friction

../../images/week11/wokwi.jpg

  • Insufficient motor torque
  • Single motor could not lift seat
  • ✅ Solution: added second servo

  • 3D print structural weakness

  • Holes too small, walls too thin
  • Plastic bulged under screw pressure
  • ✅ Solution: redesigned components

../../images/week11/wokwi.jpg

  • Unreliable PIR sensor
  • Triggered randomly
  • Required shielding
  • ✅ Solution: switched to ultrasonic sensor

Final Version

Machine Components

Component Purpose Spec Link
Barduino 4.0.2 Control + logic CERN OHL V1.2 https://fablabbcn-projects.gitlab.io/electronics/barduino-docs/
FeeTech Servo Motion FT5335M https://www.pololu.com/file/0J1434/FT5335M-specs.pdf
Proximity Sensor Human detection Seeed 101020010 Link
Computer 5V power Mac NA
DC Power Supply 7V servo power LABPW3005N NA
Custom Components Structure + motion See files

Software (Final Version)

2 Servos + Ultrasonic Sensor

// (code unchanged — included fully)
#include <ESP32Servo.h>

const int US_PIN      = 4;
const int SERVO1_PIN  = 18;
const int SERVO2_PIN  = 17;
const long TRIGGER_DIST_CM = 70;
const int  CONFIRM_READS   = 3;

Servo servo1;
Servo servo2;

bool triggered  = false;
int  closeCount = 0;

void moveSync(int target1, int target2, int stepDelay = 12) {
  int cur1 = servo1.read();
  int cur2 = servo2.read();
  int steps = max(abs(target1 - cur1), abs(target2 - cur2));

  if (steps == 0) return;

  for (int i = 1; i <= steps; i++) {
    servo1.write(cur1 + (target1 - cur1) * i / steps);
    servo2.write(cur2 + (target2 - cur2) * i / steps);
    delay(stepDelay);
  }
}

long readDistanceCm() {
  pinMode(US_PIN, OUTPUT);
  digitalWrite(US_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(US_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(US_PIN, LOW);

  pinMode(US_PIN, INPUT);
  long duration = pulseIn(US_PIN, HIGH, 30000);

  if (duration == 0) return -1;
  return duration * 0.034 / 2;
}

void setup() {
  Serial.begin(115200);

  servo1.attach(SERVO1_PIN, 500, 2500);
  servo2.attach(SERVO2_PIN, 500, 2500);

  servo1.write(90);
  servo2.write(90);

  delay(1000);
}

void loop() {
  long dist = readDistanceCm();

  bool isClose = (dist > 0 && dist < TRIGGER_DIST_CM);

  if (isClose) closeCount++;
  else closeCount = 0;

  if (closeCount >= CONFIRM_READS && !triggered) {
    triggered = true;
    moveSync(180, 0);
    moveSync(60, 120);
  }

  if (!isClose && triggered) {
    triggered = false;
  }

  delay(100);
}

Final Mechanical Design

For the final version, we updated the 3D files of the motor supports to make them more solid and to ensure the inserts fit better and stay stable. In the previous iteration, the holes were too small and the surrounding walls too thin, which caused the prints to crack and the inserts to come loose when tightening the parts onto the chair. We also added an enclosure to house the Arduino and the wiring, hiding them from view and giving the machine a more finished look rather than a prototype appearance.

One remaining limitation is the power supply: the Arduino still needs to be powered at 5V through a laptop connection, and the motors require 7V and 4A from an external power supply. As a result, the machine doesn't yet appear fully self-contained, we simply don't have suitable batteries for this setup at the moment.

  • Reinforced motor supports
  • Improved insert fit and wall thickness
  • Prevented cracking during tightening
  • Added enclosure:
  • Hides wiring
  • Improves visual finish

Limitation

  • Not fully self-contained:
  • Arduino requires USB power
  • Motors require external 7V / 4A supply

Future Improvements

  • Solder connections
  • For a more permanent machine we would solder the electrical components rather than using a breadboard - for this design we chose not to solder because we wanted to be able to fully repurpose the Barduino and other components. Since we had an enclosure for the board and associated wires, the design served its purpose in the current form.

  • Portable power

  • The servo we chose required an odd 7V power sources. We chose to keep this aspect of the project simple by using our labs DC Power Supply. For a more permanent installation we would need to specify and integrate a battery or converter coupled with an alternative supply.

  • Aesthetics

  • The servo we chose required an odd 7V power sources. We chose to keep this aspect of the project simple by using our labs DC Power Supply. For a more permanent installation we would need to specify and integrate a battery or converter coupled with an alternative supply.

Final Design Files