Don't Forget the Camera!

My test rig and YS50 mule strobe were all working fine. It was now time to get serious and start to hook it up to real equipment.

At first I thought I should tackle jamming the Arduino into the Sea & Sea TTL converter housing. But I decided that I needed 100% confidence in my setup before I started to solder wires to the Arduino. Soldering was a final commitment.

So the next step was to include a real camera into the setup. This required more brain power than I anticipated.

My test setup used a simple pushbutton switch that I used to simulate the camera X signal. The camera drags X to ground to fire the strobe. Simple. My test rig was also simple. I used a digital input in INPUT_HIGH mode and then used the pushbutton switch to short it to ground. This had been working reliably. But only after I had added debounce logic. I could press the switch once to get a single strobe fire, or I could hold the switch closed and the strobe would continue to re-fire as soon as it recharged.

Adding a real camera meant that I needed to provide more sophisticated X signal handling. In the real world the X signal line was a bidirectional control. Both the strobe and the camera signaled information on the same line. The strobe raised the X signal when it was re-charged and ready to fire. The camera shorted the X signal to ground to trigger the strobe to fire. So I needed to provide the camera with a signal that mimicked the strobe X signal. First challenge was how to mimic a signal that was both an output (strobe is ready) and an input (camera shutter activation to fire the strobe). I need to provide the camera with a HIGH X signal so that it could pull it LOW when the camera shutter fired.

The dual purpose (output then input) nature of the single signal line appears to be contradictory. How can a signal line be both an input and an output? It can, but not at the same time. This temporal change in function is the secret sauce. All you need is a single digital input: but you need to flip it between INPUT_HIGH and INPUT mode at different points in time. This split behaviour is somewhat similar to the digital output used to power the Power Level control pot.

I need to pass a HIGH to the camera when the strobe was HIGH and then detect that the camera had pulled it LOW when the shutter was activated. In INPUT_HIGH mode a digital input line will provide a (low current) HIGH signal to the outside world. In normal INPUT mode the digital input provides a LOW signal.

Handling the Camera X was reduced to the following set of simple rules:

  • put the camera X digital input to INPUT_HIGH mode any time the strobe was ready
  • if the strobe is not ready then set camera X digital input to INPUT mode
  • ONLY read the camera X input if the strobe was ready
  • and remember to include the appropriate delay and debouncing logic

My initial efforts required some tweaking to get consistent results. A short delay after flipping to INPUT_HIGH mode was required to avoid getting false LOW readings from the prior INPUT mode. I also needed to reduce the debounce interval as the camera X signal settled much faster than the manual pushbutton contact switch from my test rig.

Initial tests using an old camera worked perfectly. My Arduino Quench logic was fast and stable enough to consistently trigger the YS50 strobe while the camera shutter was open. Substituting my Canon G16 gave the same results.

Time to package it up and go diving!