CC
All work

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

Role
Team lead and technical director — concept, firmware (easeOut, debounce), presentations
Scale
6 people · 256 pixels · 150 × 150 cm · planning in March → exhibition in June
Tools
Arduino Nano ×52 · SG90 ×256 · light sensor module ×256 · GPT-4 · Fusion 360 · Maya · 3D printing
With
Chung-Ang University, College of Art & Technology
Cover image for Interactive Art Graduation Project ‘Anonymous’

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.

Try it full screen

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

The signal flow of Anonymous in five steps. 1 Light: a single spotlight lights the wall from behind the visitor, and mirrors that catch the light tilt upward and reflect it onto the ceiling. 2 Shadow: when a visitor stands in front of the light source, the low light casts a shadow larger than the body across the wall. 3 Sensor: 256 light sensor modules, one per tile, read the shadow and respond only when it stays dark for 0.5 seconds or more. 4 Servo: 52 Arduino Nanos each handle only five sensors and five servos, moving 20% of the remaining angle every 15 ms. 5 Mirror: only the mirrors in the shadow turn to face forward and reflect the visitor, and they return immediately when the visitor leaves. 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.

256mirror pixels
52Arduino Nanos
0.5 sshadow hold before response
16perfboards
4months

A grid pattern left on the ceiling by the tilted mirrors. 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.

Isometric render of the L-shaped horn we designed. A round ring that fits on the servo shaft and a plate that holds the mirror are joined at a right angle.
The L-shaped horn, drawn straight from the STL. The round ring goes on the servo shaft, the plate on the back of the mirror.
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
Front, side, top, and isometric renders of the L-shaped horn.
Front · side · top · isometric. The hole in the side view is where the servo shaft goes.
Five 3D printers under purple light running side by side.
The printer room that ran all night. On Jun 24 we were still counting toward a target of 310.
Servo brackets and light sensors set in a grid on a black-painted MDF board.
The MDF before the mirrors went on. One servo bracket per tile position, and one light sensor at its lower right.

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.

A desk at night. An Arduino Nano held in one hand is lit up, with a breadboard and six servos lined up. 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

  1. 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
  2. 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
  3. 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
  4. 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
A dozen or so servos, light sensor modules, and perfboards scattered on a desk.
May 30. Servos, light sensor modules, and the perfboards the sockets go into.
Two soldered perfboards. Red and white wires converge on four Nano sockets.
Each perfboard carries four Nanos, twenty servos, and twenty sensors. We soldered all sixteen by hand.
Servos, brackets, and sensors standing in rows on a black board, with a team member assembling in the background.
Jun 24. The line for screwing servos into brackets and standing up sensors.
A team member attaching mirrors behind a wall dotted with green lights.
Jun 27. Attaching mirrors behind the wall after moving it to Seoul. The green dots are the sensor modules' power indicators.

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).