Upon Closer Inspection (2025) – Queenie Wu

Thank you Brian for helping me out in the documentation lab!

Thank you Brian for helping me out in the documentation lab!

Obsessions, compulsions, and what happens when you zoom out

When approaching this project, I was intrigued by the idea of making something “useless”, denying the user of an obvious or only function. Eventually I thought about what obstacles would actually be helpful in my life. Can obstruction or moment of friction become a moment of understanding?

I would never say I’m the most detail oriented person in the world, except when it comes to my own pitfalls. More often than not, we are our own biggest critics. But what if we were forced to only see ourselves at a distance most others see us at? Would we view ourselves differently? Would this change our self critiques? Would we be easier on ourselves?

How it’s made

For its input, I chose a Time-of-Flight sensor. These work by shooting a laser and gives and analog reading on what millimeter distance the laser stops, aka, how far something is in front of it. This came in handy when placing my sensor inside its container. I used the code we wrote in class to start the canvas for this project.

Analog input of a proximity/distance sensor

Source | Datasheet

#include <Adafruit_VL53L0X.h>
#include <Servo.h>

Servo servoMotor;
int servoPin = 9;
long lastMoveTime = 0;

Adafruit_VL53L0X sensor = Adafruit_VL53L0X();
// set up a max distance to look 
const int maxDistance = 2000;

void setup() {
  Serial.begin(9600);
  servoMotor.attach(servoPin);
  if (!Serial) delay(3000);

  if (!sensor.begin()) {
    Serial.println("Sensor not responding, check wiring");
    while(true);
  }
    // SENSE_HIGH_SPEED SENSE_HIGH_ACCURACY SENSE_DEFAULT
    sensor.configSensor(Adafruit_VL53L0X::VL53L0X_SENSE_LONG_RANGE);

    sensor.startRangeContinuous();
}

For an output, I followed the ITP servo motor lab, and learned about how to control angle using an analog output. I constrained the values from the distance sensor to be realistic for someone standing in front of it (after a bit of testing and refinement), and mapped it to a 180 degree angle for the servo motor. Get too close, and the mirror will turn around completely.

Analog output of a servo motor and its angle

Source

void loop() {
  
  if(sensor.isRangeComplete()){
    int result = sensor.readRangeResult();
    if(result < maxDistance){
      Serial.println(result);
    }
    int servoAngle = map(constrain(result, 0, 400), 0, 400, 180, 0);

    if (millis() - lastMoveTime > 20) {
      servoMotor.write(servoAngle);
      lastMoveTime = millis();
    }
  }
}

I attached the mirror onto the motor, and got the system to test:

IMG_2830.MOV

1E2A5712.JPG

Next, was beautifying the conceptual product. First, Chrissy had an extra mini breadboard, so I transferred everything over and cut some wire to make it compact for a potential home. I scavenged our ITP junk shelf, and got lucky enough to find the perfect two-part 3D printed cylinder. I drilled a hole the perfect size for the sensor, and soldered the motor wires to help it lay flat.

Learnings and Reflections

My biggest learning from this project was more about housing and ergonomics than it was about circuits. The project worked really well when placed at chest level, but as a table item, it didn’t respond to a body’s natural instinct to lean in instead of walk/shift towards the mirror. I would have considered placing the ToS sensor closer to the mirror than on the bottom of the stand, which could have also helped avoid some ghost sensing of the surface it’s on.

Overall, I also learned that a project doesn’t have to be complex for it to be interesting.