Arduino Powered Show Control (SMPTE Phase)

Hello Community!

I work in theater. I'm a technician and work heavily with pyrotechnics, atmospheric effects, lighting, and sound systems. The world of show automation and show control systems is an expensive one, which is often dominated by systems that are capable of far more than what a show needs.

I'm looking to build Arduino powered, custom show-control systems for my needs. I figure this is possible with the use of many existing entertainment protocols, and implementing Arduinos into this field. By utilizing Serial comm, I think it's possible to send serial data from a control booth to Arduinos programmed on stage.

My first step is to create a simple SMPTE LTC generator. I need to create a LTC Signal that the arduinos on stage will receive. The importance of LTC is the ability to automate other functions of a show, such as lighting and digital audio controllers.

The problem is that I'm not a great programmer. I have scoured the internet looking for examples of how to create an LTC signal using Arduino. (SMPTE LTC is an industry standard that calculates times in Hours:Minutes:Seconds:Frames).

SMPTE LTC is predicated on sine waves, so it's essentially digital outputs. I'm thinking that it's possible to generate the signal directly from any digital I/O pin, and have it amplified externally.

Has anyone ever come across any LTC projects that involve the generation of time code? I've seen several decoding projects, but I lean towards hardware and adapting a decoding sketch to an encoding sketch is a monumental challenge. My goal is to build and publish. I'd like to provide back to the community with completed projects.

If anyone is able to help, I'd be ever so grateful. I've looked into this before but now have the time and ability to invest in this project!

Thanks, MonorailOrange

Hi, Sounds like a great project.

First, think about using RS485 to carry the serial data signals. Good for long distances and noisy (Stage!!) environments. Some example stuff HERE:

Linear (or Longitudinal) Timecode (LTC) is an encoding of SMPTE timecode data in an audio signal,

Ok, that was to be able to put SMPTE timecode data on audio tracks of film and early video cameras, I think. Why do you need/want to transmit the LinearTimeCode data encoded in Audio? Can't you send it as data?

Does the output of your show controller need to drive any existing equipment that expects the audio encoded LTC? If you are doing you own Arduino-To-Arduino, who else cares?

DMX512 is RS485 communications of commands to devices.

What is the relationship of the Time Code to what devices are supposed to do?

Sorry, don't understand all this...

This sounds very interesting. Give me some time to do some searching. I recently did a bcd encoder in assembly, that might come in handy.

TerryKing,
Thanks for your advice. I’ll give that a look.

As far as the audio signal component of LTC, many existing show control devices (lighting desks, sound boards, and projection equipment) can be synchronized through LTC tones. Most advanced controllers have XLR inputs to receive this audio. The goal of this project is to (cheaply) create processes through which existing technologies can be synchronized. Most LTC generators are audio files in some format.

The shows neighboring the ones I work on All have LTC on a separate “channel” of the audio file, which permits the synch. I’m looking to build a generator for real-time purposes (show pause, show play, next scene). Many cd, or hard drive based audio players have some kind of delay. I’m thinking I can negate this :slight_smile:

nilton61: This sounds very interesting. Give me some time to do some searching. I recently did a bcd encoder in assembly, that might come in handy.

Nilton, thank you. I'd appreciate any feedback you can provide :-)

The shows neighboring the ones I work on All have LTC on a separate "channel" of the audio file,

Interesting; I thought this would be all digital by now..

Can you point to the audio format used? FSK of some kind? Or is it a continuous stream?

How is the TimeCode "Relative", and not "real time"?

terryking228:

The shows neighboring the ones I work on All have LTC on a separate "channel" of the audio file,

Interesting; I thought this would be all digital by now..

Can you point to the audio format used? FSK of some kind? Or is it a continuous stream?

How is the TimeCode "Relative", and not "real time"?

The timecode, when transmitted in an audio format, is indeed FSK.

The timecode is relative in the following manner:

Every night at 8:55, on a neighboring show, the Stage Manager will call the booth and ask them too "roll code." When the booth operator plays the file, the FSK sends signals out to controllers for fountains, pyrotechnics, lasers, and media servers (this is a show unaffiliated with what I'm working on, but I am very familiar with.)

The first "frame" to be sent (LTC is inherently mono directional) is 00:55:32:00 (0 hours:55 minutes:32 seconds:0 frames). It is not in fact "12:55" in the morning. That code allows five minutes for all receiving controllers to "listen" the the timecode and verify that they are ready for show. When bits of timecode start being sent, some anomalies may be seen, indicating that a controller isn't "hearing" code correctly. This allows the stage manager time to dictate a resolution (switching to a second controller for the same system, cutting an element from the show, or running the show with said anomaly). The first element of the show will "fire" at 01:00:01:01 (1 hour:0 Minutes:1 Second:1 Frame).

The timecode can be "paused," "rewound," or "fast forwarded," relative to the show file it's embedded in. In other words, time in the show can be reversed and replayed, or put on hold for any number of reasons.

Here is a site that explains LTC a little better. http://www.philrees.co.uk/articles/timecode.htm It describes the actual data, and how the bits are addressed and constructed. LTC utilizes the bi-phase mark modulation scheme, where every bit is represented as one or two transitions every time period. In one bit over a time period, of the transition occurs once (0 to 1 or 1 to 0) then the bit is read as a "0." If, in the same time period, the transition occurs twice (0 to 1 to 0, or 1 to 0 to 1) the bit is read as "1."

Thank you for your interest and help :)

Good info, thank you

Do you know how to read LTC with arduino? Analog or digital port? Code?

Always check if someone before you already has done something like this by entering keywords in the search box on top of this page. "SMPTE" returns a few projects. Leo..