client: Personal Project
This personal project involved the creation of a short christmas light show with lighting and visuals set to Into the Unknown from the movie Frozen 2.
The pixel-addressable lighting is comprised of six total strands of 50 bulb WS2811 LEDs split between two Arduino Unos. The standard christmas lights are controlled via a third Arduino Uno inside a homemade light control box I constructed as a little summer project while in high school. It is connected to a relay board that allows me to toggle power to higher voltage things.
A show computer is located on the floor next to the shelf. One Arduino is on top of the shelf and controls the LEDs in both window’s garland. The homemade show control box is on the bottom shelf and has the shelf lights plugged directly into and extension cords to the tree + other lights out of frame. The third Arduino is buried in the tree and connected to a USB to Ethernet adapter / extender with a cable that runs behind the TV back to the show computer. A super long HDMI cable connects the show computer to a projector on top of my kitchen cabinets. There are also three LED DMX par lights connected to the show computer via a DMX to USB adapter.
WS2811 Pixel Addressable LEDs
Arduino Uno Microcontroller
xLights Project Sequence
Arduino IDE
The sequencing for the show was done in an open source application called xLights. It communicates with the Arduinos using the DMX 512 standard over USB and each one is defined as a separate controller in xLights. The program running on the Arduinos is a modified version of DMXUSB_FastLED.ino created by Perry Naseck (DaAwesomeP).
This modified version disregards the FastLED library method of communicating with LEDs and instead includes the more efficient AdaFruit NeoPixel library—which supports WS2811 pixel strands. The code is constantly listening for DMX messages, that it reads into a 512 slot buffer that cycles through to set the Red, Green, and Blue value for a pixel. Those color values are then fed into the setPixelColor method of the strand and shown on it. The Arduino that controls the non-pixel lighting is running a further modified version of the program that instead looks for a value higher than 0 on the Red channel that it then uses to toggle a relay on and off.
The sequence I programmed in xLights is played back at a specific time using a companion program called xSchedule. The software runs a looping background show of ambient lighting patterns and settings and then at a certain time triggers things to switch over to the Into The Unknown sequence. It also supports synched video playback set to a specified output which is how I executed the projection mapping aspect of things.
After Effects projection map
Still from rendered media
The base projection map was drawn out in an Adobe Illustrator document with the same dimensions as the projector output. That file was taken into After Effects and I edited clips from the film together and then used pre-comps manipulated with the mesh warp effect to line things up with the projection map.