Time to start documenting some of these cool toys. First up is the Waterfall i've been playing with:
This is a custom built artifical waterfall at Ducks Crossing on Burton. My objective was to make it 'come alive' at night, with a fully automated laser stage show.
Stage one was adding a Fogger, a DMX Controller and two DMX Lasers, which was a simple case of buying the gear (about AU$800) and plugging them in.
Now this would be enough for some people. But i'm not some people :P Guests were already impressed by the show, but I wanted more!
The next stage involved a high brightness RGB LED can, which could also be controlled over DMX. AU$300 later and there it was.
I still don't have a good photo of a live show with the waterfall flowing, and the RGB can, Fogger & Lasers all going, but i'll be sure to get one soon (along with hopefully, video!)
Now all this was great, the guests were impressed, the budget wasn't blown, and it looked awesome! But there were still two problems. Firstly the laser show itself wasn't sync'ed to the music as well as I would like, The lasers have small microphones built in and progress through their pattern to the beat, but the scenes they display are the same every time, and have nothing to do with the music. I wanted it to be more 'dynamic', and react better to the music that was being played. The other issue was that someone had to be in 'the cave' to drive the show every time.
Being the hacker I am, there was a clear solution. It had to be computer controlled!
So to get started, I ordered an OpenDMX USB dongle, and started to play. I'd decided I wanted a web interface, so that the show could be controlled by either the computer at the front desk, or from a PDA or Mobile Phone out in the crowd.
Heres some snaps from the first iteration of the software:
Due to the dongle's design, and the basic design of the DMX protocol, I was forced to build the system in two parts. The first part was a daemon written in VB.NET, which spoke DMX to the devices, and listened on a network port for instructions. I created a simple protocol similar to G-Code to allow me to update an individual DMX 'fixture', or to send an entire animation controlling any number of fixtures and containing any number of frames, along with a rudementary 'timescale' option to control the speed. The daemon would store these animations, and could play them on demand as required.
The second part of the system was the front end, which was built in PHP, which indexed the music available for play, allowed manual control over the devices, or would run an automated show which was similar to what was already being done by hand.
This system worked great, but had only solved one of my issues. I still didn't have much more control over the actual patterns being displayed by the lasers, and I was limited in how complex the show became due to PHP not having any firm idea of the current position in the music track.
Also we wanted more control over the existing fixtures in the waterfall itself: The 4 white floodlights on each corner, the waterfall itself, and even power to the Amp desk to save on power while the show wasn't running.
I've recently started playing with PICmicro processors and found that with some minor hacking, they can act as DMX receivers. I quickly built an 8 channel DMX switch pack, with 6x 300w MOSFET outputs for the floodlights, lasers & fogger, and 2x 7200w relay outputs for the Amp desk and Waterfall pump. Now I had full control over the entire show, from power up to power down, with only the computer and this switchpack needing to be left on.
The next iteration of the software uses YAML to 'script' an entire show (sample here) with events that can be added with a precision of around 20ms, to change laser patterns, the colour of the RGB can, give more or less fog, etc. and will powerup the fogger & amp desk 15 minutes before a show to let them warm up, and most importantly, gives me an extendable platform to build the show up as I go.
I'm still in development on the new version of the software, but will keep you updated as I progress!