Introduction: Electronic Firing System Ignition Delay Timer (IDT)

About: Hi, I'm Brad. My interests spread over a large area and I tend to get carried away when something new peaks my interest. I picked up my basic electronics knowledge in bed. Say what? I was laid up after surgery…

The DBR01-X pictured above is one of many similar electronic firing systems primarily used for igniting fireworks. These systems consist of a transmitter and multiple receivers. A fully loaded "standard" system can support up to three hundred separate receivers, and each receiver has four firing queues. That is a total of one thousand and two hundred firing queues, which equals a lot of fireworks!!

There are three standard firing "modes" on these systems.

  • Individual - press a separate transmitter button to activate each firing queue one at a time
  • Fire All – pressing this button will activate all twelve (12) firing queues in the current "district" simultaneously (more on districts later).
  • Sequencer - pressing this button will activate all twelve firing queues in the current district with approximately ½ second delay between each.

Even with all those firing queues and firing modes I found one option missing that would make setting up a firework show so much easier. What was missing for me was the ability to program timed delays between activation of individual firing queues.

For instance, I will have one large firework with a duration of one minute. During the one minute that firework is lighting up the sky there are other fireworks I want to use to fill in or highlight what that big boy is doing. Those other fireworks will have different durations and require different delays before they are ignited after the big boy starts.

With these firing systems you have three choices on how to create these delays;

  1. Fire the group from one firing queue and use lengths of fuse, that burns at a known rate, to create the desired delay to the other fireworks.
  2. Attach each firework in the group to a separate firing queue and setup a timer so you know when to press each fire button.
  3. Make something that will automatically delay activating the firing queues for the specified times you enter.

I went with option three and made my Ignition Delay Timer (IDT).

** Please do not be shy! If you notice any errors or have any suggestions regarding any of this material I would love to hear from you.

REVISIONS:

  • 2/6/21 06:08pm updated Ardunio .ino file - corrected relay power reference value leftover from testing
  • 2/7/21 10:30am added Troubleshooting step
  • 2/7/21 11:45am replaced print file for the box top, minor adjustments to a couple of placement holes
  • 2/7/21 12:40pm added Pro-Mini pin out reference pic in step 3
  • 2/8/21 2:30pm added a couple of troubleshooting items
  • 2/11/21 3:40pm added "clean" schematic in step 3

Supplies

These first two are optional, you can use the Ignition Delay Timer without them, however they are the primary reason for this project in the first place.

  • DBR01-X Electronic Remote Firing System Transmitter
  • DB04r Electronic Remote Firing System Receiver

The best price I found for the above system was around $130 (eBay), which included the transmitter and 12 receivers. In fact, I wanted more receivers but the sites I found those on wanted so much money just for the receivers it was cheaper just to buy another complete system on eBay.

I have listed the exact parts I used in case you are going to build the project box as well. These parts fit perfectly. But I also order things in bulk so you may want to look for the same part(s) in smaller quantities.

The "ASIN" number is the Amazon Standard Identification Number.

(1) 3 pack, Arduino Pro-Mini (5v) (ASIN: B08F24N6WW)

(1) 4 Channel DC 5V Relay Module (ASIN: B0895PZQM7)

(1) 20 pack, 5mm Silver Color Light Emitting Diode LED Holder (ASIN: B077SLMK3M) *for project box

(7) 5mm LEDs (4 - Red, 3 - Green)

(1) 5mm RGB Tri-Color LED

(1) 100 pack, Fireworks Wire for Remote Wireless Control System (A.K.A. igniters) (ASIN: B08B7XBLX1)

(1) 20 pack, JST SM 5PIN Plug Male to Female EL Wire Cable Connector (ASIN: B075K6N7DF)

(10) Resistors: (7) 470ohm, (3) 330ohm

(1) (5 pairs) 2 Pin Balance Plug Lead Socket Male and Female Connect (ASIN: B07YKHV46N)

(1) 8 pack, 2 Terminal 2 Position SPST Mini Miniature Toggle Switch (ASIN: B07QGDDTWJ)

(1) 5 pack, ON/Off Switch with Cover 4X 1.5V AA Battery Holder (ASIN: B01KFCPAMA)

(1) 5 pack, 8 Position 2 Row Push Release Connector Plate Terminal Strip Block (ASIN: B07QNWR81N)

(1) Heat shrink tubing

Not required but highly recommended:

(1) Ferrule Crimping Tool Kit (ASIN: B07PJK2VNT)

The igniters and other wires we are manually connecting to terminal blocks/strips are very small and it is easy to get a bad connection. The igniters in this case are particularly vulnerable to bad connections. Prior to the ferrules, even using extra care when putting the igniter leads into the connectors, I would occasionally have one not fire. Since crimping a ferrule to each lead I have never had that issue again.

Step 1: District Numbers and Firing Queue Numbers

Before we dive into this let's get "Districts Numbers" and “Firing Queue Numbers” out of the way!

District numbers and firing queue numbers are combined to create a unique "address" for each specific firing queue on every receiver in your show.

A "district" is a group of three transmitters. Each transmitter in a district will be programmed with the same district number. Valid district numbers are 0 – 99.

A “firing queue number” is the number of a specific firing queue located on a receiver. There are four firing queues per receiver.

In a district, with three receivers, each having four firing queues, those firing queues will be numbered 1 - 12. With firing queues 1 - 4 on receiver one, 5 - 8 on receiver two, and 9 - 12 on receiver 3.

To activate a specific firing queue from the transmitter you select the district number you want and then press the corresponding button for the firing queue number you want.

In the picture above, if I wanted to fire 2_7 (my shorthand for district 2, firing queue 7) I would change the district number on the transmitter to 2 and then press button 7.

Hope that made some sense!!

Step 2: The Ignition Delay Timer (IDT)

For an easy, accurate and consistent way to provide delays before a firing queue is activated, I developed my little yellow box.

Its basic functionality is achieved by connecting the box to a single firing queue on a receiver. When that firing queue is activated it triggers the Pro-Mini in the box to activate the firing queues on the box itself. But, it activates those firing queues with specific delay times between them. Those delay times are programmed by you for your specific requirements.

There are multiple LEDs to keep you informed about what is going on inside the IDT. Those LEDs are;

  1. Main = Green, on solid when external power is connected and turned on
  2. Relay = Green, on solid when power is available for the relays to switch to the firing queues
  3. Receiver = Green, on solid when a firing queue from a receiver is connected and that receiver is turned on
  4. 1, 2, 3, 4 = Red, only on when the corresponding firing queue is active
  5. Status = Red, Blue, or Green
  • Red Flashing = something is wrong, the program WILL NOT run the firing sequence
  • Green Solid = everything is ready, the program WILL run the firing sequence
  • Blue Solid = the program is currently running the firing sequence
  • Blue Flashing = the firing sequence is finished, the program WILL NOT run the firing sequence again

The external battery pack (4 x AA) provides power for the Arduino Pro-Mini and external power for the relays which are connected to the firing queues on the IDT.

Note: Yes, the relays are required. Although the Arduino pins are capable of providing close to 5v, they come nowhere close to providing the required amperage to fire the igniters in those firing queues.

Step 3: The Wiring - Intro

Scary picture, I know!

The wiring picture can be a little confusing because some things had to be simulated to simulate the program. Say what? For instance, it is hard to find a pre-configured DB04r receiver in most simulator parts list! Even the tri-color LED used for the status light had to be configured out of three individual LEDs in the simulator I was using.

But everything still wires up basically as shown, I'll point out the differences when I find them.

UPDATE: 2-11-21 added full "clean" wiring schematic above.

In the meantime, here are a couple of points you need to be aware of.

  1. The receivers have their polarity reversed. Yep, put a voltmeter on one (Red to +, Black to -) and you'll get a negative result. To avoid having to remember that, or worry about it at all, I swap the polarity inside the box on the input pins from the receiver.
  2. There are multiple instances where a circuit is required to ground back to two separate sources. For instance, the analog inputs used for reference values must ground back to the Arduino Pro Mini, but the circuit(s) they are monitoring must ground back to the external battery pack.

The next steps will walk us through the wiring, building on each step as we proceed. There's a Pro-Mini pin out diagram above for your reference if you need it.

Step 4: The Wiring - Phase 1 - Relay Signal Lines

I am going to begin with the Pro-mini wiring to the relays. You will be using the following pins on the Pro-mini;

Digital: 5, 6, 7, 8

As this circuit involves extremely low current, I used the smallest gauge wire I had available which was 28AWG from a ribbon cable.

Note: If you are using the project box I would suggest holding off on this step until the relays and pro-mini are mounted in the box so the wires can be trimmed to length prior to soldering.

You will need;

  • (1) Arduino Pro-Mini
  • (1) 4 Relay Module

You want to;

  1. Connect pin 5 to relay In1
  2. Connect pin 6 to relay In2
  3. Connect pin 7 to relay In3
  4. Connect pin 8 to relay In4
  5. Connect VCC to relay VCC
  6. Connect GND to relay GND

That gets your ability to switch those relays Open or Closed done.

Step 5: The Wiring - Phase 2 - Relay External Power

Now, let’s setup the external power the relays will be switching to those firing queues.

You will need;

  • (1) external battery pack
  • (1) stereo terminal strip (for project box)
  • (1) micro on/off switch

Note: we are dealing with a little more current here so let’s up that wire gauge to at least 20AWG for these connections.

The relays will be switching power from the external battery pack to the jacks on the stereo terminal strip. You can daisy chain the "Com" (common) input current from the battery pack to each relay.

1. Install the micro on/off switch in line with the common power wire, between the battery pack and the relays, to disconnect that circuit when desired.

OK, so now do you use the N.O. (normally open) or the N.C. (normally closed) side of the relay to connect to those terminal strips. Well, that’s an excellent question and one you’ll have to experiment with to confirm your choice.

The issue I found, with the relays I was using, was that N.O. was not always N.O.!! If external power was applied to the relays before the Pro-Mini was powered on those N.O. circuits were closed and sending power out when I didn’t want them to. Even with the Pro-Mini turned on first, when the external power was switched on to the relays they would momentarily be closed before they opened. Assbackwards and not good if there are igniters already in the terminal strip!! I wound up using the N.C. side of the relay which never exhibited any bad behavior. Go figure!

2. In either case, the output wire from the each relay goes to one positive post on the terminal strip. To keep your sanity, I recommend deciding now which end of the relay strip will have be firing queue number 1 and connect the other relays in order (2,3,4) to the terminal strip.

Step 6: The Wiring - Phase 3 - Firing Queue LEDs

Let’s add some LEDs so that we know when those firing queues are HOT. These LEDs are simply installed by tapping into the existing lines on the Stereo Terminal Strip.

You will need;

  • (4) LEDs Red
  • (4) LED holders (for project box)
  • (4) resistors 470 ohm

1. The LEDs will share a common ground. Connect the cathodes to each other and include a connection from one cathode ground to the ground on the Stereo Terminal Strip.

2. The anode of each LED is connected to the positive wire of the firing queue the LED will be used for. Do not forget to place a resistor between each LED anode and the positive wire.

Step 7: The Wiring - Phase 4 - Receiver Firing Queue

This whole thing won't do us much good if we cannot figure out when a firing queue has been activated !!

This is a simple circuit that stands alone. All we do is monitor this circuit for the voltage increase that occurs when a firing queue is activated.

My little yellow box has three connectors on the back of the box. Two of which are 2 pin connectors. We use one of those two pin connectors to connect from a firing queue on a receiver to the IDT. See pic above and note the ferrules crimped on those wires. The ferrules provide a much better connection compared to bare wire.

Remember the polarity is reversed on the receivers (Red = Neg, Black = Pos). I deal with that by swapping the leads on the connector inside the box. Now I don't have to remember they are reversed, cause I just reversed 'em back.

You will need;

  • (1) LED (green)
  • (1) LED holder (for project box)
  • (1) resistor (330 ohm)
  • (1) DB04r receiver
  • (1) 2 pin connector (for project box)

Note: You can substitute another power source for the receiver. You will need to be able to change the voltage from that source. One trick is to use a single battery, a multi battery pack, and two switches. There's a pic of that wiring above.

Step 8: The Wiring - Phase 5 - Power for Pro-Mini

That Pro-Mini sitting there is not going to do us much good without any power. This is an easy one.

You will need;

(1) micro on/off switch

The positive side of the incoming external power (from the battery pack) is connected to the Pro-Minis "RAW" pin. The ground pin on the Pro-Mini beside the "RAW" pin is connected to the ground on the battery pack.

  1. Take a positive lead from the battery pack to one leg on the micro switch
  2. Take a positive lead from the other leg on the micro switch to the "RAW" pin on the Pro-Mini
  3. Connect the GND pin (beside the RAW pin on the Pro-Mini) to the ground of the battery pack.

Step 9: The Wiring - Phase 6 - the Other LEDs

So far, we have four Red LEDs to show us when a firing queue is active and a Green LED that will tell you when the receiver is turned on. We are going to add to that with a couple more indicators and a status light.

You will need;

  • (2) Green LEDs
  • (1) Tri-Color LED (there's a pinout reference above)
  • (3) resistors (330 ohm)

1. Main - On when main power switch is on

using a green LED

  • connect the cathode to the battery pack ground
  • connect the anode to the resistor
  • connect the resistor to the leg of the power that is off when the switch is off

2. Relays - On when the external power the relays are switching is turned on

using a green LED

  • connect the cathode to the battery pack ground
  • connect the anode to the resistor
  • connect the resistor to the leg of the power that is off when the switch is off

3. Status - tri-color LED to indicate system status

  1. Flashing Red = there is a problem, the program WILL NOT run the firing sequence
  2. Solid Green = everything checks out, the program WILL run the firing sequence
  3. Solid Blue = the program is running the firing sequence
  4. Flashing Blue = the program has completed the firing sequence and WILL NOT run it again.

The status LED uses digital pins 9, 10, and 11

  • 9 = Green
  • 10 = Red
  • 11 = Blue
  • connect the cathode (pin 2) to Pro-Mini ground
  • connect D9 to pin 3 (green)
  • connect D10 to pin 1 (red)
  • connect D11 to pin 4 (blue)

Step 10: The Wiring - Phase 7 - Analog Reference Lines

Analog inputs are used to monitor some reference points to help determine the status of everything.

We will use;

  • A0 , this is the big one, it monitors the firing queue voltage on the receiver, that is used to trigger the firing sequence in the program
  • A1, makes sure A0 can do its job, it monitors whether the receiver is turned on
  • A2, monitors to make sure the external power circuit for the relays is ready

Note: Two of the circuits involved ground back to the external battery pack, the other one grounds back to the receiver, but they all will now ground back to the Pro-Mini as well. The reference lines will not work otherwise.

You will need;

nothing (except wire)

But you will need to;

  1. Connect A0 to the positive wire for the Receiver LED before the resistor
  2. Connect a ground from the Pro-Mini to the negative side of the Receiver LED circuit 2
  3. Connect A1 to A0
  4. Connect A2 to the positive wire for the Relay LED before the resistor
  5. Connect a ground from the Pro-Mini to the negative side of the Relay LED circuit

Step 11: The Wiring - Phase 8 - Connect the Programming Header

Let's set this up so that we do not have to open the box everytime we want to reprogram the Pro-Mini.

I used a 5 pin male to female pre-wired connector for the box. And these got sneaky on me! I make my own connectors for a lot of stuff, but when I put crimp pins on the leads from the connector to the UNO I lost connectivity through them. They checked out fine for continuity but they were still not feeding correctly. In fact, with a bare + & - wire in the UNO I got 4.97v at the pins on the connector. As soon as I crimped pins on those wires to the UNO, I got zip at the connector. Don't know the answer to that one, so the connector wires going to the UNO are bare but tinned with solder.

However, I do know that just about every set of instructions on how to program a Pro-Mini from an UNO include removing the main processor from the UNO. DO NOT DO THAT! Just run the wires appropriatley (gnd to gnd, vcc to vcc, etc.) and it will work. That includes running the reset from the Pro-Mini header to the reset on the UNO. Do not remove the main chip and do not jump the UNO reset to the UNO ground.

Note: I beleive the above depends on the PRO-MINI version you are using - this works fine for me with the PRO-Mini 5v ATmega328p.

With this connection you will want to set the Arduino IDE to:

  • Board = Ardunio Pro or Pro Mini
  • Processor = ATmega328p (5v, 16MHz)
  • Port = the port # the Aurdino Uno is using

Not only can you program the Pro-Mini with this connection but you can also leave the UNO attached (remove the 5V output from the UNO for this part) and use the serial monitor to see what the Pro-Mini is up to.

The wiring in the schematic is color coded to match the connectors I'm using. When plugging into the Uno it is;

  • Black = gnd
  • Green = reset
  • Red = 5v
  • Blue = transmit
  • White = receive

That's all folks!! For the wiring anyway, the script is coming up.

Step 12: The Program - Overview

The script is fully commented so it should be pretty easy to follow. I am sure there are areas that could be cleaned up or streamlined, but I do what I can do with the knowledge that I have. :-)

About the only thing that may be of interest is my use of "labels" in the script. Labels, to me anyway, are nothing more than bookmarks. But the cool thing is that you can use those bookmarks to jump around the script and bypass sections of the script you don't want to run until certain conditions are met.

To create a label simple enter a word, followed by a colon (:)

TEST: // I just created a label (bookmark) named TEST

To reference a label, use its name but DO NOT INCLUDE the colon.

goto TEST; // I just told the program skip everything and go to the section in the script labeled TEST:

Labels are what make this script work, without them everything would just go boom boom when the Pro-Mini was powered up.

That's everything, unless you would like to make your own project box as well. I have included my print files for that in the next step.

Step 13: Troubleshooting

Note: The script is already setup to provide serial output of the main reference values used by the program. However, those are (and should be) commented out when running the program live. You can monitor ;

  • · Igniter#Delay - displays the computed delay times
  • · Relaypower – displays the values received when on and off
  • · Receiverpower – displays the values received when on and off
  • · Startvala – displays the value received from the 1st read of the reference value
  • · Startvalb – displays the value received from the 2nd read of the reference value
  • · Startvalc – displays the final value use to determine when the firing sequence is run

To use the serial monitor, uncomment “Serial.begin(9600);” it is the last line in Setup and then uncomment the Serial.print section(s) later in the script that you are interested in.

Note: comment everything out again when you are done, the overall processing speed of the entire script is reduced by an active serial monitor.

Before tearing into things for troubleshooting, Step 1 is always make sure you have good batteries installed in the

  • · The external battery pack and
  • · The receiver being used

Problem:

  1. Status light always flashing red
  2. Ignitors will not fire
  3. Receiver LED will not come on
  4. Reference values are zero or flucuate rapidly
  5. Runs the fire sequence at the run time

___________

1. Status light always flashing red

The program monitors two values to determine if the system is ready. If either of those values are out of range the red led with continue to flash.

Those values are “Relaypower” and “Recvrpower”.

  • Use the serial monitor to see the actual values your system is producing and then adjust those values in the script under “Status checks 1 and 2”.

2. Ignitors will not fire


  • a. Is the Status light flashing red – see above
  • b. Use the serial monitor to see the values being received for “Startvala”, “Startvalb”, and the final start go/no go value of “Startvalc”. The values for A + B are obtained by A0 which monitors the power on the receiver circuit. A powered-on receiver always produces a small reference value on each firing queue. Activating a firing queue produces a spike in that number. If that spike is not producing a value of 1023 both times it is read the total value in Startvalc will never reach the magic number of 2046. The value required to active the firing sequence can be adjusted in the “if” statement under the “Calculating Final Start Value” section.
  • c. Check the voltage at the firing queues on the box

3. Receiver LED will not come on

  • a. Turn on the power switch on the receiver
  • b. Verify the positive connection from the box to the receiver
  • c. Verify the negative connection from the box to the receiver

4. Reference values are zero or fluctuate rapidly

This indicates a grounding issue. Verify the wiring, particularly the grounds. The reference inputs are coming from circuits that ground back to the receiver and/or the external battery pack. Those circuits must ground back to the Pro-Mini as well for the reference numbers.

5. Always runs the firing sequence or runs it at the wrong time

  • The reference value that initiates the firing sequence is wrong.
  • Use the serial monitor to determine the values being reported.
  • Adjust the “if” statement under ** Calculating Final Start Value **

The firing sequence section of the script is bypassed until “Startvala” and “Startvalb” are both at 1023. Those start values are monitored by A0, which is monitoring the voltage on the positive side of the power coming from the firing queue on the receiver. Each firing queue on a receiver will have a small amount of current flowing through it when the receiver is turned on, that current is monitored with A1. When a firing queue is activated from the transmitter, the receiver momentarily raises the current to that firing queue. It is that rise in current that triggers the Pro-mini to run the firing sequence.


DBR01-X Transmitter and Receiver Programming

Any receiver can be reprogrammed to a specific District and firing queue. You can even program multiple receivers to use the same district and firing queues. In which case all the receivers programmed to the same district and firing queue(s) will respond when a single button on the transmitter is pressed.

To reprogram a receiver you will need to

Know the district number you want the receiver programmed to.

Know the firing queue you want the receiver programmed to.

The firing queue is programmed by using the first number of the queue you want. For instance if you want the receiver to use 1,2,3 and 4 you will press 1 on the transmitter during programming. For 5,6,7 and 8 you would press 5, for 9,10,11 and 12, you'd press 9, and so on.

Know where the programming button is on the receiver.

The programming button is located inside the receiver. There is a small hole in the receiver case and you will need a pin or similar object to put through that hole and press the button (like a reset button on some devices).


To reprogram a receiver:

  1. Turn on the transmitter
  2. Set the transmitter to the district number you want the receiver to use
  3. Turn on the receiver
  4. Press and hold the programming button on the receiver
  5. Press and hold the firing queue number on the transmitter

The LEDs on the receiver should flash to indicate the programming was received (some units may flash the power LED on the transmitter)

6. Release all buttons

Test the transmitter is now responding as programmed.




Step 14: The Little Yellow Box

If you have a 3D Printer here are my print files for the box. One file is for the top, the other is for the box itself.

The print file for the top has a line in post processing that initiates a filament change before it starts to print the raised words and numbers. I change to black filament for those. But you can remove that post processing line and let it print without stopping. I've done that and just used a felt marker to highlight the raised parts. I do like the top better though when I'm patient enough to change the filament.

The box includes built-in standoffs to secure the relay board and a spot for the Pro-Mini to snap in to. As well there are three entry points (through holes) on the rear of the box for connectors. The connectors are simply glued to the outside of the box with a cyanoacrylate super glue. A good option is Bob Smith Industries Super-Gold+ medium gap filling glue. I wanted to remove a connector after gluing it in place and had to use pliers to break it loose.

The connecter through holes in the box are indentified with inlaid letters and numbers. Those are;

1. The programming hearder with the pin outs below

  • DATA
  • - RS + T R = Neg, Reset, Pos, Transmit, Receive

2. and 3. The connecters for the RECVR (receiver) + BATT (battery pack) which both identify the + & - terminals.

Some 3D print specs for you;

  • Printer = Ender III
  • Filament = 1.75 PLA
  • Layer Height = 0.2000 mm
  • Top, Bottom Solid Layers and Outline Shells = 4
  • Interior fill = 20%
  • Outline Overlap = 40%
  • Support Infill Percentage = 30% (only required for top)
  • Extruder temp = 1st layer 210c, after which 200c
  • Bed temp = 1st layer 65c, after which 60c

I also increase the print speed after the first few layers, anywhere from 150% to 200% - cause I don't won't to wait over four hours and it is a project box after all.

Step 15: Using Test LEDs Vs Igniters

It is just a heck of lot cheaper to have some test LEDs, that you can use over and over again, then it is to keep shooting up your supply of electronic igniters everytime you want to test something!

So, I just threw some resistors on four LEDs and plug those into the firing queues on my little yellow box rather than use live igniters.

However, you do want to test with live igniters when you’ve completed the project. There is normally always enough current to light up an LED, but that does not mean there is enough current to set off an igniter!!

Microcontroller Contest

Participated in the
Microcontroller Contest