Intangible Interaction — Professor Yeseul Song

Dimmy the Cube: Development Journal

A photophobic 100mm cube that lives in an illuminated wooden arena, fleeing light and resting in the dark.

Concept

Dimmy is a small cube that wants to avoid light. It lives inside a 3×3 foot wooden enclosure lined with a NeoPixel LED strip — one white LED every inch along the inner perimeter. The arena's four corner sensors plus eight inner-wall ultrasonic sensors continuously map the light distribution across the space. Every five seconds Dimmy reads those sensor inputs, and if one side of the arena is brighter than the others, it rolls away — two flips at a time — toward the darker corner.

When the light is even — or absent — Dimmy settles. After about a second and a half of stillness it begins to breathe: a slow, deep 8-second scale cycle. Occasionally it emits a brief warm firefly glow, as if thinking. The moment light becomes directional again, both effects vanish and Dimmy tenses up, waiting for its next decision window.

Interactive Simulation

Move your mouse across the canvas to illuminate the arena. The LEDs brighten near the cursor. Dimmy will read the sensor array every 5 seconds and roll away from the light source. Keep the mouse still or off the canvas and watch Dimmy settle into its breathing state.

Top-down simulation. Mouse = light source. Cyan markers = ultrasonic sensors.

The Arena

The physical enclosure is a 3×3 foot wooden box with 0.5-inch thick walls. Each foot is represented as 120 pixels in the simulation, giving a 360×360 px interior surrounded by a 120 px border — the physical gap around the box. The wood colour is a mid-toned brown; the outer border represents the table or shelf surface the arena sits on.

ParameterPhysicalSimulation
Arena interior3 ft × 3 ft360 × 360 px
Scale1 foot120 px
Wall thickness0.5 inch5 px
Cube size100 mm~39 px
LED spacing1 inch10 px
Total LEDs144144

LED Strip

A NeoPixel strip runs clockwise around the inside perimeter of the enclosure — one addressable white LED every inch, 144 total. In the simulation each LED's brightness is driven by the distance from the mouse cursor, with a smooth falloff between 1 inch (full) and 10 inches (off). Two layered glow ellipses at 40 px and 20 px diameter give the warm pooling effect of real diffused LEDs on a wooden surface.

Sensor Array

Twelve ultrasonic sensors are arranged in two groups:

In the simulation each sensor is drawn as a small housing disc with two concentric rings — a top-down view of an upward-facing transducer. A transparent cyan activation circle grows in radius and opacity as the light source approaches, visualising the sensor's reading.

The decision logic averages LED brightness across each of the four walls (N / S / E / W). If the maximum wall reading minus the minimum is below 0.05, the light is considered even and Dimmy stays put. Otherwise it scores each movement direction by the brightness of the opposite wall and picks the best two-flip route away from the light.

Cube Behaviour

Dimmy moves by rolling — pivoting over one edge at a time. Each flip is one cube-width (100 mm). The standard move is two flips in the chosen direction; if two flips would leave the arena, Dimmy takes one flip instead. If blocked on all sides it waits for the next five-second window.

The top-down rolling animation is a genuine projection: as the cube tips over its pivot edge the visible footprint collapses to a line at the midpoint, then expands on the far side — recreating what you would actually see looking straight down at a rolling cube.

Idle State — Breathing & Firefly Glow

Three conditions must all be true before Dimmy enters its comfortable idle state:

  1. No active flip animation.
  2. No inter-flip pause (the brief gap between the two flips of a move pair).
  3. Wall light readings are balanced — no directional threat.

Once all three hold, a comfort factor ramps from 0 to 1 over ~1.5 seconds. The cube breathes — scaling ±20% over an 8-second sinusoidal cycle — with amplitude proportional to the comfort factor, so it eases in rather than popping on. At comfort > 0.5 a firefly schedule opens: random warm-yellow glow pulses every 1.8–6 seconds, each decaying exponentially over ~30 frames. The instant any condition fails the comfort factor drops to zero, both effects vanish, and the glow is zeroed.

Next Steps

The simulation is a design and logic testbed. Physical build goals: