New! View my mortar rack page here!
The guys in my cul-de-sac and I enjoy a good fireworks show. And as is the case with most guys, each year has gotten a little bigger. We progressed from the more normal (and healthy) launching from tubes and running to the WAY more dangerous 'black powder trail' method of launching tons of fireworks at once.
This year I was hoping for something a little more controlled and sustained (and safe). And so began the odyssey of developing a wireless, computer-controlled launching system that integrated music.
The system I came up with has two components. The first is a firing board. Right now it is in prototype format and is setup on a piece of breadboard I had laying around. I wrote a small C program that runs on the PIC 16f877 microchip I happened to have. It has a built in UART (serial port), and so it was pretty easy to access that from the computer. Of course, I had no desire to leave my laptop near the firing station, so I found a Bluetooth serial port at sparkfun.com that was a class 1 device (100m range). That has worked nicely to wirelessly communicate with the firing board. A few transistors later and viola! a working fireworks launcher. Here are a few images:
Basically when I am ready for a firework to launch, I turn on a row and a column of a transistor matrix. The intersection of that row and column contains an electronic match. Currently, it is a firing wire that has a small piece of nichrome wire at the end (think the glowing red wires in your toaster). This nichrome gets hot enough to light a real match, which then lights the fuse. At least in theory. I'm still working on a reliable means of lighting.
That is the the first component. The second is a .net app I wrote in c# that runs on my laptop. I call it TBFireLaunch, and I am quite proud of it (which my poor friends who I have made sit through a demo can attest to).
Basically, you tell it how long to run the electricity through the match, what com port the firing port is talking over, and then just define the show.
I have built a fireworks database into it, that contains whatever fireworks I have on hand. It allows you to put in a picture of it, define how long the fuse takes to burn and how long it flies before it explodes (plus a few other items that I will be using later).
The first step is to set up a show. You do this by defining the name of the show, a description of the show, and a music file that contains the background music for the show (you have to mix the music into one file in another program). TBFireLaunch incorporates Windows Media Player, so just about any format will do fine.
After creating the show, the main screen allows you to 'record' the show. Simply press the Record button and the music will start playing. All you have to do is to hit the space bar whenever you want a firework to explode. After you are done, the main screen will contain a 10x10 grid of fireworks 'tubes' that will have one of several states: empty, ready, lighting, burning, launching, exploding, and done.The program calculates when it should start lighting the match so that it explodes at exactly the right moment in the music. If you have accurate timings of the matchlighting, fuse burning and firework flying times, it will explode at exactly the moment you defined in the song. There is a 'simulation' mode that runs the program and music without actually sending the signal, and of course the live mode that is what you use on the day of the show.
Then, all you have to do is to define what firework to put in which tube, and you are good to go. Eventually the program will contain a 'print cue sheet' function that will print a listing of which fireworks connect to which match and when they will explode. It will also have an enhanced simulation mode that uses pictures of the actual fireworks explosions to animate the show on your screen.
The first actual test run occured on Friday, 3/23/06. It was a brief fanfare (taking from my Little Mermaid CD) that had 9 bottle rocket breaks set up in it. I had everything setup correctly but unfortunately, only 2 of the 9 acually worked as they were supposed to. A third match worked, but didn't light the fuse. I have narrowed the problem down to how long the electricity flowed through the match. I had it set at 800 ms, which turns out to be too short. Also, I think I need to actually solder the nichrome wire to the launch wire to get a better, more consistent connection (when I tested the resistance of the completed
matches, it was all over the map).
The two that worked, worked perfectly for when I had them going off, so I am encouaged that this will work great. Once I get the matches up to par.
Feel free to send me an email if you have any questions! firstname.lastname@example.org