Awards & Exhibitions · 2024
Interactive Art Graduation Project ‘Anonymous’
A kinetic artwork in which 256 mirror pixels read the visitor's shadow, and only the mirrors where the shadow falls turn to face the visitor. A graduation project that six people new to Arduino built with GPT-4 in four months.
OutcomeShown at the 2024 School of Art & Technology graduation exhibition — 16×16 mirror wall completed, opened Jun 28

When a visitor stands in front of the light, a shadow falls on the wall. Where the shadow stays for 0.5 seconds, the mirrors turn toward the visitor one by one, and what they show is you. Meeting yourself in the very place you thought you were hidden. That is all the work has to say.
The self behind the name
Anonymity gives people freedom and courage, but it also gives them the illusion that what they say is detached from its consequences. Anonymous (〈익명〉) is a wall that makes you live that illusion with your body. The shadow is you made anonymous, and the mirror shows back the person standing behind it.
It is a School of Art & Technology graduation project that six of us made over four months in the spring 2024 semester.
When a shadow stays for 0.5 seconds
Five steps from light to mirror. One pixel is one mirror, one servo, one sensor, and the same thing happens independently in 256 places.
- Pixels hit by light — tilt the mirror upward to reflect onto the ceiling. The whole wall looks white, and a grid pattern of light stays on the ceiling.
- Pixels where a shadow stays 0.5 seconds or more — turn the mirror to face forward. The visitor appears there.
- When the visitor leaves — they return immediately. Coming is slow; going is fast.
There is no central control. It is a fully distributed system in which each of 52 Arduino Nanos handles only five sensors and five servos. The servos run on an easeOut that moves 20% of the remaining distance every 15 ms, so the 256 of them each settle at their own pace.
Light reflected onto the ceiling, discovered while building the prototype. This light, which was never in the plan, became the last sentence of the artist’s note: “The consequences of anonymity reach places no one intended” (익명적 결과는 의도하지 않은 곳까지 미친다).
No one sold the part, so we made it
No one sold a part that fits onto the SG90 servo horn and holds the mirror in an L shape. We started from a public model, fitted its dimensions to ours in Fusion 360, and revised the hole at the tip of the horn and the L-shaped bend three times until it was our own part. Then we printed 256 of them. Below, you can open up how one pixel is assembled and how 256 of them come together into a wall.

- Part
- Servo horn adapter
arm_modified_03, third revision - Dimensions
- Plate 38 × 54 mm, 38 mm deep, PLA
- Quantity
- 256 + spares
- Printing
- Jun 13–25, running every school printer we could get in Anseong and Seoul, 20–40 a day
- Revisions
- Scale correction → back plate → hole at the horn tip → L bend, second pass



Working through unfamiliar problems with GPT-4
In March 2024, Arduino was new to all of us. The notes from our first meeting include the question, “If we get a motor running, is that engineering?” GPT-4 is part of why 256 servos were running four months later. It is taken for granted now, but back then it was a way of working we had never tried. Instead of searching for what we didn’t know, we narrowed it down in conversation; we pasted in code and worked out together why it didn’t run.
Night of May 26. A test of driving five servos from one Nano. This set is repeated 52 times.
- First circuit — The first code that turned light sensor values into servo angles was a blog example. It worked on the Uno but not on the Nano; we narrowed down why with GPT-4, and in the end it was a single setting: the old bootloader.
- Stopping the jitter — The analog sensor values fluctuated and the servos shook. Reading several times and averaging, clipping the range, moving only when the angle changes by more than a set amount: we learned these three from GPT-4 and put them in the code, and in the end switched to a digital module whose threshold is set with a potentiometer.
- Smooth motion — Code that moved one degree at a time with waits moved four servos one after another. With GPT-4 we designed a time-based non-blocking loop, easeOut, and the 0.5-second hold condition. That structure became the final firmware as it was.
- The road not taken — With GPT-4 we also wrote, in a single day, MediaPipe code that recognized people through a camera and sent the result over serial. It got as far as moving three servos, but for a concept built on shadows the light sensors were more honest, so we didn’t use it.
There were also clear limits to what GPT-4 could do. Burning out a Nano by wiring it without a resistor, turning the potentiometers on 256 light sensors one by one under the exhibition lighting, double-sided tape coming loose within a day: these we learned by hand. The answers came from conversation; the checking happened in front of the wall.
Four months
- MarchWe started with the idea of reproducing a grandmother's paintings with AI and changed direction four days later. The new starting point was the experience of our team being picked apart on the school's anonymous community board, and at the end of March we found the form of a pixel wall in Daniel Rozin's mechanical mirrors.Mar 20 first review
- AprilWe moved a single servo with a light sensor for the first time. While weighing Kinect and camera recognition, we got the advice that "light sensors alone will do it" and settled on shadows.Apr 16 first run
- MaySecond review with nine servos; specs fixed at Nano, SG90, and 10 cm tiles; scouting lighting, mirrors, and steel plate in Euljiro; and a 64-pixel prototype put up over three all-nighters.May 8 second · Jun 1 third review
- JuneCutting holes in the MDF, printing 256 horns, soldering 16 perfboards, and logistics back and forth between Anseong and Seoul. On the 25th we moved to Seoul and attached the mirrors, and on the 28th the exhibition opened.Jun 28 opening




As visitors step closer, the mirrors where their shadow falls turn around. Jun 28, 2024
What we dropped · where we got stuck
- Kinect and camera recognition — KRW 300,000–450,000, a distance of 2 m or more, coordinate conversion. In April we got the advice that “light sensors alone will do it” and dropped it. Reading shadows matched what the work was saying.
- Projection mapping — We considered it when the second review asked us to set the work apart more. We dropped it after the comment that “mirrors reacting to something the person didn’t do is a minus.”
- Wave and random sequences — We programmed up to six channels with a servo driver, but rejected it at the final demo because of the noise and the reflections spilling onto the neighboring team.
- Steel plate frame — We went as far as laser-cutting drawings, and the quote was KRW 600,000 per set. We switched to CNC-drilled MDF at KRW 138,000.
- MG996R servos — Sturdy, but they draw five times the current of the SG90. We would have needed eleven 5V 60A power supplies, so we settled on the SG90.
- Polarizing film — An early idea for making only the viewer standing directly in front visible. Not used in the final work.
The team
Carter Choi (team lead · technical director), Seohyun Bae (art director), Yangmyeong Yu (hardware), Heeseo Yun (project manager), Yejin Yun (design · drawings), Junhyeok Jang (software).
LOADING
- 01Acrylic mirror80 × 80 mm · 3 mm thick · double-sided tape onto the horn
- 02L-shaped horn · 3D printedMy own design · PLA · a ring onto the servo shaft + a mirror plate
- 03SG90 servo motor22.8 × 12.2 × 28.5 mm · 45° ↔ 70° · one per pixel
- 04Acrylic bracket36 × 35 mm · 3 mm thick · the enclosure the servo slots into
- 05L-bracket30 × 30 mm · stands the bracket up on the MDF
- 06Light sensor module4-pin digital · lower right of the tile · faces forward
- 07MDF front board12 mm thick · 90 mm pitch · 2 holes to run wires to the back
- 08Arduino Nano + perfboardOne Nano runs 5 sensors · 5 servos · 16 perfboards · 5V 60A power