This is where the rubber meets the road and the software levels above this now have to control real things. There were a number of constraints on this system.
First I am not pyrotechnician and don't have a professional license so I am restricted to consumer fireworks pieces (which in Pennsylvania is not a lot). Second professionals use what is called an electric match to ignite their pieces, this pretty much like a match with an embedded electrical fuse inside. Apply a pulse of current and it ignites and then ignites the fireworks fuse. I can buy what are called ignitors which are a little gripper for for the fuse, with a very thin wire inside. These are totally inert and can even be sent in the mail. You apply a pulse of current making the little wire red hot and "hopefully" igniting the attached firework's fuse. The ignitors since they are a sort of heater don't fire as fast as an electric match.
Second I wanted this to actively monitor the setup. I used the A/D channels to check if an ignitor is connected to a channel, this limited me to 6 firing channels/node.
Third I wanted to keep costs down but also wanted to use the Arduino eco-system. I could not afford to have an Arduino board in each node but by putting the Arduino boot code in the same AVR chip used in the Arduino and pinning out the serial port I could have a virtual Arduino board in each node and could use the Arduino IDE to program them. Also this meant using regular 120 V plugs and terminal strips to distribute the battery voltage to the nodes. These are very cheap but require some protective circuits in the node in case someone plugs a it into an AC outlet.
Fourth I wanted the system to be safe to set up and to use. Thus no power is put on the firing circuits till the node is armed and I use a relay so there is no leakage current in the ignitor circuit. Thus you hook up the nodes, wire the ignitors and then from a safe distance away you arm the circuits and can begin firing.
The schematic of a node is here. You can see the AVR wired up as an Arduino, the relay and network chip. The 6 firing channels use FET's to actually fire the piece. There is a 1 Amp constant current circuit to supply the 12 V firing voltage
This is the node schematic
The Eagle CAD designed board is shown here:
The board was designed to fit into a plastic box and the big circles are where the connection binding posts are bolted on to the box and the board.
This also shows the SparkFun USB <-> Serial board plugged on letting the Arduino IDE program the board.
Finally here are the network interface and a node shown together:
As you can see the network interface has a single network connection (stereo jack) while the Node has two, an in and out so you can daisy chain the nodes on the network. The last node will have a 120 ohm resistor plug inserted in the last OUT jack.