Tangible Choir

Little Laulupidu

A physical choir installation: eight rods control individual recorded voices, with lights providing feedback.

Created as a course project in the Estonian Academy of Arts’ Interaction Design MA (IxD.ma) by members of Team 2024.

Main result video · 1 min 39 sec. Open or download the MP4.

News coverage

TV3 Eesti / TV3 Estonia · 6 July 2025 · 1 min 44 sec. TV3 uudised: Tudengid panid nukud laulupeo laule laulma.

The physical build

The prototype uses a wooden cabinet, eight rod mechanisms linked to potentiometers, two door sensors, individual rod lights, and a NeoPixel strip. The intended interaction starts when both doors are open; moving the rods changes the mix of the choir parts. The current recordings include Ohjad and Tuljak.

Prototype interior with eight geared rod mechanisms, wiring, speakers, and Arduino electronics.
Inside the prototype, May 2025.
LED strip and three-wire connector during assembly.
LED strip connection during assembly.
PartCurrent role
Arduino MegaReads eight pots and two sensors; drives rod-light PWM and NeoPixels.
Raspberry Pi 5Runs Pure Data and plays the choir recordings.
USB serialTransfers sensor/pot readings to Pure Data at 9600 baud.
Creative Pebble speakersStereo sound output from the Pi.
Annotated build wiring diagram
Annotated Fritzing diagram showing the Mega, eight pots, two sensors, transistor LED driver, and NeoPixel connections.
Open the full diagram. Editable source: docs/Hardware/wiring/wiring.fzz.

Diagram and firmware pins disagree; confirm the pin map and power connections before soldering a shield.

The planned next revision is a soldered Mega shield with labeled connectors and a confirmed pin map. ESP32-S3 is an alternative I/O controller to evaluate once board models and sensor/lighting voltages are known.

Software and signal flow

Software flow: sensors and pots feed the Mega; telemetry passes through arduino.pd into main.pd and the soundfile players, then to speakers. The Mega independently drives the lights.
Open the software diagram.

Browse the repository for the patches, firmware, and audio assets.

Development

  1. Wiring and power: confirm the actual parts, agree the pin map, fix the missing R5/R6 ground net in the model, and design the lighting supply and drivers.
  2. Firmware: separate the two sketch variants into buildable folders and clear all light outputs when a door closes.
  3. Pure Data control flow: evaluate both doors once per complete frame and load the selected song before starting playback.
  4. Reliable operation: validate serial frames, handle stale data/reconnects, pin deployment settings, and define audio completion, stereo, gain, and fades.

Tests: firmware probes, wiring checks, Arduino CLI builds, headless Pd tests, and a virtual serial fixture. The initial baseline has 7 passing and 13 failing tests; see the results for scope and setup.

Download the technical review · Download the baseline results

From the repository root:

python3 tests/review_tests.py
python3 tests/serial_fixture.py --seconds 60

Setup: tests/README.md.

Project sources

Project notes: docs/README.md in the Obsidian vault.

Team