Before you begin reading, I will warn you that I am a complete NOOB when it comes to Arduino's / Coding, but have a fair understanding of electronics in general. I have only done one project so far, but it used existing plans and code. I don't expect anyone to write the code for me, but I don't understand all that much yet.
So with that said, I work in the Pyrotechnic Industry on a professional level. We currently use a firing system made by Cobra Firing Systems, it is a complete wireless firing system with 100 channels and 18 cues per channel (1,800 individual cues!), it can do scripting from a number of software based systems out there, excel spreadsheets, or manually set "sequences". The system works flawlessly, but the problem I am running into is the cost of the modules and potentially number of cues for the "body" of the show.
The company provides us with a number of Field Modules (or FM's), but each only has 18 cues. Most of the time we are stuck using the system for the finale and large shells only and have to hand fire the 'body' of the show. A Module is about $400-500 each with all of the accessories, so at 18 cues each you can see how quickly the cost can add up! Another issue is that we have to switch channels on the main firing module which can be annoying in the middle of the show if it isn't scripted...
Anyways, sorry for the long intro. Here is what I would like to do, but I am completely stuck figuring out the code for a fully digital "Sequencer" and I need to have a demo ready in a few weeks :\
What I would like consists of 5 'parts'
- Trigger
- Input
- Display
- Timer
- Output
The Trigger would use an existing Cue from the Cobra Firing system. So for example, I would push Cue 1 / Channel 00 on the Cobra Firing System, but instead of the wires running to an E-Match on a shell, they would run to the Arduino Sequencer instead. When the Arduino senses a "High" signal from the 'Trigger' it would start the timer. The Trigger would be what I'm guessing would be an Input on one of the Digital Pins(?)
The Input will be either a 3x4 or 4x4 keypad OR a 5 button LCD w/ Keypad (Up/Down/Left/Right/Select). What I would like to do is turn on the system, have the display initialize and run through a test sequence of all of the cues, and then read something like 'Please enter a delay time' or something along those lines. You would then use either a numeric keypad to enter a number, or use a 5 or 6 button LCD w/ Keypad to move left/right between the numbers, and up and down to change the value.
I would like the display and timer to be as accurate as possible, but at Minimum I need to be able to enter a time in Tenths of a second, so the display would look something like:
XX.Xs or
XX.XXs
The Display can be something as simple as a 16x2 LCD or a full color OLED, but I just need it to be able to go through several steps and then "store" the entered value. So for example, you would power up the system and be prompted with something like:
Please enter a delay time...
00.00s
Then you would key in the desired value, and press select. It would then present you with a refreshed display such as:
Delay Time: XX.XXs
Status: (Not Started / Firing)
I would also like the ability to simply press the 'Select' key again, or another key on a 3x4 / 4x4 keypad (e.g. the * or # key) to re-enter a different time anytime before the timer is started.
The Timer is just that, a timer, that when started will continue on a loop for a preset number of times based on a predefined value depending on how many cues that particular sequencer has. I plan on making a few different sequencers of different sizes such as 50, 100, 200, etc cues. Once the code is finished, I can easily change this value based on the "model" of the sequencer. I just need to be sure the rest of it is simple for my crew members to use. (They will only see and/or use the finished system with a keypad and LCD/OLED), I will be the only one that would ever need to make changes to the code itself.
The Timer doesn't have to be extremely accurate, as in hundredths or thousandths of a second. However, I would like it to be as accurate as possible without needing to add another circuit such as an RTC, unless it is absolutely necessary! I would need the system to be accurate within +/- 0.1 seconds, so if I entered 3.45 sec, I would need an output every 3.35 - 3.55 sec. It can fluctuate a small amount in either direction, but the end result needs to be Fairly Close!
For example:
If a sponsor asks for a 25 minute show (25 * 60 = 1500 seconds)
I have 400 shells, 1500 sec / 400 shells = 3.75 seconds between shells
I would set 3.75s, it can vary from 3.65-3.85, but in the end it needs to be close to 25 minutes...
Using that example, if it is constantly inaccurate on the low side by 0.1s, I would end up with a show that is almost a minute short. This is actually a pretty small variation, but hopefully this explains what I need. I can't enter a number and end up with a show that is several minutes off, especially if it is short!
The Output is just a constant output and the voltage and current is not (that) important. If I could design this system to just blink an LED every XX.XX seconds that would be fine! I have actually made an 'analog' system in the past using this same concept that worked perfectly except that my timing was never accurate. The 'Firing' system of this sequencer is completely separate from what I am trying to achieve here... So, the Arduino does NOT have to provide the current to fire a match! The 'High Side' or 'Firing Side' of the electronics uses a secondary power supply with a High Voltage and High Current to ensure that the E-Matches actually fire.
All that this system (the Sequencer) will do is output a consistent voltage and current at a specified interval. I have several ways of both checking continuity of each match, and firing each match. The 'analog' sequencer I made a few years ago just used a 555 timer, a square wave, and a Pot in place of a resistor to control the timing, used several 4017 Decade Counters / Dividers to output to each Cue, and a MOSFET to drive the high current side.
I should mention that I will use the same firing setup (minus the timer / input / etc), so I DO NOT need to use a different output for each cue like I have seen others trying to do! I just need ONE Output that will drive the entire system...
**Note: A later revision may use 2, 3, or 4 outputs at different intervals, but this is not needed at this time. For now, I just need a single output, and a single time interval.
Again, sorry for such a long first post. I just want to be sure everyone knows exactly what it is I'm looking to do. So, to sum it all up I would like to:
- Power on the system
- Screen displays "Please enter a delay time..."
- Using a 5/6 Button LCD or 3x4/4x4 keypad, enter a time, press 'select/enter' key
- Screen refreshes with the 'stored' time, and total length (time * no. of cues) and/or status
- Arm the system and wait for the 'Trigger' from the Cobra System to go "High"
- Output a specific voltage/current at the 'stored' interval time that was set in #3
- Repeat the output at the specified delay or interval at a predefined number of times (50, 100, etc)
(If you could enter a precise time that would be displayed on an LCD and have it flash an LED at that specified time, it that would be perfect for this system! I just need to tie all of those parts together!)
I hope all of this helps, and hopefully it isn't too much info. I wish I had some pre-written code to share but I haven't been able to find anything that is even close to what I am trying to do. I have found systems that do exactly what I want, but they aren't user friendly for the crew and times had to be set in the code and uploaded, I have found code for LCD timers, but no output or loop, and a number of others that were all missing several pieces of what I need and I have NO CLUE how to tie them all together :\
If this sounds like a project you wouldn't mind helping out on please let me know! Any information would be very much appreciated at this point, I have been completely lost on this. Even if you can point me in the right direction or give me bits and pieces of what I need it would be better than what I have now!!
Thank You!