Skip to content
the box

A fortune-telling game built around a crystal box. Moving the object across the canvas lights up a luminous trace; setting it down — like a dice roll — stops the trace and reveals a single sentence of fortune. The box becomes a physical die that generates meaning through placement and stillness.

Concept

The audience is handed a crystal object that conceals a joystick and a push button. On a dark canvas, their movement leaves a glowing trail; when the button is pressed, a halo settles at the final position and a sentence of fortune surfaces from the darkness. The interaction compresses the whole ritual of divination into one continuous gesture — wander, commit, receive.

Process

The build ran through three overlapping stages: sensor testing, the Arduino-to-TouchDesigner bridge, and fabrication. Each one hit its own wall before the next one could start.

Sensors

The inputs are simple — a photosensor to detect when the box is set down, and a push button to confirm the throw — but both needed tuning against the real room. The photosensor threshold shifted with ambient light; hand placement covered it or exposed it depending on how the object was held. These tests sorted out where on the enclosure each sensor had to live.

Photosensor + button test rig
Photosensor + button test rig
Breadboard — photosensor through a pull-down resistor
Breadboard — photosensor through a pull-down resistor
Button mount test
Button mount test
Daylight threshold check
Daylight threshold check
Enclosure — first fit
Enclosure — first fit
Side-grip placement
Side-grip placement
Ambient-drift shielding
Ambient-drift shielding

Arduino → TouchDesigner

Once the sensors were reliable, the next step was piping their state into TouchDesigner over serial. Bouncing button signals and a backed-up serial buffer produced a noticeable response delay at first; both were fixed in firmware. A randomizer patch then turned the button count into non-repeating fortune lines.

Photosensor reading
Photosensor reading
Arduino sketch — threshold logic
Arduino sketch — threshold logic
TD serial input — 0/1 button state
TD serial input — 0/1 button state
Arduino pin mapping
Arduino pin mapping
First TD parameter wired to button
First TD parameter wired to button
Debounce — pull-down resistor
Debounce — pull-down resistor
Serial buffer trimmed
Serial buffer trimmed
Non-repeating randomizer
Non-repeating randomizer
Click counter → switch
Click counter → switch
Button state → text alpha
Button state → text alpha

Fabrication

A fully translucent acrylic sphere with reactive interior lighting was the ideal, but sourcing and shaping acrylic at that scale proved impractical. The final form settled on an acrylic box filled with cotton diffuser wrapped around an embedded LED strip — soft enough to let light bleed through, solid enough to hold like a talisman.

IMU → TD axis tuning
IMU → TD axis tuning
Two-pot rig simulating x/y for wireless test
Two-pot rig simulating x/y for wireless test
Acrylic sphere attempt
Acrylic sphere attempt
Cotton-diffused LED interior
Cotton-diffused LED interior
Base form — fits box or ball
Base form — fits box or ball

Observations from Testing

  • People instinctively hold the object from the side, not from above — the photosensor needs to sit where a natural grip covers it.
  • In a dimly-lit room, ambient light drift can trigger the sensor; the threshold has to be tuned to the exhibition environment.
  • The screen and the box compete for attention — with LEDs on the object and motion on the screen, the object can be forgotten. The voice-reactive background had the same problem when the mic lived on the laptop rather than the object itself.
  • The core interaction works. Next iterations will expand the fortune database beyond ten lines and add a proper randomizer so repetitions disappear.

Proposal: the Fortune-Telling Game

The first proposal kept the interaction to one gesture: move, settle, read. A joystick hidden inside a crystal-like object, a push button for the commit, a canvas that lights up along the trajectory and holds the last halo until the next throw.

Game sketch — trace and halo
Game sketch — trace and halo
Light trace mid-move
Light trace mid-move
Easter egg — hover-triggered audio
Easter egg — hover-triggered audio
Joystick reference study
Joystick reference study
Reference — Arduino Project Hub
Reference — Arduino Project Hub

Alternate Concept: 镜花水月 / Through the Looking Glass

A companion idea running in parallel — "flowers in the mirror, moon in the water," the classical Chinese metaphor for untouchable illusion. The audience holds a sphere representing the moon; a motion sensor inside reads their balance. An animated body of water plays on a screen set under a transparent water tank, and the moon's reflection only stabilizes when the sphere is held perfectly still. The reflection can never be lifted out — the point is to learn how still you can hold.

Sphere as the moon
Sphere as the moon
Balance sensor diagram
Balance sensor diagram
Animated water and reflection
Animated water and reflection
Reflection stabilises when sphere holds still
Reflection stabilises when sphere holds still
Installation model — tank above screen
Installation model — tank above screen

Videos