Kaleidoscope: 2023

The opening look of Kaleidoscope
Production Overview#
This was a competition one act adaptation of Kaleidoscope, by Ray Bradbury for the Minnesota High School League One Act Competition. The production was put on by Woodbury High School.
This production went on to take the Section 3AA Runner-Up (the official title, effectively second place) in one of the most competitive section finals in Minnesota.
A competition one act must be under 35 minutes long, and be able to tour to the competition location, including all the set, costumes and any technical elements needed. A basic lighting plot and a single audio input for sound effects are all that are provided by the host school, so you need to be creative when transporting technical elements.

Performed in the dark, the helmets and strip lights were the only light on stage.
This show involves a crew of astronauts undertaking a deep space mission, when their capsule is struck by a meteor. The crew is cast into space, alone and isolated. To reinforce this look, this show was uniquely performed almost in complete darkness, with the only light being provided by lights inside the helmets and several custom backlight bars. Standard front wash was only used for the introduction scene and one final end scene. Most images from the show appear brighter than they actually are. The actors really disappeared into the darkness, but the camera shows a lot more detail than was visible on stage. I suspect this is partially due to your eyes getting a large amount of veiling glare from the back strip lights, which was only partially intended.
Technical Elements#
This show relied heavily on technical elements. There were 7 actors on stage, each with a helmet and light unit. An additional 5 custom light bars were spaced out around the back of the actors, providing back lighting effects. All of these elements were controlled via sACN from ETC Nomad running on a laptop.

Techies preparing helmets for use in a rehearsal
Fixture Design#
Each of the fixtures was based around an ESP32 module, a USB battery bank for power, and a section of WS2812 individually addressable LEDs.
The USB battery bank was a cheap 18650-based USB battery bank, that took either one or two 18650’s. Cost was around 10 dollars for the pack, without batteries. I had some spare 18650’s lying around from a different project.
The brains of this operation was the Seeed Studio XIAO ESP32C2 module. It’s roughly the size of a thumbnail, and has an ESP32C3 module built in, with an external antenna. The small amount of I/O is not a problem for this project, as we only need one output for the LEDs. Do note, that for some silly reason, the pins on the XIAO module do not correspond to the pins on the ESP32 module. You’ll have to consult the schematic of the board to map them. This is a very silly design decision on Seeed Studio’s part, that I discovered after soldering the first one up.
Finally, a single strand of WS2812s was used for the lights. 5 LEDs made up the helmet lights, while a full 60 LEDs made up the light strips. I wired the power for the WS2812s to the USB voltage output on the ESP32 module, which I did not have any problems with, but I wouldn’t go too far past 60 pixels without running an external connection to the USB port on the battery pack.
3D printed brackets held the strips and electronics inside the helmet, while an aluminum extrusion and custom 3D printed tripod created the near invisible vertical strip lights.
Networking and Communication#
The sACN for this show was generated using an ETC Nomad license for portability. Since this show needed to tour, it was not feasible to drag along a full console.
To network all of the devices together, a Ubiquiti Nanostation Loco M2 was used. This is a directional access point, which was placed up in the booth facing the stage, and connected via ethernet to the laptop. All devices were given static IP addresses, to not require a DHCP server. The Nanostation does not have a DHCP server built in, unfortunately. This setup resulted in good signal strength everywhere on all the stages we performed on, penetrating through to the backstage areas.
I also created a simple dashboard which received telemetry data from all of the fixtures. This allowed to diagnose units which were not connecting or were stuttering. The “Ships” are all the custom light strips, named for real and fictional small-crew space capsules. The Pulse and Engine RPM graphs are actually the update rate of the sACN data, just labeled that way for fun. The Last Response time is the time difference between the last diagnostic packet being received by the laptop or not. This was all written in Python, using the pySimpleGui library, which is much easier to use for an embedded design guy than tkinter. Definitely not as powerful, but for simple stuff should be great.

The Dashboard provides feedback on system status