In November as the days grew dimmer the Catalyze Chicago team started getting a bit frustrated with the windows in our main co-working space. They consist of two banks of frosted glass cubes that are wonderful at difusing sunlight, but terrible at letting everyone inside look out at the ever-bustling Lake Street. More importantly, they don't allow to pedestrian and train traffic to take a peek at all of the exciting things going on here at Catalyze!
Our team has always had an interest in creating display systems : Multi-touch Experiments, Morphield, Persistence, and Autoloop just to name a few. While looking up at those two banks of symmetrical glass cubes we thought, "Hey! We've got some dead pixels on our hands!" So we set to work to bring them to life.
Harvey Moon was working at Leviathan at the time, and had done some amazing work with Lady Ada's Neopixels in conjunction with Micah Scott's FadeCandy hardware. We took this knowledge and set out to build out a system that allowed us to individually address each glass 'pixel' in our windows.
The first step along our way was to make sure that the FadeCandies and connections to LED strips and power would be as secure as possible. To do this, we designed up a quick breakout board, and had them produced here in Chicago by our good friends over at Twisted Traces.
The Eagle files for this board are available here in the repo with a full bill of materials (check part attributes in Eagle). Dave Hull was kind enough to whip up some awesome laser cut acrylic enclosures that fit our PCBs and housed the 20 Amp 5 Volt power supplies responsbile for powering up the LED strips.
The FadeCandies are limited to 64 pixels per channel, with 8 channels per board, so we built out a plan to cut down each reel of LEDs into strips that would meet these constraints. With all of our NeoPixel (WS2811) reels, FadeCandies, PCBs, and power supplies in hand, we set out to start the long process of cutting down the strips and soldering on connectors.
With LED strips cut down, we started work mounting them with small sections of VHB tape.
With all of the LED strips in place and connected to our FadeCandy breakout boards we wired each back to a USB Hub that was under the keen supervision of our O-DROID C1 running FadeCandy Server. We then mapped out each of the strips in Processing (available in this repo), and coded up a quick API.
#API Details We'd love to see more code written for these windows! The only requirement at this point is that you be connected to our local network. Our window server is running on Ashpool.local and accepts UDP messages on port 6699. Here are the messages it knows about:
##Change the color of a pixel Send:
Where x and y are the coordinate positions of the pixel you'd like to change color of, and R, G, and B are the Red, Green, and Blue values you'd like the pixel to be (0 - 255). You can also leave off the RGB values, and the server will inerpret this as a request to turn the pixel white.
##Turn off all LEDs Send:
##Turn On Automarch Send:
Where x is an int value representing milliseconds. Automarch moves each column of pixels over to left once a certain period of time has elapsed. For example, if you'd like to have the display scroll each pixel from right to left every one and a half seconds you send the command
##Manual March Send:
This moves every column of pixels over by one. Pixels at the end of the display get wrapped around to the far side.
##Add a new client Send:
This logs a client's IP address. Every time the pixel data changes this IP address will recieve a UDP message that contains the current pixel data.
##Remove a client Send:
This removes a client from pixel data updates
##Query Automarch Send:
This asks the server for the current automarch settings. The server will respond with
n,x where y = YES and n = NO, and x = current automarch timer in milliseconds.
If you're looking to just to play around with the windows we have an iOS app on the App Store available here