時間 (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
