勞輪

ROOM_1.

勞輪

ROOM_1.

時間 (Year): 2023

時間 (Year): 2023

類型 (Category): Installation Art

類型 (Category): Installation Art

時間 (Year): 2023

類型 (Category): Installation Art

PARTS

PARTS

PARTS

  • Silicone Face Mask (×1)

  • 12V, 2 Inch Linear Actuator (×1)

  • Arduino Uno Board (×1)

  • 5V-24V Forward/Reverse Motor Controller Board (×1)

  • 12V, 3A Power Supply Cord (×1)

  • 12”×16”, 6mm Thick Plexiglas Sheet (×6)

  • 29ml Black Food Dye (×2)

  • 5.3 Gallon Water Storage Tank (×2)

  • Portable Water Pump (×1)

  • Waterproof Caulk & Sealant (×1)

  • Painter’s Tape (×1)

  • Silicone Face Mask (×1)

  • 12V, 2 Inch Linear Actuator (×1)

  • Arduino Uno Board (×1)

  • 5V-24V Forward/Reverse Motor Controller Board (×1)

  • 12V, 3A Power Supply Cord (×1)

  • 12”×16”, 6mm Thick Plexiglas Sheet (×6)

  • 29ml Black Food Dye (×2)

  • 5.3 Gallon Water Storage Tank (×2)

  • Portable Water Pump (×1)

  • Waterproof Caulk & Sealant (×1)

  • Painter’s Tape (×1)

  • Silicone Face Mask (×1)

  • 12V, 2 Inch Linear Actuator (×1)

  • Arduino Uno Board (×1)

  • 5V-24V Forward/Reverse Motor Controller Board (×1)

  • 12V, 3A Power Supply Cord (×1)

  • 12”×16”, 6mm Thick Plexiglas Sheet (×6)

  • 29ml Black Food Dye (×2)

  • 5.3 Gallon Water Storage Tank (×2)

  • Portable Water Pump (×1)

  • Waterproof Caulk & Sealant (×1)

  • Painter’s Tape (×1)

ASSEMBLY

ASSEMBLY

ASSEMBLY

The hardest part of this project was ensuring that the liquid inside the tank didn't leak, making the design of a reliable tank the main task for me. I used a laser cutter to cut out finger joints for five of the six pieces of Plexiglas. Then, I used painter’s tape to tape all sides of the tank before applying waterproof sealant to seal all the sides.

The hardest part of this project was ensuring that the liquid inside the tank didn't leak, making the design of a reliable tank the main task for me. I used a laser cutter to cut out finger joints for five of the six pieces of Plexiglas. Then, I used painter’s tape to tape all sides of the tank before applying waterproof sealant to seal all the sides.

For the functionality of the linear actuator, I used an Arduino Uno board to command the forward/reverse motor board and, through the motor board, control the actuator's motion.

For the functionality of the linear actuator, I used an Arduino Uno board to command the forward/reverse motor board and, through the motor board, control the actuator's motion.

The hardest part of this project was ensuring that the liquid inside the tank didn't leak, making the design of a reliable tank the main task for me. I used a laser cutter to cut out finger joints for five of the six pieces of Plexiglas. Then, I used painter’s tape to tape all sides of the tank before applying waterproof sealant to seal all the sides.

For the functionality of the linear actuator, I used an Arduino Uno board to command the forward/reverse motor board and, through the motor board, control the actuator's motion.

VIDEO IN ACTION

VIDEO IN ACTION

VIDEO IN ACTION

In "room_1.,” I try to capture the endless repetition and relentless rhythm of the Sisyphean cycle. Here, a tank filled with black liquid that cradles a human head, a silent sentinel to life's ceaseless ebb and flow. Each ascent of the face from the depths is a brief respite in the unyielding tide of existence. These moments, luminous yet fleeting, echo the ephemeral nature of our joys and sorrows. As the face submerges once more, it's a solemn reminder of our return to life's depths, embodying the perpetual struggle against the inescapable pull of time and fate.

ABOUT

ABOUT

In "room_1.,” I try to capture the endless repetition and relentless rhythm of the Sisyphean cycle. Here, a tank filled with black liquid that cradles a human head, a silent sentinel to life's ceaseless ebb and flow. Each ascent of the face from the depths is a brief respite in the unyielding tide of existence. These moments, luminous yet fleeting, echo the ephemeral nature of our joys and sorrows. As the face submerges once more, it's a solemn reminder of our return to life's depths, embodying the perpetual struggle against the inescapable pull of time and fate.

In "room_1.,” I try to capture the endless repetition and relentless rhythm of the Sisyphean cycle. Here, a tank filled with black liquid that cradles a human head, a silent sentinel to life's ceaseless ebb and flow. Each ascent of the face from the depths is a brief respite in the unyielding tide of existence. These moments, luminous yet fleeting, echo the ephemeral nature of our joys and sorrows. As the face submerges once more, it's a solemn reminder of our return to life's depths, embodying the perpetual struggle against the inescapable pull of time and fate.

PROBLEM SOLVING

PROBLEM SOLVING

PROBLEM SOLVING

The actuator has a small extrusion at the bottom, making it unsuitable for placement inside the tank. Cutting it off would be too difficult, so I laser-cut many layers of black Plexiglas for the actuator to sit on, ensuring it could remain comfortably stable.

The actuator has a small extrusion at the bottom, making it unsuitable for placement inside the tank. Cutting it off would be too difficult, so I laser-cut many layers of black Plexiglas for the actuator to sit on, ensuring it could remain comfortably stable.

The actuator has a small extrusion at the bottom, making it unsuitable for placement inside the tank. Cutting it off would be too difficult, so I laser-cut many layers of black Plexiglas for the actuator to sit on, ensuring it could remain comfortably stable.

CODE SNIPPET

CODE SNIPPET

CODE SNIPPET

// Define pin numbers
const int forwardPin = 13;
const int reversePin = 12;
const int stopPin = 7;

void setup() {
  // Initialize the pins as outputs
  pinMode(forwardPin, OUTPUT);
  pinMode(reversePin, OUTPUT);
  pinMode(stopPin, OUTPUT);

  // Start the serial communication
  Serial.begin(9600);
}

void loop() {
  // Extend the actuator
  Serial.println("Stopping actuator...");
  digitalWrite(forwardPin, HIGH);
  countdown(10); // Stopping for 10 seconds

  // Stop the actuator
  Serial.println("Extending actuator...");
  digitalWrite(forwardPin, LOW);
  digitalWrite(stopPin, HIGH);
  countdown(8); // Extending for 6 seconds

  // Retract the actuator
  Serial.println("Stopping actuator...");
  digitalWrite(stopPin, LOW);
  digitalWrite(reversePin, HIGH);
  countdown(10); // Stopping for 10 seconds

  // Stop the actuator
  Serial.println("Retracting Actuator...");
  digitalWrite(reversePin, LOW);
  digitalWrite(stopPin, HIGH);
  countdown(8); // Retracting for 6 seconds
}

void countdown(int seconds) {
  long startTime = millis();
  int remaining = seconds;

  while (millis() - startTime < seconds * 1000) {
    if ((millis() - startTime) / 1000 > (seconds - remaining)) {
      remaining--;
      Serial.print("Time remaining: ");
      Serial.println(remaining);
    }
  }
}

// Define pin numbers
const int forwardPin = 13;
const int reversePin = 12;
const int stopPin = 7;

void setup() {
  // Initialize the pins as outputs
  pinMode(forwardPin, OUTPUT);
  pinMode(reversePin, OUTPUT);
  pinMode(stopPin, OUTPUT);

  // Start the serial communication
  Serial.begin(9600);
}

void loop() {
  // Extend the actuator
  Serial.println("Stopping actuator...");
  digitalWrite(forwardPin, HIGH);
  countdown(10); // Stopping for 10 seconds

  // Stop the actuator
  Serial.println("Extending actuator...");
  digitalWrite(forwardPin, LOW);
  digitalWrite(stopPin, HIGH);
  countdown(8); // Extending for 6 seconds

  // Retract the actuator
  Serial.println("Stopping actuator...");
  digitalWrite(stopPin, LOW);
  digitalWrite(reversePin, HIGH);
  countdown(10); // Stopping for 10 seconds

  // Stop the actuator
  Serial.println("Retracting Actuator...");
  digitalWrite(reversePin, LOW);
  digitalWrite(stopPin, HIGH);
  countdown(8); // Retracting for 6 seconds
}

void countdown(int seconds) {
  long startTime = millis();
  int remaining = seconds;

  while (millis() - startTime < seconds * 1000) {
    if ((millis() - startTime) / 1000 > (seconds - remaining)) {
      remaining--;
      Serial.print("Time remaining: ");
      Serial.println(remaining);
    }
  }
}

// Define pin numbers
const int forwardPin = 13;
const int reversePin = 12;
const int stopPin = 7;

void setup() {
  // Initialize the pins as outputs
  pinMode(forwardPin, OUTPUT);
  pinMode(reversePin, OUTPUT);
  pinMode(stopPin, OUTPUT);

  // Start the serial communication
  Serial.begin(9600);
}

void loop() {
  // Extend the actuator
  Serial.println("Stopping actuator...");
  digitalWrite(forwardPin, HIGH);
  countdown(10); // Stopping for 10 seconds

  // Stop the actuator
  Serial.println("Extending actuator...");
  digitalWrite(forwardPin, LOW);
  digitalWrite(stopPin, HIGH);
  countdown(8); // Extending for 6 seconds

  // Retract the actuator
  Serial.println("Stopping actuator...");
  digitalWrite(stopPin, LOW);
  digitalWrite(reversePin, HIGH);
  countdown(10); // Stopping for 10 seconds

  // Stop the actuator
  Serial.println("Retracting Actuator...");
  digitalWrite(reversePin, LOW);
  digitalWrite(stopPin, HIGH);
  countdown(8); // Retracting for 6 seconds
}

void countdown(int seconds) {
  long startTime = millis();
  int remaining = seconds;

  while (millis() - startTime < seconds * 1000) {
    if ((millis() - startTime) / 1000 > (seconds - remaining)) {
      remaining--;
      Serial.print("Time remaining: ");
      Serial.println(remaining);
    }
  }
}

OTHER PHOTOS

OTHER PHOTOS

OTHER PHOTOS

  • The Digital Tank Model With Finger Joints

  • The Tank (After Assembling)

  • The Actuator +

    Black Plexiglas

  • Black Plexiglas

  • Arduino + Motor Control

  • The Digital Tank Model With Finger Joints

  • The Tank (After Assembling)

  • The Actuator +

    Black Plexiglas

  • Black Plexiglas

  • Arduino + Motor Control