The Firework Project Part Two

Wednesday, January 13, 2021

Since my last blog about the firework project, I have received multiple requests for a more detailed description of what we made and how it works. In this blog, I will attempt to explain those a little bit more by describing some of the steps we made. A quick side note before we start on that, most of this will be written from memory of multiple years ago, so some things might be a little off.

Let’s start with how we started out, the friend whose idea the show was already had some electric fireworks ignitors and cases he could use to ignite some fireworks on the push of a button. However, these were not that many (maybe like twelve) channels. Far from enough to run a show on. The amount of igniter channels we needed would be closer to one or two hundred. First we did some testing on the ignitors to see what kind of power source we needed to use. A 9V battery turned out to be about the minimum and on 230V it turned out the igniter exploded. So 12V seemed like a good place to work with. Then, the next challenge was to find a way to switch the channels, we were planning on using a Arduino uno or nano and preferred the nano for size reasons. We had some experience with LED-cubes so our first plan was to basically do the same as one would do there: Use a couple of negative and positive channels to make a matrix and use two outputs on the Arduino to select a coordinate. This plan seemed quite nice since the channel per Arduino ration was great. Later we learned the hard way that trying to switch 12V with a nano in a way that could handle the huge current spikes (up to 20A or so) is quite hard. Since the spikes are incredibly short and do not happen at every ignition, we kept trying to make it work. We spent hours debugging the system, which never seemed to be stable. That year we did not make it work. I do not now when exactly we decided to change up our plans, but eventually we decided to ditch the transistors/mosfets for relays, by doing this we did lose quite a bit of channels per Arduino, but the system became way more reliable. The main problem left was the power supply, but there is not too much to mention about that.

Then for those who are interested in the programming. First, a show is designed in a simulation, this step determines the timings of all the ignitions. These timings are then put into a 2D-array, where the first dimension determines which Arduino, and the second dimension determines which shot. Each Arduino has two pins reserved for transmission. The Arduino only starts when it’s triggerpin receives a signal and transmits when it is either done or told to transmitted further down the line. The rest of the program is just checking the time and if at that time a shot should be launched, then launch it.

This is about as much of the details I could think of without pictures or schematics. I hope you enjoyed and if you want to know more, feel free to ask!


Mike Zanderink

Thor is supported by: