Glass Block Table Controller (Box 1-3)
DMX Light Control, Color Strobes
When warehouse 23 was a place that existed in Boston, there was a coffee table
made out of glassbricks. Below its translucent surface were several full color
LED light fixtures. When lit up, it looked like an oversize stack of Jolly
Ranchers. The table had been built and programmed by friends who lived there,
though I'm not specifically sure who. There was a simple Java web interface
running on an adjacent laptop to control its color. I expressed interest in
writing pattern code for it, but before I had my chance, my friend Frostbyte
died and warehouse 23 fell apart. Shortly thereafter, I moved to Boston and
joined my friends in helping to clean out the space. Being inadequately endowed
to repair what really mattered, I managed to salvage the table, but the
controller was lost.
I spent that winter in early 2006 (while half heartedly looking for a job)
working on a new controller for the dark table that now sat in the living
room of the Bennett Street Home For Wayward Boys (and Girl) where I'd come to
settle. The controller is called “The Box” for lack of any other name that
stuck. It has come in handy for many projects requiring light control. It was
designed to output DMX signals to 3 RGB LED fixtures (our living room wasn't
large enough to accomodate the full 4 light table). It allows the user to
make static color settings to each of the fixtures, fades, and strobes, using 3
control buttons and 3 analog sliders (like from a mixer board). An explanation
of its design and function will follow.
The first device built, "Box 1", distinguished by the parallel slider
arrangement on its face, went missing
years ago and is presumed effectively non-existent.
- The second, "Box 2", lives with my friend Sage in Boston.
Once the controller had been built, the table was again functional. It lasted
for several years, eventually settling in the Psi Trance Loft at Vermin Street
until its demise at a party when an errant drink destoyed two of the light
fixtures. The controller itself has made appearences in an ever evolving series
of art installations since that time. For the interested, a partial listing,
and perhaps some photographs:
July 2006: Firefly. The year of
mud. The glassbrick table made an appearance at this event, and I learned the
consequences of making heavy art.
October 2006: Playa Del Fuego. The
control box was used in an interactive installation entitled
"Fnorest", which really could have its own webpage.
Fnorest was a geodesic dome with a colored array of strings hanging
from the ceiling, filled with fog from a smoke machine, and strobing
architectural lighting. It was conceived of and built by Sage Kochavi, Dustin
Ledbetter, and Joshua Krueger quite accidently in one of those
you-got-peanut-butter-in-my-chocolate moments. It is possible the photos below
came from that time.
November 2006: NYC Decompression.
Fnorest once again made an appearance here, on the roof of a
warehouse in NYC.
May 2007: Playa Del Fuego. The
controller was used to power the "Zen Tables" in a lounge-like installation.
The Zen Tables are three differently shaped short kneeling tables with
transparent surfaces covered in sand. Designs drawn in the sand are highlighted
by the colored lights beneath. The tables were designed by Dustin Ledbetter and
built with the help of Doug Ruuska. I do not currently have photographic
evidence of this project.
August 2007: Burning Man (The Green
Man). The Zen Tables were set up in a Hookah Dome hosted by Kamp KAOS of the
August 2008: Burning Man (The American
Dream). The controller was used in a blinky dome at Kamp KAOS.
October 2009: Boston Decompression Party at Club Therapy in Providence RI. The
controller was used to run the lights for an interactive installation built by
Sage Kochavi entitled, "The Black Whole". This peice involved strobe lights
aimed at geometric patterns painted on the surface of a 6 foot diameter
revolving disc shaped table.
12V DC Input via wall wart. DMX Out via RJ45. The DMX signal is RS-485 at
250kbps consisting of 19 DMX channels (a dummy channel, 8 bits of Red, Green,
and Blue for each of 3 lights (addresses 1-9), and then the data from addresses
1-9 repeated just for fun). This partial DMX packet is sent out every 5ms.
It's been used with several
fixtures, including PDS-150's, Colorblazes, and (x).
The DMX is produced by an electronic circuit consisting of the following
modules: Power regulator, power sensor, cpu, transceiver, mode lights, buttons,
The box doesn't draw a lot of current, so a simple linear regulator (7805)
provides sufficient power without getting hot. There are some caps as recommended and a big fat cap
that keeps the voltage up for a few (5) seconds after power down. The voltage
divider on SNSE was chosen to work with the 12V wall wart that I was using and
may not work for the full input voltage range as indicated. Because of this,
I've occasionally had to pull the voltage supervisor off the board to get the
circuit to run.
SNSE is monitored by the voltage supervisor to give the cpu some advance warning
if the user has switched the unit off. Because of the fat cap, the cpu has an
eternity during which it can send out a DMX packet to turn off the lights,
giving the off-switch a more intuitive response than merely ceasing to send
The CPU is a PIC16F84A 8 bit microcontroller driven by a 20MHz resonator. It
has a programming header for the PICkit 3, and a reset circuit. Every 5 ms, it
reads the sliders, debounces the button inputs, calculates what color the lights
should be, sets the mode light, checks the voltage sensor, and sends out a DMX
The MAX490 does RS-485 level translation for the DMX output signal.
There are 8 LEDs on the front of the Box that are driven by a 3x8 decoder to
indicate to the user which mode the controller is in.
There are 3 buttons on the front of the Box that allow the user to change modes
and submodes. An additional button, on top of the box, acts as a reset. A
detailed explanation of their function is printed in the instructions.
There are three 100K potentiometer type sliders on the front of the box for user
input. These sliders are read using an RC timing circuit by first charging the
caps using the PIC output drivers, switching the drivers to tristate / input
mode, and measuring the amount of time the caps take to discharge through the
sliders in order to register as a 0 input to the PIC. The values chosen here
are the result of iterative tweaking rather than design. There are some limited
adjustments in the program code to compensate for variations in available
hardware, though it occurs to me that it would've been easier to add some pots
to the board for this purpose.
The circuit is housed in a plastic project box whose face was milled and drilled
to accommodate the sliders, buttons, and panel mount LEDs. The box also has an
on / off switch with an indicator LED, a reset button, and power and
communications wires coming out of it.
The circuit schematic was assembled using Kicad, a cross-platform open-source
schematic and layout capture tool for electronic design. The design does not
have a layout as it has been implemented by hand on perf-board in all of its
The software running the Box was developed using Piklab (a graphical development
environment for PIC micro-controllers) and the GPUtils toolchain. The current
version (Pattern7.asm) is written in PIC assembly.
The Box has a complex control scheme that can nevertheless be easily conveyed in
abbreviated form to a novice so that anyone can use it. The instructions for
Hardware Version 2, Software Version 8 are as follows:
M = Mode Button
L = Light / Select Button
C = Commit Button
R = Reset Button
S1, S2, S3 = Sliders
0 - 7 = Mode Indicator Lights
R = Red
Y = Yellow
G = Green
C = Cyan
B = Blue
M = Magenta
X = Black
W = White
The lights on the front of the box indicate which mode you are in.
The reset button (on top) returns to mode 0.
Push M to cycle through the following modes:
The lights are set to static white at 1/2 intensity. There are no controls in
RGB Color Selector
The lights are (as a group or individually) settable using the sliders to choose
the red, green, and blue component intensities. S1 = Red,
S2 = Green, S3 = Blue.
The Light Button toggles between which light(s) to effect in this sequence:
All (default), Light 1, Light 2, Light 3, None. A blue flash indicates the
selected light. A red flash indicates that no lights are selected. The Commit
Button saves the color of the selected light (indicated by a green flash) so
that when you switch to a new light, the now unselected light retains the set color.
HSV Color Selector
The lights are settable using the sliders to choose the hue, saturation, and
value components of the color. S1 = Hue, S2 = Saturation (whiteness), S3 = Value
(brightness). All of the buttons operate the same as in Mode 1.
Faders / Color Wash
This mode dynamically fades the lights through a selectable sequence of colors.
The overall brightness and speed are settable. Additionally, a third variable,
"Phase," can be set to determine how far the adjacent lights are from each other
in the pattern. S1 = Brightness, S2 = Phase, S3 = Fade Speed (Can be 0). The
Light Button toggles between these fader types: [RYGCBM], [RGB], [CMY], [RWB],
[RXGXBX], [RWGWBW], [CXMXYX], [CWMWYW], [RXYXGXCXBXMX], and [Random Sequence].
The Commit Button freezes the entire table at the current color set and returns
to Mode 1 with no lights selected. This is an easy way to set a rainbow pattern
on the table face instead of having to go through the procedure in Mode 1.
Strobes #1 - Single Color
All the lights on the table are treated as one. There are 2 flags that effect
the way the strobe functions. These two flags result in 4 submodes that can be
selected by pushing the Light Button:
The In-Phase strobe flashes the sequence On, Off, On, Off, etc,... The
Out-of-Phase strobe breaks the On phase into its component RGB colors and
alternates between them, eliminating the Off phase entirely. In other words the
sequence: ROn, GOn, BOn,
ROn, GOn, BOn, etc,...
S1 adjusts the hue in Manual Hue
mode and an increment added to the hue every cycle in Increment Hue mode.
S2 adjusts the color saturation. S3 is the strobe speed. There are 64 strobe
speeds on the S3 slider. For an In-Phase strobe, the frequency follows
the harmonic series, 100Hz, 50Hz, 33Hz, 25Hz, ..., 1.5625Hz from
S3max to S3min. For an Out-of-Phase strobe,
the frequency follows the harmonic series, 67Hz, 33Hz, 22Hz, 16Hz, ..., 1.042Hz.
The Commit Button is not used in this mode.
[In-Phase + Manual Hue]
[Out-of-Phase + Manual Hue]
[In-Phase + Increment Hue]
[Out-of-Phase + Increment Hue].
Strobes #2 - Dual Color
Mode 5 strobes between two selectable hues at the chosen speed and duty cycle.
S1 = hue of color 1, S2 = hue of color 2,
S3 = Speed or Duty Cycle. The Light Button selects the function of S3.
The Commit Button sets 50% duty cycle and sets the function of S3 to speed. This
mode is useful for exploring the "Imaginary Colors" (colors outside of the human
retinal color gamut).
There is no mode 6.
Mode 7 is a secret.
From nothing's core, three paces More,
a flag you'll see, once Left by three,
one more pace, don't avert your eyes,
box's face reveals where beauty lies.