A lot of designers have the luxury of creating things that aren’t supposed to explode. That’s usually easy. The trick is designing things that are supposed to explode and then making absolutely sure they explode at the right time (and only the right time). [JonBush] recently did a beautiful build of an Arduino-based fireworks controller. Seriously, it looks like a movie prop from a summer blockbuster where [Bruce Willis] is trying to decide what wire to cut.
[Jon] used a mega 2560 because he wanted to do the I/O directly from the device. His code only takes about 8K of the total program storage, so with some I/O expansion (like shift registers) a smaller chip would do the job. The device can control up to 8 sets of fireworks, uses a physical arm key, and has a handheld remote. It is even smart enough to sense igniter failures.
The front panel is a work of art and includes a seven-segment display made from Neopixel LEDs. The whole thing is in a waterproof case and uses optical isolation in several key areas.
Fireworks are dangerous, so we might have designed in some more electronic safety features. For example, the power switch only interrupts the ground. It might be safer to disconnect both battery legs when off which would make it hard for a short to accidentally power the device. On commercial devices that explode, you’d probably see dual inputs so that a stuck switch causes a failure (that is, arming or firing requires one switch contact on and another off). The same for outputs. Driving the firing relays on both sides makes it harder for a stuck output to fire accidentally. Still, using a box like this is probably safer than a lit punk, so for this application, it is probably safe enough.