"The Bluest Eye"
"The Bluest Eye"
Final IMA Project - David MartinezCruz - Viola's Section
First and foremost, I wanted to conceptualize the idea I had in my head. Therefore, I decided to sketch and color my design. I found myself stuck between whether I should make my eyes look more human-like or doll-like. Ultimately, deciding on the eye color led me to choose a human-like appearance. In choosing the color blue, I was quickly reminded of one of my favorite novels, "The Bluest Eye" by Toni Morrison. This book depicts and confronts the self-hatred and destructive behaviors that Black women engage in to fit into the hegemonic image of beauty and whiteness.
In the novel, the main character Pecola experiences a split in consciousness due to severe trauma, ultimately believing that God has gifted her with blue eyes. Based on this decision, I chose to make the eyes not only human-like but to also include an additional layer of realism by adding blood vessels and veins. By incorporating these elements, I believe the overall aesthetic becomes eerie, which perfectly captures the feeling I wanted to convey, as well as the themes portrayed in the novel.
This combination of influences creates a unique representation that resonates with the complexities of identity and societal expectations. By integrating both the visual aspects of the eyes and the underlying message from Morrison’s work, I aim to provoke thought and emotion in those who engage with my design. My intent is not only to create a visual representation but also to encourage a deeper conversation about beauty, self-perception, and cultural narratives.
3D mapping and design took me much longer than I had initially expected or wanted. Knowing that I wanted my eye to be quite large, I realized that 3D printing would take a significant amount of time—13 hours, to be exact. I had only “one chance” to perfect this, so I had to be precise with my measurements. It was crucial to ensure that the two holes in the center were an exact fit for the ultrasonic sensor; if they were too large, the ultrasonic sensors would fit too loosely, leading to complications such as detecting the corners of the eye as a presence or object. Conversely, if the holes were too tight, the sensor would not function properly, and cutting the 3D model was not an option.
Initially, I thought that anything beyond the base of the design would not be printed, which is why I allowed my pupil and iris to extend beyond the base. I had to readjust and slice it during the setup on the Bambu lab. During one of the printing sessions, I encountered a significant obstacle: 40 minutes into a print, I realized that a part of the eye was not connected to the iris and pupil. I had stayed with the print for the first eight minutes to ensure that nothing was wrong, so I am unsure at what point the issue occurred.
Nonetheless, I persevered and reprinted the design.
Fabrication and Production
I believe 3D printing my entire eye was the one and only option, mainly for the convenience it provided, as I was able to get exactly what I needed. Although the 3D printing took roughly 13.5 hours, including setbacks, it came out perfectly (well, kind of). I wanted it to be printed in white carbon fiber, but the only available color oddly was this aqua-green shade. To mask the green, it took about 5-6 layers of white paint. Between each drying layer, it would have taken about 30-40 minutes; however, thinking smartly, I reduced that to 10 minutes by using a blow dryer in the men's locker room to speed up the process for each layer, as well as for all other paint jobs.
By far, the hardest and most time-consuming part was painting the iris. If I wanted this eye to look realistic, I needed to pay close attention to the depth and complexity of a blue eye. I found many reference photos and mixed various shades of blue, created different striations, and added black and white for depth and highlights. Painting the entire eye white took about 2 hours, but painting the iris alone took 2.5 to 3 hours. Creating and painting the blood vessels took around 1.5 hours, using different shades of red for each vessel and employing materials from a large yarn. Painting the veins on the eye and around the socket took roughly 40 minutes to an hour.
Apart from the painting and creation of the eye, wiring and coding were relatively straightforward. Although I initially wired a servo motor to the Arduino, it was ineffective since it was too light to move this heavy eye. I added a buzzer to emit a sound when someone approached the eye. This decision was influenced by my interpretation of the book. I wanted the eye to represent Pecola; although in the novel she never actually acquires blue eyes (despite genuinely believing she did), I aimed to convey her paranoia and delusion. I wanted the eye to move around and follow the user, showing that she—or "it"—is watching. When someone gets too close, it emits a buzzer sound; the farther away you are, the lower the sound, while the closer you get, the louder it becomes, illustrating that it is present and "afraid."
Coding the process, I wanted to create a visual aid resembling a radar state that works in conjunction with the buzzer. The Processing IDE display shows red beams emanating from the center; similar to the buzzer, the closer you are to the ultrasonic sensor, the shorter the beams appear, while the farther away you are, the longer they extend.
Conclusion...
The primary goal of my project was to create a realistic depiction of an eye that not only captures aesthetic appeal but also provokes thought on beauty, identity, and cultural narratives, drawing inspiration from Toni Morrison's "The Bluest Eye." I believe I achieved this goal, as the audience responded with a mix of intrigue and reflection, engaging with the themes of self-perception and societal expectations. The interactive elements, such as the eye's movement and sound responses, enhanced the audience's engagement, allowing them to perceive the eye as a watchful entity, reminiscent of Pecola's struggles with identity.
Reflecting on my experiences, I realized that the setbacks, especially during the 3D printing process, provided valuable lessons in patience and precision. If given more time, I would explore alternative design strategies to ensure a smoother printing experience and possibly enhance the eye's interaction capabilities. Ultimately, this project has reinforced my understanding of the intricate relationship between artistic creation and audience interaction, leaving me with a sense of accomplishment in my ability to fuse art with deeper societal commentary.
.
#define TRIG_PIN 9
#define ECHO_PIN 10
#define BUZZER_PIN 6
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
long duration, distance;
// Trigger the ultrasonic sensor
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Measure the duration of the echo
duration = pulseIn(ECHO_PIN, HIGH);
// Calculate distance in cm
distance = (duration * 0.034) / 2;
// Print the distance to the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
// Volume control logic based on distance
if (distance < 10) { // Very close
analogWrite(BUZZER_PIN, 300); // Full volume
delay(100); // Repeats every 100ms
noTone(BUZZER_PIN); // Ensure buzzer turns off
} else if (distance < 30) { // Close
analogWrite(BUZZER_PIN, 130); // High volume
delay(300); // Repeat every 300ms
noTone(BUZZER_PIN); // Ensure buzzer turns off
} else if (distance < 50) { // Nearby
analogWrite(BUZZER_PIN, 50); // Moderate volume
delay(500); // Repeat every 600ms
noTone(BUZZER_PIN); // Ensure buzzer turns off
} else {
noTone(BUZZER_PIN); // Turn off if more than 40 cm
}
delay(150); // Short delay to avoid rapid signal changes
}
import processing.serial.*;
Serial myPort; // Create a Serial object
int distance = 0; // Variable to store distance data
float angle = 0; // Angle for the rotating radar beam
float sweepSpeed = 2; // Speed of the radar sweeping motion
int radarRange = 400; // Maximum range for the radar visualization
void setup() {
size(800, 800); // Set the size of the window
myPort = new Serial(this, "/dev/cu.usbmodem11101", 9600); // Initialize serial communication
println("/dev/cu.usbmodem1101"); // Print the selected port for debugging
}
void draw() {(myPort.available() > 0) {
String val = myPort.readStringUntil('\n'); // Read until a newline character
if (val != null) {
val = trim(val); // Trim whitespace and newlines
if (val.startsWith("Distance: ")) {
String distanceStr = val.substring(10); // Remove "Distance: " prefix
try {
distance = Integer.parseInt(distanceStr); // Parse as integer
println("Distance: " + distance); // Print distance for debugging
} catch (NumberFormatException e) {
println("Error parsing distance: " + e.getMessage()); // Handle parsing errors
}
}
}
}
background(0); // Set the background to black
drawRadar(); // Draw the radar visuals
angle += sweepSpeed; // Update the angle for sweeping beam
if (angle > TWO_PI) { angle = 0; } // Reset angle after a full sweep // Draw the radar beam based on distance, constrained to radar range
drawRadarBeam(angle, constrain(distance * 2, 0, radarRange)); // Scale distance for visual effect
}
void drawRadar() { // Draw radar dish
stroke(255); // Set stroke to white
noFill(); // No fill for the radar dish
ellipse(width / 2, height / 2, radarRange * 2, radarRange * 2); // Draw radar dish outline // Draw radar rings with gradient effect
for (int i = 1; i <= 5; i++) {
stroke(255, 50 * i); // Vary opacity for depth
strokeWeight(i); // Increase stroke weight for depth
ellipse(width / 2, height / 2, radarRange * 2 * i / 5, radarRange * 2 * i / 5);
}
// Draw the center circle representing the radar eye
fill(100, 100, 255, 200); // Semi-transparent blue color for the center
ellipse(width / 2, height / 2, 30, 30); // Center circle
}
void drawRadarBeam(float angle, float distance) {
stroke(255, 0, 0, 150); // Set stroke color of the scanning beam to semi-transparent red
strokeWeight(3); // Set thickness of the beam // Calculate the endpoint based on angle and distance
float endX = width / 2 + cos(angle) * distance;
float endY = height / 2 + sin(angle) * distance; // Draw the scanning beam line with a gradient effect
for (int i = 0; i < 5; i++) {
stroke(255, 0, 0, 150 - i * 30); // Gradual fade for beam effect
line(width / 2, height / 2, endX + i * cos(angle) * 2, endY + i * sin(angle) * 2);
}
}
.