| ︙ | | |
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
|
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
|
-
+
|
\end_layout
\begin_layout Paragraph
FIRENET/CHANNEL
\end_layout
\begin_layout Standard
This command is used to read out the A/D value on a particular channle of
This command is used to read out the A/D value on a particular channel of
a node.
\end_layout
\begin_layout Standard
\begin_inset Tabular
<lyxtabular version="3" rows="2" columns="3">
<features tabularvalignment="middle">
|
| ︙ | | |
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
|
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
|
-
+
|
\begin_deeper
\begin_layout LyX-Code
"shows" : [
\end_layout
\end_deeper
\begin_layout LyX-Code
{ "show" : "La Mariseillaise",
{ "show" : "La Marseillaise",
\end_layout
\begin_layout LyX-Code
"file" : "mariseillaise.json",
\end_layout
\begin_layout LyX-Code
|
| ︙ | | |
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
|
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
|
-
+
|
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
No data, only one referant
No data, only one referent
\end_layout
\end_inset
</cell>
</row>
</lyxtabular>
|
| ︙ | | |
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
|
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
|
-
+
|
\end_layout
\begin_layout Standard
This is the command to start the show.
If the show has been SET then this will start by syncing the nodes, then
starting the music file and startthe programmed firing sequence in the
starting the music file and start the programmed firing sequence in the
nodes.
The user has to have armed the nodes before sending this command.
\end_layout
\begin_layout Standard
\begin_inset Tabular
<lyxtabular version="3" rows="2" columns="3">
|
| ︙ | | |
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
|
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
|
-
+
|
\begin_inset CommandInset citation
LatexCommand cite
key "HTTP"
\end_inset
is very well suited for this task.
It is small, selfcontained and is designed to be added into applications.
It is small, self contained and is designed to be added into applications.
\end_layout
\begin_layout Standard
In addition a JSON parser has been added to support data sent in this form.
JSON messages out are easily generated using formatted write statements
in Lua.
|
| ︙ | | |
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
|
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
|
-
+
|
\begin_layout Standard
As you can see this is an instance class and you may use the request handle
as the selector to pick the method (close()).
Either form is acceptable.
This is used to return the result of a RESTful request to the client.
The data is usually encoded as JSON and will available to the client.
Also the request data (from http.open() is reclamed.
Also the request data (from http.open() is reclaimed.
\end_layout
\begin_layout Paragraph
http.url(h)
\begin_inset Index idx
status open
|
| ︙ | | |
11475
11476
11477
11478
11479
11480
11481
11482
11483
11484
11485
11486
11487
11488
11489
|
11475
11476
11477
11478
11479
11480
11481
11482
11483
11484
11485
11486
11487
11488
11489
|
-
+
|
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Restart noad software
Restart node software
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| ︙ | | |
11652
11653
11654
11655
11656
11657
11658
11659
11660
11661
11662
11663
11664
11665
11666
|
11652
11653
11654
11655
11656
11657
11658
11659
11660
11661
11662
11663
11664
11665
11666
|
-
+
|
\end_inset
\end_layout
\begin_layout Standard
This command will fire a selected circuit in the node immediatly.
This command will fire a selected circuit in the node immediately.
The node will be out of communication till the firing cycle is over.
The available firing channels are numbered from 0-5.
\end_layout
\begin_layout Labeling
\labelwidthstring 00.00.0000
|
| ︙ | | |
11693
11694
11695
11696
11697
11698
11699
11700
11701
11702
11703
11704
11705
11706
11707
|
11693
11694
11695
11696
11697
11698
11699
11700
11701
11702
11703
11704
11705
11706
11707
|
-
+
|
\end_inset
\end_layout
\begin_layout Standard
This is similar to the firing command but will fire the selected ciruit
This is similar to the firing command but will fire the selected circuit
at the specified time.
All nodes keep a 32 bit millisecond counter.
The Z command (see
\begin_inset CommandInset ref
LatexCommand vref
reference "par:SYNC"
|
| ︙ | | |
11763
11764
11765
11766
11767
11768
11769
11770
11771
11772
11773
11774
11775
11776
11777
11778
11779
11780
11781
11782
11783
11784
11785
11786
|
11763
11764
11765
11766
11767
11768
11769
11770
11771
11772
11773
11774
11775
11776
11777
11778
11779
11780
11781
11782
11783
11784
11785
11786
|
-
+
-
+
|
) will sync the time for all the nodes, also it will start the node cycling
through the queue firing the events in time order.
The available firing channels are numbered from 0-5.
The command takes a single byte firing circuit value and 32 bit time value.
\end_layout
\begin_layout Description
P316543 Store firing command for circuit 3 at 16,543 miliseconds.
P316543 Store firing command for circuit 3 at 16,543 milliseconds.
\end_layout
\begin_layout Standard
This command is ignored if sent to the broadcast address.
There is no response immediately
\end_layout
\begin_layout Standard
When the node fires it returns RP<ch #> allowing tracking of the autofiring.
When the node fires it returns RP<ch #> allowing tracking of the auto firing.
\end_layout
\begin_layout Paragraph
STATUS
\begin_inset Index idx
status open
|
| ︙ | | |
12393
12394
12395
12396
12397
12398
12399
12400
12401
12402
12403
12404
12405
12406
12407
|
12393
12394
12395
12396
12397
12398
12399
12400
12401
12402
12403
12404
12405
12406
12407
|
-
+
|
queue
\end_layout
\begin_layout Standard
Testing of the sync command with a script that syncs the nodes then has
them fire at the same time shows the following spread in 10 runs with 3
nodes, (4,5 and 6).
Then monitering the firing time of channel 0 and using that to trigger
Then monitoring the firing time of channel 0 and using that to trigger
a scope, it captured each of the nodes firing.
Measuring between the first firing node and the last we get the following
spreads in 10 trials.
\end_layout
\begin_layout LyX-Code
|
| ︙ | | |
12545
12546
12547
12548
12549
12550
12551
12552
12553
12554
12555
12556
12557
12558
12559
|
12545
12546
12547
12548
12549
12550
12551
12552
12553
12554
12555
12556
12557
12558
12559
|
-
+
|
V Query node code creation date
\end_layout
\begin_layout Standard
This message is used to get the creation date of the code running in a node.
The message returned is a string of the compiler constants __DATE__ and
__TIME__ which shows the creation date of the code.
This is ment to be human interperted and not machine used.
This is meant to be human interpreted and not machine used.
\end_layout
\begin_layout Paragraph
CHANNEL
\begin_inset Index idx
status open
|
| ︙ | | |
13206
13207
13208
13209
13210
13211
13212
13213
13214
13215
13216
13217
13218
13219
13220
|
13206
13207
13208
13209
13210
13211
13212
13213
13214
13215
13216
13217
13218
13219
13220
|
-
+
|
Network
\end_layout
\begin_layout Standard
The network hardware is ISL8483 RS-485 chip.
The transmit and receive lines are brought out to pads where they will
be connected to two stereo phone jacks (one in and the other out).
The network will be like that show in Section
The network will be like that shown in Section
\begin_inset CommandInset ref
LatexCommand vref
reference "sub:Physical-Layer"
\end_inset
.
|
| ︙ | | |
13239
13240
13241
13242
13243
13244
13245
13246
13247
13248
13249
13250
13251
13252
13253
13254
13255
13256
|
13239
13240
13241
13242
13243
13244
13245
13246
13247
13248
13249
13250
13251
13252
13253
13254
13255
13256
|
-
-
-
-
+
+
+
+
|
is being sent.
On the control computer (UNIX/LINUX) the serial output data is handled
via a system driver.
The TRANSMIT control line was the DTR line in the serial interface.
It was found that the DTR ON/OFF signal was very deterministic and would
occur at the exact line of code where it was called.
Unfortunately this was NOT the case with the serial data.
It went into the driver and when exactly it came out was highly dependent
on the OS system loading and other factors.
So to make the XMIT control ON/OFF properly overlap the actual data the
code had to:
It went into the driver and when exactly it came out the serial port was
highly dependent on the OS system loading and other factors.
To make the XMIT control ON/OFF properly overlap the actual data the code
had to:
\end_layout
\begin_layout Itemize
Turn on DTR
\end_layout
\begin_layout Itemize
|
| ︙ | | |
13268
13269
13270
13271
13272
13273
13274
13275
13276
13277
13278
13279
13280
13281
13282
13283
13284
13285
|
13268
13269
13270
13271
13272
13273
13274
13275
13276
13277
13278
13279
13280
13281
13282
13283
13284
13285
|
-
-
-
-
+
+
+
+
|
\begin_layout Itemize
Turn off DTR to close the transmit.
\end_layout
\begin_layout Standard
This would work about 90% of the time but occasionally the control program
would be swapped out and the disable of the XMIT would be very very late.
Then the control computer's transmit would be enabled while a node was
trying to reply.
This greatly affected actions where there was a lot of message between
the control computer and nodes (like programming a show).
Then the control computer's transmit would still be enabled while a node
was trying to reply.
This greatly affected actions where there was a lot of message traffic
between the control computer and nodes (like programming a show).
\end_layout
\begin_layout Standard
The solution was to put control of the TRANSMIT ON/OFF in the network interface.
The board used in the interface is a modified node board so instead of
just the interface chip the Atmel processor was added also.
|
| ︙ | | |
13330
13331
13332
13333
13334
13335
13336
13337
13338
13339
13340
13341
13342
13343
13344
13345
13346
13347
13348
13349
13350
13351
13352
13353
13354
13355
13356
13357
13358
13359
13360
13361
13362
13363
13364
13365
|
13330
13331
13332
13333
13334
13335
13336
13337
13338
13339
13340
13341
13342
13343
13344
13345
13346
13347
13348
13349
13350
13351
13352
13353
13354
13355
13356
13357
13358
13359
13360
13361
13362
13363
13364
13365
13366
|
-
-
-
-
+
+
+
+
+
-
-
+
+
|
\begin_layout Standard
The blue line at the top is the transmitter control signal, the the two
waveforms are the RS485 signal and compliment signals.
\end_layout
\begin_layout Standard
The board is programmed as an Arduino with the main serial interface attached
to the control computer (see the progam HeadEnd in the Arduino code section).
The Arduino project has a library so add a second serial port on an I/O
pins.
That then is used to go to the FIRENET network as shown above.
to the control computer (see the program HeadEnd in the Arduino code section).
The Arduino project has a library that adds a second serial port on any
I/O pins.
That software serial port is used to connect to the FIRENET network as
shown above.
\end_layout
\begin_layout Standard
The only change in the FIRENET control program is that it no longer switches
DTR when it transmits a packet, all that is handled in the network interface
board.
\end_layout
\begin_layout Subsubsection
Firing Circuit
\end_layout
\begin_layout Standard
The firing circuit includes the 1 Amp constant current regulator, a relay
and 6 FET drivers.
IC5 (7812) is wired to produce 1 Amp output for loads down to 0 ohms.
This current is switched by a relay (RLY1) so the firing circuits are OFF
except when needed.
This current is switched by a relay (RLY1) so the firing circuits are completel
y OFF except when needed.
The 6 FETs (QF0-QF5) are wired as simple switches so when the processor
makes the gate high the FET goes to low resistance.
The Fireworks ignitor is wired between the CC supply and the FET drain
so up to 1 A flows firing the piece.
The resistor divider off the drain is used to feed the voltage value present
on the drain to the processor A/D.
If the transistor is OFF this will be the full voltage of the battery.
|
| ︙ | | |
13385
13386
13387
13388
13389
13390
13391
13392
13393
13394
13395
13396
13397
13398
13399
13400
13401
13402
13403
13404
13405
13406
13407
13408
13409
13410
13411
13412
13413
13414
13415
13416
13417
13418
13419
13420
13421
13422
13423
13424
13425
13426
13427
13428
13429
13430
13431
13432
13433
13434
13435
13436
13437
13438
|
13386
13387
13388
13389
13390
13391
13392
13393
13394
13395
13396
13397
13398
13399
13400
13401
13402
13403
13404
13405
13406
13407
13408
13409
13410
13411
13412
13413
13414
13415
13416
13417
13418
13419
13420
13421
13422
13423
13424
13425
13426
13427
13428
13429
13430
13431
13432
13433
13434
13435
13436
13437
13438
13439
13440
|
-
+
-
+
-
+
-
+
-
+
+
|
reference "par:TIME-Command"
\end_inset
).
The firing time can now be set to a maximum that will guarantee that ANYTHING
will be fired.
We them monitor the continuity during the firing and turn off the firing
We then monitor the continuity during the firing and turn off the firing
channel when the ignitor blows.
\end_layout
\begin_layout Standard
We cannot measure the continuity while the FET firing transistor is ON so
while the ignitor is being fired the transistor is switched off for a milliseco
nd.
The software reads the A/D for that channel and if the ignitor is blown
it will show a low voltage since the ignitor binding post is no longer
connected to the firing voltage (HOT1/HOT2).
If the ignitor is not blow there will be a connection and the A/D will
If the ignitor is not blown there will be a connection and the A/D will
read a high voltage.
Thus as soon as the ignitor is blown we can cut off the FET firing transistor
and stand down from the firing state.
\end_layout
\begin_layout Standard
There are some considerations for this testing, it should be often enough
to stop the firing reasonable early.
to stop the firing reasonably early.
That is if the max firing time is 3000 ms testing at 2000 ms intervals
wouldn't be too useful in ending early.
On the other hand testing too often at say 1 ms intervals would not let
On the other hand testing too often at say 10 ms intervals would not let
the ignitor heat up as we would be turning off the firing FET at very frequent
intervals.
So testing was done to try to determine some reasonable values, testing
at 100 ms intervals seems to be a good balance between ending early and
not heating the ignitor enough.
\end_layout
\begin_layout Subsubsection
Processor
\end_layout
\begin_layout Standard
The processor circuit is largely copied from the Arduino board.
The serial, reset and power leads are brought to a header which fits the
SparcFun Serial <-> USB board.
This can be used to talk to the board for testing.
This can be used to talk to the board for testing and programming using
the standard Arduino IDE.
Also two jumpers are added to allow the USB board to power the board and
control the network chip JP2,JP3).
This modified board is used as the control computer interface to the network.
\end_layout
\begin_layout Subsection
|
| ︙ | | |