<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7153314628426170021</id><updated>2012-02-16T19:08:02.258-08:00</updated><title type='text'>Control Your Camera</title><subtitle type='html'>Mac OS X solutions for computer controlled photo and video shooting.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-2765285977529555742</id><published>2011-04-11T12:26:00.000-07:00</published><updated>2011-04-11T12:41:38.989-07:00</updated><title type='text'>iPhone / iPod touch IR controller</title><content type='html'>Connect two IR diodes to the headphone jack of an iPhone / iPod touch or iPad, buy the DSLR.Bot app and start controlling Canon EOS, Nikon, Pentax or Sony cameras. Quite clever.&lt;br /&gt;&lt;br /&gt;&lt;iframe title="YouTube video player" width="400" height="255" src="http://www.youtube.com/embed/eHbmXVZTAgA" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.instructables.com/id/DIY-Infrared-transmitter-for-iPhone-iPod/"&gt;DIY cable&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dslrbot.com/"&gt;DSLR.Bot app&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-2765285977529555742?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/2765285977529555742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2011/04/iphone-ipod-touch-ir-controller.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/2765285977529555742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/2765285977529555742'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2011/04/iphone-ipod-touch-ir-controller.html' title='iPhone / iPod touch IR controller'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/eHbmXVZTAgA/default.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-2524714421609003769</id><published>2011-03-03T14:00:00.000-08:00</published><updated>2011-03-03T14:19:24.262-08:00</updated><title type='text'>Using the OS X terminal to control the Arduino</title><content type='html'>Sometimes it would be good to be able to control the Arduino live from a computer using the keyboard. Unfortunately AppleScript doesn't provide a way to detect keyboard strokes. But you can use the Terminal app of OS X instead. OS X comes with a UNIX &lt;i&gt;screen&lt;/i&gt; command that allows to communicate with the serial port.&lt;br /&gt;&lt;br /&gt;My sample Arduino sketch below starts or stops blinking of the internal LED on the Arduino board depending on two keystrokes. Of course those keystrokes could also trigger more useful camera control tasks.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/*&lt;br /&gt;Terminal2Arduino&lt;br /&gt;Start OS X terminal.app&lt;br /&gt;Find serial device name: ls /dev/tty.*&lt;br /&gt;Open terminal session: screen [serial device name] 9600 &lt;br /&gt;Close session: ctrl-A ctrl-\&lt;br /&gt;\ = shift-alt-7 on some keyboards&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#define LED 13 &lt;br /&gt;byte inbyte = 0;&lt;br /&gt;boolean active = false;&lt;br /&gt;&lt;br /&gt;void setup() {&lt;br /&gt;  Serial.begin(9600); //open the serial port&lt;br /&gt;  pinMode(LED, OUTPUT); &lt;br /&gt;  Serial.println("Type b to start and s to stop blinking of the Arduino LED");&lt;br /&gt;  Serial.print("&gt;"); //simulate prompt&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() {&lt;br /&gt;  &lt;br /&gt;  inbyte = Serial.read(); //Read one byte (one character) from serial port.&lt;br /&gt;  if (inbyte == 'b') { &lt;br /&gt;    active = true; &lt;br /&gt;    Serial.println("b"); //echo the command&lt;br /&gt;    Serial.print("&gt;"); &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  if (inbyte == 's') { &lt;br /&gt;    active = false; &lt;br /&gt;    Serial.println("s"); //echo the command&lt;br /&gt;    Serial.print("&gt;"); &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  if (active) {&lt;br /&gt;     digitalWrite(LED, HIGH);&lt;br /&gt;     delay(500);&lt;br /&gt;     digitalWrite(LED, LOW);&lt;br /&gt;     delay(500);&lt;br /&gt;   } else {&lt;br /&gt;     digitalWrite(LED, LOW);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Download the sketch then start the OS X &lt;i&gt;Terminal.app&lt;/i&gt;&lt;br /&gt;Find the serial device name of the Arduino with &lt;i&gt;ls /dev/tty.*&lt;/i&gt;&lt;br /&gt;Open a terminal session using &lt;i&gt;screen [serial device name] 9600&lt;/i&gt; &lt;br /&gt;e.g.: &lt;i&gt;screen /dev/tty.usbserial-A6004byf 9600&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-p76cyCFEItw/TXAOA-3ni5I/AAAAAAAAApg/x-WgWZLY03g/s1600/Screen%2Bshot%2B2011-03-03%2Bat%2B22.51.56.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="117" width="400" src="http://1.bp.blogspot.com/-p76cyCFEItw/TXAOA-3ni5I/AAAAAAAAApg/x-WgWZLY03g/s400/Screen%2Bshot%2B2011-03-03%2Bat%2B22.51.56.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-1Y8_qN0nUAs/TXAOAx9GDeI/AAAAAAAAApo/1iVc_uUOqto/s1600/Screen%2Bshot%2B2011-03-03%2Bat%2B22.52.52.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="177" width="400" src="http://4.bp.blogspot.com/-1Y8_qN0nUAs/TXAOAx9GDeI/AAAAAAAAApo/1iVc_uUOqto/s400/Screen%2Bshot%2B2011-03-03%2Bat%2B22.52.52.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Close the screen session and free the serial connection for use with the Arduino development envirement by typing &lt;br /&gt;&lt;i&gt;ctrl-A&lt;/i&gt; followed by &lt;i&gt;ctrl-\&lt;/i&gt; followed by &lt;i&gt;y&lt;/i&gt;&lt;br /&gt;&lt;small&gt;\ = shift-alt-7 on some keyboards&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tired of typing? Save the AppleScript below as an app to get a double-clickable application to launch a serial Terminal session.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;tell application "Terminal"&lt;br /&gt; do script with command "screen /dev/tty.usbserial-A6004byf 9600"&lt;br /&gt; set number of rows of window 1 to 20&lt;br /&gt; set number of columns of window 1 to 50&lt;br /&gt; set background color of window 1 to "black"&lt;br /&gt; set normal text color of window 1 to "green"&lt;br /&gt; set custom title of window 1 to "Let's talk to the Arduino"&lt;br /&gt;end tell&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-2524714421609003769?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/2524714421609003769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2011/03/using-os-x-terminal-to-control-arduino.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/2524714421609003769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/2524714421609003769'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2011/03/using-os-x-terminal-to-control-arduino.html' title='Using the OS X terminal to control the Arduino'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-p76cyCFEItw/TXAOA-3ni5I/AAAAAAAAApg/x-WgWZLY03g/s72-c/Screen%2Bshot%2B2011-03-03%2Bat%2B22.51.56.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-8874588215458707111</id><published>2011-02-13T05:24:00.000-08:00</published><updated>2011-04-07T01:06:35.295-07:00</updated><title type='text'>Finding out LANC remote commands</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-hS09Dqrfvqk/TVfZAzr4b6I/AAAAAAAAAlw/2Mt7Y6FqfBc/s1600/LANC_SNIFFER.png" imageanchor="1" style=""&gt;&lt;img border="0" height="225" width="347" src="http://1.bp.blogspot.com/-hS09Dqrfvqk/TVfZAzr4b6I/AAAAAAAAAlw/2Mt7Y6FqfBc/s400/LANC_SNIFFER.png" /&gt;&lt;/a&gt;&lt;/div&gt;To find the commands of a LANC remote you need to solder a LANC extension cable with two additional wires going to the Arduino. &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Attention! If your camera works with a LANC voltage of more than 5V this solution can't be used.&lt;/blockquote&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-I6ESrKTF4Ks/TVhDPFUlLJI/AAAAAAAAAmA/XHiC-cWNj5E/s1600/zr-1000.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="195" width="400" src="http://4.bp.blogspot.com/-I6ESrKTF4Ks/TVhDPFUlLJI/AAAAAAAAAmA/XHiC-cWNj5E/s400/zr-1000.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-HZRO-LJ13gE/TVe2OR1AgvI/AAAAAAAAAlQ/aPMVmhZ7A1E/s1600/ZR-1000%2BLANC%2Bcommands.png" imageanchor="1" style=""&gt;&lt;img border="0" height="400" width="237" src="http://3.bp.blogspot.com/-HZRO-LJ13gE/TVe2OR1AgvI/AAAAAAAAAlQ/aPMVmhZ7A1E/s400/ZR-1000%2BLANC%2Bcommands.png" /&gt;&lt;/a&gt;&lt;/div&gt;All LANC commands of a Canon ZR-1000 LANC remote for use with e.g. the &lt;a href="http://controlyourcamera.blogspot.com/2011/02/usb-to-lanc-interface-adapter-by.html"&gt;previously mentioned USB to LANC cable&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Arduino sketch that repeatetly prints byte 0 and byte 1 of the LANC packet to the Serial Monitor in the Arduino developing environment. Press a button on the remote and watch the command appear.&lt;br /&gt;&lt;pre&gt;/*&lt;br /&gt;LANC SNIFFER&lt;br /&gt;Version 1.0&lt;br /&gt;Finds out LANC commands from a REMOTE&lt;br /&gt;For the interface ciruit see&lt;br /&gt;http://controlyourcamera.blogspot.com/2011/02/finding-out-lanc-remote-commands.html&lt;br /&gt;Feel free to use this code in any way you want.&lt;br /&gt;2011, Martin Koch&lt;br /&gt;&lt;br /&gt;"LANC" is a registered trademark of SONY.&lt;br /&gt;CANON calls their LANC compatible port "REMOTE".&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#define lancPin 11&lt;br /&gt;&lt;br /&gt;int bitDuration = 104; //Duration of one LANC bit in microseconds. &lt;br /&gt;&lt;br /&gt;int lancBit[16];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void setup() {&lt;br /&gt;        Serial.begin(9600); //open the serial port&lt;br /&gt; pinMode(lancPin, INPUT); //listens to the LANC line&lt;br /&gt;        delay(5000); //Wait for camera to power up completly&lt;br /&gt;        bitDuration = bitDuration- 8; //Reading the digital port takes about 8 microseconds so only 96 microseconds are left for each bit&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() {&lt;br /&gt;  readLancCommand();&lt;br /&gt;  delay(1000);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void readLancCommand() {&lt;br /&gt;       &lt;br /&gt;     while (pulseIn(lancPin, HIGH) &lt; 5000) {   &lt;br /&gt;      //"pulseIn, HIGH" catches any 0V TO +5V TRANSITION and waits until the LANC line goes back to 0V &lt;br /&gt;      //"pulseIn" also returns the pulse duration so we can check if the previous +5V duration was long enough (&gt;5ms) to be the pause before a new 8 byte data packet&lt;br /&gt;      //Loop till pulse duration is &gt;5ms&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;    //LOW after long pause means the START bit of Byte 0 is here&lt;br /&gt;    delayMicroseconds(bitDuration);  //wait START bit duration&lt;br /&gt;    delayMicroseconds(bitDuration/2); //wait until the middle of bit 0 of byte 0&lt;br /&gt;&lt;br /&gt;    //Read the 8 bits of byte 0 &lt;br /&gt;    //Note that the command bits come in in reverse order with the least significant, right-most bit (bit 0) first&lt;br /&gt;    for (int i=7; i&gt;-1; i--) {&lt;br /&gt;      lancBit[i] = digitalRead(lancPin);  //read bits. &lt;br /&gt;      delayMicroseconds(bitDuration); &lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    //Byte 0 is read&lt;br /&gt;      &lt;br /&gt;     delayMicroseconds(10); //make sure to be in the stop bit before byte 1&lt;br /&gt;      &lt;br /&gt;      while (digitalRead(lancPin)) { &lt;br /&gt;        //Loop as long as the LANC line is +5V during the stop bit&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      //0V after the previous stop bit means the START bit of Byte 1 is here&lt;br /&gt;      delayMicroseconds(bitDuration);  //wait START bit duration&lt;br /&gt;      delayMicroseconds(bitDuration/2); //wait until the middle of bit 0 of byte 1&lt;br /&gt;      &lt;br /&gt;      //Read the 8 bits of Byte 1&lt;br /&gt;      //Note that the command bits have to be read in reverse order with the least significant, right-most bit (bit 0) first&lt;br /&gt;      for (int i=15; i&gt;7; i--) {&lt;br /&gt;        lancBit[i] = digitalRead(lancPin); //read bits &lt;br /&gt; delayMicroseconds(bitDuration);&lt;br /&gt;      }&lt;br /&gt; &lt;br /&gt;      //Byte 1 is read&lt;br /&gt;&lt;br /&gt;   &lt;br /&gt;      //Print byte 0 and byte 1 to the Serial Monitor console of the Arduino developing environment&lt;br /&gt;      Serial.println("BITS: ");&lt;br /&gt;      for (int i=0; i&lt;16; i++) {&lt;br /&gt;        Serial.print((lancBit[i]-1)*-1); //invert the bits&lt;br /&gt;        if (i==7) Serial.print(" ");                        &lt;br /&gt;      }  &lt;br /&gt;      Serial.println("");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;/pre&gt;If you try this with other LANC remotes please post your findings (command / hex values) in the comments. I'm especially interested in the additional commands of the Canon ZR-2000 LANC remote.&lt;blockquote&gt;I found out the useful &lt;b&gt;PUSH AF&lt;/b&gt; code of the ZR-2000 by trial and error. It is &lt;b&gt;2843&lt;/b&gt; and has to be send repeatetly for a second or two in order to have an effect. The camera has to be in manual focus mode and Push AF invokes auto focus temporarily&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-8874588215458707111?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/8874588215458707111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2011/02/finding-out-lanc-remote-commands.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8874588215458707111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8874588215458707111'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2011/02/finding-out-lanc-remote-commands.html' title='Finding out LANC remote commands'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-hS09Dqrfvqk/TVfZAzr4b6I/AAAAAAAAAlw/2Mt7Y6FqfBc/s72-c/LANC_SNIFFER.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-1573027921971822350</id><published>2011-02-04T13:36:00.000-08:00</published><updated>2011-03-03T00:46:20.214-08:00</updated><title type='text'>USB to LANC Interface Adapter by Applied Logic Engineering</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/TUxvrywWNEI/AAAAAAAAAkw/m-mYh0qxy0Y/s1600/USB2LANC.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="97" width="400" src="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/TUxvrywWNEI/AAAAAAAAAkw/m-mYh0qxy0Y/s400/USB2LANC.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Applied Logic Engineering offer a simple solution to send LANC commands from a Laptop. Their $85 USB to LANC cable (#ALE708) contains an ELM 624 chip and an USB interface. No other hardware or software driver is required — the adapter works via a virtual COM (serial) port that is automatically created when the cable is plugged into the computer. &lt;br /&gt;The cable can be used manually with terminal emulation software by just typing in the commands. It is compatible with Windows, Linux, and Macintosh operating systems.&lt;br /&gt;&lt;br /&gt;I ordered the cable and can now use AppleScript to send LANC commands. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;How to send LANC commands using AppleScript&lt;/h2&gt;1) Download the AppleScript extension SerialPort X.&lt;br /&gt;2) Copy the file &lt;i&gt;SerialPort X.osax&lt;/i&gt; to &lt;i&gt;your_username/library/ScriptingAdditions/&lt;/i&gt;&lt;br /&gt;3) Start the AppleScript Editor and copy and paste the script below.&lt;br /&gt;4) Connect the USB to LANC cable to the USB port.&lt;br /&gt;5) Open a new AppleScript window and type &lt;i&gt;serialport list&lt;/i&gt;. Run this one-line script and find the name of the serial port used by the cable. Something like "/dev/cu.usbserial-A7TP5NWJ"&lt;br /&gt;6) Change the name in the script below to the one found by &lt;i&gt;serialport list&lt;/i&gt;.&lt;br /&gt;7) Connect the cable to the camera and turn it on.&lt;br /&gt;8) Run the AppleScript. The camera should start recording after two seconds.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;-- Uses SerialPort X from http://mysite.verizon.net/vzenuoqe/MacSoft.html&lt;br /&gt;-- Use "serialport list" to find the name of the serial port&lt;br /&gt;set portRef to serialport open "/dev/cu.usbserial-A7TP5NWJ" bps rate 9600 data bits 8 parity 0 stop bits 1 handshake 0&lt;br /&gt;if portRef is equal to -1 then&lt;br /&gt; display dialog "Could not open serial port" buttons {"OK"} default button 1&lt;br /&gt;else&lt;br /&gt; delay 2&lt;br /&gt; serialport write "1833" &amp; return to portRef -- 1833 is the LANC command to start/stop video recording&lt;br /&gt; serialport close portRef&lt;br /&gt;end if&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://www.appliedlogiceng.com/index_files/Page1485.htm"&gt;Applied Logic Engineering&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.elmelectronics.com/thehome.html#AV"&gt;Elm Electronics ELM 624&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mysite.verizon.net/vzenuoqe/MacSoft.html"&gt;SerialPort X&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-1573027921971822350?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/1573027921971822350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2011/02/usb-to-lanc-interface-adapter-by.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/1573027921971822350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/1573027921971822350'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2011/02/usb-to-lanc-interface-adapter-by.html' title='USB to LANC Interface Adapter by Applied Logic Engineering'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3Xt9bQNnE4Q/TUxvrywWNEI/AAAAAAAAAkw/m-mYh0qxy0Y/s72-c/USB2LANC.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-3694440004630972803</id><published>2011-02-04T05:19:00.000-08:00</published><updated>2011-02-05T05:52:23.633-08:00</updated><title type='text'>Arduino powered simple LANC remote</title><content type='html'>This is a follow up on the &lt;a href="http://controlyourcamera.blogspot.com/2011/02/arduino-controlled-video-recording-over.html"&gt;previous post on starting video recording using the LANC port&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/TUwpM7f7tcI/AAAAAAAAAko/YOT5MSTZ_Ow/s1600/LANC_REMOTE.png" imageanchor="1" style=""&gt;&lt;img border="0" height="400" width="380" src="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/TUwpM7f7tcI/AAAAAAAAAko/YOT5MSTZ_Ow/s400/LANC_REMOTE.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The Arduino sketch below let's you send the REC command, two ZOOM and two FOCUS commands. The LANC commands are arrays containing the bit values for byte 0 and byte 1 of the specific command. All switches should be push buttons.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/*&lt;br /&gt;SIMPLE LANC REMOTE&lt;br /&gt;Version 1.0&lt;br /&gt;Sends LANC commands to the LANC port of a video camera.&lt;br /&gt;Tested with a Canon XF300 camcorder&lt;br /&gt;For the interface circuit interface see &lt;br /&gt;http://controlyourcamera.blogspot.com/2011/02/arduino-controlled-video-recording-over.html&lt;br /&gt;Feel free to use this code in any way you want.&lt;br /&gt;2011, Martin Koch&lt;br /&gt;&lt;br /&gt;"LANC" is a registered trademark of SONY.&lt;br /&gt;CANON calls their LANC compatible port "REMOTE".&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#define cmdPin 7 &lt;br /&gt;#define lancPin 11&lt;br /&gt;#define recButton 6&lt;br /&gt;#define zoomOutButton 5&lt;br /&gt;#define zoomInButton 4&lt;br /&gt;#define focusNearButton 3&lt;br /&gt;#define focusFarButton 2&lt;br /&gt;int cmdRepeatCount;&lt;br /&gt;int bitDuration = 104; //Duration of one LANC bit in microseconds. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//LANC commands byte 0 + byte 1&lt;br /&gt;//Tested with Canon XF300&lt;br /&gt;&lt;br /&gt;//Start-stop video recording&lt;br /&gt;boolean REC[] = {LOW,LOW,LOW,HIGH,HIGH,LOW,LOW,LOW,   LOW,LOW,HIGH,HIGH,LOW,LOW,HIGH,HIGH}; //18 33&lt;br /&gt;&lt;br /&gt;//Zoom in from slowest to fastest speed&lt;br /&gt;boolean ZOOM_IN_0[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW}; //28 00&lt;br /&gt;boolean ZOOM_IN_1[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,LOW,LOW,LOW,HIGH,LOW}; //28 02&lt;br /&gt;boolean ZOOM_IN_2[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,LOW,LOW,HIGH,LOW,LOW}; //28 04&lt;br /&gt;boolean ZOOM_IN_3[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,LOW,LOW,HIGH,HIGH,LOW}; //28 06&lt;br /&gt;boolean ZOOM_IN_4[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,LOW,HIGH,LOW,LOW,LOW}; //28 08&lt;br /&gt;boolean ZOOM_IN_5[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,LOW,HIGH,LOW,HIGH,LOW}; //28 0A&lt;br /&gt;boolean ZOOM_IN_6[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,LOW,HIGH,HIGH,LOW,LOW}; //28 0C&lt;br /&gt;boolean ZOOM_IN_7[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,LOW,HIGH,HIGH,HIGH,LOW}; //28 0E&lt;br /&gt;&lt;br /&gt;//Zoom out from slowest to fastest speed&lt;br /&gt;boolean ZOOM_OUT_0[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,HIGH,LOW,LOW,LOW,LOW}; //28 10&lt;br /&gt;boolean ZOOM_OUT_1[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,HIGH,LOW,LOW,HIGH,LOW}; //28 12&lt;br /&gt;boolean ZOOM_OUT_2[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,HIGH,LOW,HIGH,LOW,LOW}; //28 14&lt;br /&gt;boolean ZOOM_OUT_3[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,HIGH,LOW,HIGH,HIGH,LOW}; //28 16&lt;br /&gt;boolean ZOOM_OUT_4[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,HIGH,HIGH,LOW,LOW,LOW}; //28 18&lt;br /&gt;boolean ZOOM_OUT_5[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,HIGH,HIGH,LOW,HIGH,LOW}; //28 1A&lt;br /&gt;boolean ZOOM_OUT_6[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,HIGH,HIGH,HIGH,LOW,LOW}; //28 1C&lt;br /&gt;boolean ZOOM_OUT_7[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,LOW,LOW,HIGH,HIGH,HIGH,HIGH,LOW}; //28 1E&lt;br /&gt;&lt;br /&gt;//Focus control. Camera must be switched to manual focus&lt;br /&gt;boolean FOCUS_NEAR[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,HIGH,LOW,LOW,LOW,HIGH,HIGH,HIGH}; //28 47&lt;br /&gt;boolean FOCUS_FAR[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,HIGH,LOW,LOW,LOW,HIGH,LOW,HIGH}; //28 45&lt;br /&gt;&lt;br /&gt;boolean FOCUS_AUTO[] = {LOW,LOW,HIGH,LOW,HIGH,LOW,LOW,LOW,   LOW,HIGH,LOW,LOW,LOW,LOW,LOW,HIGH}; //28 41&lt;br /&gt;&lt;br /&gt;//boolean POWER_OFF[] = {LOW,LOW,LOW,HIGH,HIGH,LOW,LOW,LOW,   LOW,HIGH,LOW,HIGH,HIGH,HIGH,HIGH,LOW}; //18 5E&lt;br /&gt;//boolean POWER_ON[] = {LOW,LOW,LOW,HIGH,HIGH,LOW,LOW,LOW,   LOW,HIGH,LOW,HIGH,HIGH,HIGH,LOW,LOW}; //18 5C  Doesn't work because there's no power supply from the LANC port when the camera is off&lt;br /&gt;//boolean POWER_OFF2[] = {LOW,LOW,LOW,HIGH,HIGH,LOW,LOW,LOW,   LOW,LOW,HIGH,LOW,HIGH,LOW,HIGH,LOW}; //18 2A Turns the XF300 off and then on again&lt;br /&gt;//boolean POWER_SAVE[] = {LOW,LOW,LOW,HIGH,HIGH,LOW,LOW,LOW,   LOW,HIGH,HIGH,LOW,HIGH,HIGH,LOW,LOW}; //18 6C Didn't work&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void setup() {&lt;br /&gt;&lt;br /&gt; pinMode(lancPin, INPUT); //listens to the LANC line&lt;br /&gt; pinMode(cmdPin, OUTPUT); //writes to the LANC line&lt;br /&gt;&lt;br /&gt; pinMode(recButton, INPUT); //start-stop recording button&lt;br /&gt;        digitalWrite(recButton, HIGH); //turn on an internal pull up resistor&lt;br /&gt;        pinMode(zoomOutButton, INPUT); &lt;br /&gt;        digitalWrite(zoomOutButton, HIGH);&lt;br /&gt;        pinMode(zoomInButton, INPUT); &lt;br /&gt;        digitalWrite(zoomInButton, HIGH);&lt;br /&gt;        pinMode(focusNearButton, INPUT); &lt;br /&gt;        digitalWrite(focusNearButton, HIGH);&lt;br /&gt;        pinMode(focusFarButton, INPUT); &lt;br /&gt;        digitalWrite(focusFarButton, HIGH);&lt;br /&gt;        &lt;br /&gt;        digitalWrite(cmdPin, LOW); //set LANC line to +5V&lt;br /&gt;        delay(5000); //Wait for camera to power up completly&lt;br /&gt;        bitDuration = bitDuration - 8; //Writing to the digital port takes about 8 microseconds so only 96 microseconds are left for each bit&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() {&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;   if (!digitalRead(recButton)) {&lt;br /&gt;    lancCommand(REC); &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  if (!digitalRead(zoomOutButton)) {&lt;br /&gt;    lancCommand(ZOOM_OUT_4); &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  if (!digitalRead(zoomInButton)) {&lt;br /&gt;    lancCommand(ZOOM_IN_4); &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  if (!digitalRead(focusNearButton)) {&lt;br /&gt;    lancCommand(FOCUS_NEAR); &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  if (!digitalRead(focusFarButton)) {&lt;br /&gt;    lancCommand(FOCUS_FAR); &lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void lancCommand(boolean lancBit[]) {&lt;br /&gt;       &lt;br /&gt;        cmdRepeatCount = 0;&lt;br /&gt;  &lt;br /&gt;   while (cmdRepeatCount &lt; 5) {  //repeat 5 times to make sure the camera accepts the command&lt;br /&gt;&lt;br /&gt;                while (pulseIn(lancPin, HIGH) &lt; 5000) {   &lt;br /&gt;                  //"pulseIn, HIGH" catches any 0V TO +5V TRANSITION and waits until the LANC line goes back to 0V &lt;br /&gt;                  //"pulseIn" also returns the pulse duration so we can check if the previous +5V duration was long enough (&gt;5ms) to be the pause before a new 8 byte data packet&lt;br /&gt;                  //Loop till pulse duration is &gt;5ms&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;   //LOW after long pause means the START bit of Byte 0 is here&lt;br /&gt;   delayMicroseconds(bitDuration);  //wait START bit duration&lt;br /&gt;&lt;br /&gt;   //Write the 8 bits of byte 0 &lt;br /&gt;                        //Note that the command bits have to be put out in reverse order with the least significant, right-most bit (bit 0) first&lt;br /&gt;                        for (int i=7; i&gt;-1; i--) {&lt;br /&gt;     digitalWrite(cmdPin, lancBit[i]);  //Write bits. &lt;br /&gt;     delayMicroseconds(bitDuration); &lt;br /&gt;                        }&lt;br /&gt;   &lt;br /&gt;                        //Byte 0 is written now put LANC line back to +5V&lt;br /&gt;                        digitalWrite(cmdPin, LOW);&lt;br /&gt;                        delayMicroseconds(10); //make sure to be in the stop bit before byte 1&lt;br /&gt;                        &lt;br /&gt;                        while (digitalRead(lancPin)) { &lt;br /&gt;                          //Loop as long as the LANC line is +5V during the stop bit&lt;br /&gt;                        }&lt;br /&gt;&lt;br /&gt;                        //0V after the previous stop bit means the START bit of Byte 1 is here&lt;br /&gt;         delayMicroseconds(bitDuration);  //wait START bit duration&lt;br /&gt;      &lt;br /&gt;         //Write the 8 bits of Byte 1&lt;br /&gt;                        //Note that the command bits have to be put out in reverse order with the least significant, right-most bit (bit 0) first&lt;br /&gt;                        for (int i=15; i&gt;7; i--) {&lt;br /&gt;              digitalWrite(cmdPin,lancBit[i]);  //Write bits &lt;br /&gt;             delayMicroseconds(bitDuration);&lt;br /&gt;                        }&lt;br /&gt; &lt;br /&gt;                        //Byte 1 is written now put LANC line back to +5V&lt;br /&gt;                        digitalWrite(cmdPin, LOW); &lt;br /&gt;&lt;br /&gt;   cmdRepeatCount++;  //increase repeat count by 1&lt;br /&gt;   &lt;br /&gt;   /*Control bytes 0 and 1 are written, now don’t care what happens in Bytes 2 to 7&lt;br /&gt;   and just wait for the next start bit after a long pause to send the first two command bytes again.*/&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt; }//While cmdRepeatCount &lt; 5&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-3694440004630972803?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/3694440004630972803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2011/02/arduino-powered-lanc-remote.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/3694440004630972803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/3694440004630972803'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2011/02/arduino-powered-lanc-remote.html' title='Arduino powered simple LANC remote'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3Xt9bQNnE4Q/TUwpM7f7tcI/AAAAAAAAAko/YOT5MSTZ_Ow/s72-c/LANC_REMOTE.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-3510818550511763364</id><published>2011-02-03T02:23:00.000-08:00</published><updated>2011-02-06T01:43:48.921-08:00</updated><title type='text'>Arduino controlled video recording using the LANC port</title><content type='html'>LANC is a SONY development and stands for "Local Application Control Bus". It is a two-way serial open collector 9600 baud protocol with inverted logic. The LANC line is pulled high to about +5v and is pulled low to send commands or status information.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/TU5sg3EW_4I/AAAAAAAAAk4/CPW6-5B0oCg/s1600/LANC-pattern.png" imageanchor="1" style=""&gt;&lt;img border="0" height="108" width="400" src="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/TU5sg3EW_4I/AAAAAAAAAk4/CPW6-5B0oCg/s400/LANC-pattern.png" /&gt;&lt;/a&gt;&lt;/div&gt;The data stream is 8 bytes, followed by a longer than 5 millisecond pause until the end of the current frame. Then come another 8 bytes for the next frame and another pause and so on.&lt;br /&gt;There's a short pause between individual bytes. Each byte is preceded by a start bit.&lt;br /&gt;&lt;br /&gt;LANC is a single wire serial connection and because of this timing is critical. The camera can only listen to commands for the first half of the signal pattern.&lt;br /&gt;The camera listens to the first 4 bytes and sends status information in the last 4 bytes. Only the first two bytes are needed to control a video camera. The rest can be ignored.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/TU5sq-0R76I/AAAAAAAAAlA/30JX3WjMD5A/s1600/LANC-startstopbits.png" imageanchor="1" style=""&gt;&lt;img border="0" height="149" width="400" src="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/TU5sq-0R76I/AAAAAAAAAlA/30JX3WjMD5A/s400/LANC-startstopbits.png" /&gt;&lt;/a&gt;&lt;/div&gt;To send a command to the camera the command has to be synchronized to the LANC signal from the camera. The camera puts out a start bit before and a stop bit after each byte. The first command byte from the controller (Arduino) has to be transmitted exactly between the start bit that follows the long pause between the 8 byte data packages and the following short stop bit. Then the second byte must be send to the camera. After sending those two bytes the LANC signal must be be left alone and put back to LOW i.e +5V. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3Xt9bQNnE4Q/TU5s5-mXgiI/AAAAAAAAAlI/-h6uGE2nwzE/s1600/startstop-pattern.png" imageanchor="1" style=""&gt;&lt;img border="0" height="165" width="400" src="http://3.bp.blogspot.com/_3Xt9bQNnE4Q/TU5s5-mXgiI/AAAAAAAAAlI/-h6uGE2nwzE/s400/startstop-pattern.png" /&gt;&lt;/a&gt;&lt;/div&gt;The commands for starting and stopping video recording are 18 and 33 in hexadecimal format or 00011000 and 00110011 in binary format. The bytes must be put out with the least significant, right-most bit (bit 0) first i.e. 00110011 is put out 11001100. Note that in a LANC signal LOW is +5V and HIGH is 0V. LANC commands must be repeated 4 times in order to be accepted by the camera.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3Xt9bQNnE4Q/TUqBWJ8y1yI/AAAAAAAAAkM/Tx_Pn1irJeQ/s1600/LANC-Interface.png" imageanchor="1" style=""&gt;&lt;img border="0" height="385" width="400" src="http://3.bp.blogspot.com/_3Xt9bQNnE4Q/TUqBWJ8y1yI/AAAAAAAAAkM/Tx_Pn1irJeQ/s400/LANC-Interface.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Since we have to read from and write to a single wire an interface is required. Thanks to &lt;a href="http://micro.arocholl.com/index.php?option=com_content&amp;view=article&amp;id=19:lanc&amp;catid=35:arduino-article&amp;Itemid=53"&gt;Ariel Rocholls&lt;/a&gt; simple interface circuit writing and reading can be done independently. D1 is a 5.1V zener diode.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Arduino sketch:&lt;/b&gt;&lt;br /&gt;Copy and paste it into the Arduino editor for a better reading experience.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/*&lt;br /&gt;Send a Start/Sop Recording command to the LANC port of a video camera.&lt;br /&gt;Tested with a Canon XF300 camcorder&lt;br /&gt;This code requires a simple interface see http://micro.arocholl.com&lt;br /&gt;Feel free to use this code in any way you want.&lt;br /&gt;&lt;br /&gt;Comprehensive LANC info: www.boehmel.de/lanc.htm&lt;br /&gt;&lt;br /&gt;"LANC" is a registered trademark of SONY.&lt;br /&gt;CANON calls their LANC compatible port "REMOTE".&lt;br /&gt;&lt;br /&gt;2011, Martin Koch&lt;br /&gt;http://controlyourcamera.blogspot.com/2011/02/arduino-controlled-video-recording-over.html&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#define cmdPin 7 &lt;br /&gt;#define lancPin 11&lt;br /&gt;#define recButton 2&lt;br /&gt;int cmdRepeatCount;&lt;br /&gt;int bitDuration = 104; //Duration of one LANC bit in microseconds. &lt;br /&gt;&lt;br /&gt;void setup() {&lt;br /&gt;&lt;br /&gt;pinMode(lancPin, INPUT); //listens to the LANC line&lt;br /&gt;pinMode(cmdPin, OUTPUT); //writes to the LANC line&lt;br /&gt;pinMode(recButton, INPUT); //start-stop recording button&lt;br /&gt;digitalWrite(recButton, HIGH); //turn on an internal pull up resistor&lt;br /&gt;digitalWrite(cmdPin, LOW); //set LANC line to +5V&lt;br /&gt;delay(5000); //Wait for camera to power up completly&lt;br /&gt;bitDuration = bitDuration - 8; //Writing to the digital port takes about 8 microseconds so only 96 microseconds are left till the end of each bit&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() {&lt;br /&gt;if (!digitalRead(recButton)) {&lt;br /&gt;REC(); //send REC command to camera&lt;br /&gt;delay(1000); //debounce button&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void REC() {&lt;br /&gt;&lt;br /&gt;cmdRepeatCount = 0;&lt;br /&gt;&lt;br /&gt;while (cmdRepeatCount &lt; 5) {  //repeat 5 times to make sure the camera accepts the command&lt;br /&gt;&lt;br /&gt;                while (pulseIn(lancPin, HIGH) &lt; 5000) {   &lt;br /&gt;                  //"pulseIn, HIGH" catches any 0V TO +5V TRANSITION and waits until the LANC line goes back to 0V &lt;br /&gt;                  //"pulseIn" also returns the pulse duration so we can check if the previous +5V duration was long enough (&gt;5ms) to be the pause before a new 8 byte data packet&lt;br /&gt;//Loop till pulse duration is &gt;5ms&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//LOW after long pause means the START bit of Byte 0 is here&lt;br /&gt;delayMicroseconds(bitDuration);  //wait START bit duration&lt;br /&gt;&lt;br /&gt;//Write the 8 bits of byte 0 &lt;br /&gt;//"18hex" or “00011000”  tells the camera that there will be a normal command to camera in the next byte&lt;br /&gt;//Note that the command bits have to be put out in reverse order with the least significant, right-most bit (bit 0) first&lt;br /&gt;digitalWrite(cmdPin, LOW);  //Write bit 0. &lt;br /&gt;delayMicroseconds(bitDuration); &lt;br /&gt;digitalWrite(cmdPin, LOW);  //Write bit 1 &lt;br /&gt;delayMicroseconds(bitDuration);  &lt;br /&gt;digitalWrite(cmdPin, LOW);  //Write bit 2&lt;br /&gt;delayMicroseconds(bitDuration); &lt;br /&gt;digitalWrite(cmdPin, HIGH);  //Write bit 3&lt;br /&gt;delayMicroseconds(bitDuration);  &lt;br /&gt;digitalWrite(cmdPin, HIGH);  //Write bit 4&lt;br /&gt;delayMicroseconds(bitDuration);&lt;br /&gt;digitalWrite(cmdPin, LOW);  //Write bit 5 &lt;br /&gt;delayMicroseconds(bitDuration);&lt;br /&gt;digitalWrite(cmdPin, LOW);  //Write bit 6&lt;br /&gt;delayMicroseconds(bitDuration); &lt;br /&gt;digitalWrite(cmdPin, LOW);  //Write bit 7&lt;br /&gt;delayMicroseconds(bitDuration);&lt;br /&gt;//Byte 0 is written now put LANC line back to +5V&lt;br /&gt;digitalWrite(cmdPin, LOW);&lt;br /&gt;delayMicroseconds(10); //make sure to be in the stop bit before byte 1&lt;br /&gt;&lt;br /&gt;while (digitalRead(lancPin)) { &lt;br /&gt;//Loop as long as the LANC line is +5V during the stop bit&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//0V after the previous stop bit means the START bit of Byte 1 is here&lt;br /&gt;delayMicroseconds(bitDuration);  //wait START bit duration&lt;br /&gt;&lt;br /&gt;//Write the 8 bits of Byte 1&lt;br /&gt;//"33hex" or “00110011” sends the  Record Start/Stop command&lt;br /&gt;//Note that the command bits have to be put out in reverse order with the least significant, right-most bit (bit 0) first&lt;br /&gt;digitalWrite(cmdPin, HIGH);  //Write bit 0 &lt;br /&gt;delayMicroseconds(bitDuration);&lt;br /&gt;digitalWrite(cmdPin, HIGH);  //Write bit 1 &lt;br /&gt;delayMicroseconds(bitDuration); &lt;br /&gt;digitalWrite(cmdPin, LOW);  //Write bit 2&lt;br /&gt;delayMicroseconds(bitDuration); &lt;br /&gt;digitalWrite(cmdPin, LOW);  //Write bit 3&lt;br /&gt;delayMicroseconds(bitDuration);&lt;br /&gt;digitalWrite(cmdPin, HIGH);  //Write bit 4 &lt;br /&gt;delayMicroseconds(bitDuration); &lt;br /&gt;digitalWrite(cmdPin, HIGH);  //Write bit 5&lt;br /&gt;delayMicroseconds(bitDuration);&lt;br /&gt;digitalWrite(cmdPin, LOW);  //Write bit 6&lt;br /&gt;delayMicroseconds(bitDuration);&lt;br /&gt;digitalWrite(cmdPin, LOW);  //Write bit 7&lt;br /&gt;delayMicroseconds(bitDuration);&lt;br /&gt;//Byte 1 is written now put LANC line back to +5V&lt;br /&gt;digitalWrite(cmdPin, LOW); &lt;br /&gt;&lt;br /&gt;cmdRepeatCount++;  //increase repeat count by 1&lt;br /&gt;&lt;br /&gt;/*Control bytes 0 and 1 are written, now don’t care what happens in Bytes 2 to 7&lt;br /&gt;and just wait for the next start bit after a long pause to send the first two command bytes again.*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}//While cmdRepeatCount &lt; 5&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;I've tested the Arduino sketch with a Canon XF300 camcorder and I suppose that the timing will work with the entire XF family. Other cameras may require experimenting with different "delayMicroseconds" values.&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/TUqiLWLwQpI/AAAAAAAAAkU/sE44MTqHHJ8/s1600/lanc-interface.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="316" width="400" src="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/TUqiLWLwQpI/AAAAAAAAAkU/sE44MTqHHJ8/s400/lanc-interface.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;The prototype LANC interface is built onto a shield board that sits on top of the Arduino. The Arduino is powered by the LANC port. Although the XF300 puts out only +5V the Arduino worked without problems. During development I had the USB cable connected to the camera at the same time as the Interface was connected to the camera. I suppose since the Arduino chooses automatically to use either the external or the +5V USB power supply this should be safe.&lt;blockquote&gt;Always turn the camera off before plugging or unplugging the LANC cable!&lt;/blockquote&gt;"LANC" is a registered trademark of SONY.CANON calls their LANC compatible port "REMOTE".Comprehensive LANC info can be found at &lt;a href="http://www.boehmel.de/lanc.htm"&gt;boehmel.de/lanc.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-3510818550511763364?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/3510818550511763364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2011/02/arduino-controlled-video-recording-over.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/3510818550511763364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/3510818550511763364'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2011/02/arduino-controlled-video-recording-over.html' title='Arduino controlled video recording using the LANC port'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3Xt9bQNnE4Q/TU5sg3EW_4I/AAAAAAAAAk4/CPW6-5B0oCg/s72-c/LANC-pattern.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-8657116349778653508</id><published>2010-10-27T09:04:00.000-07:00</published><updated>2011-02-06T13:22:36.962-08:00</updated><title type='text'>Don't buy Nikon software from imagemixer.net</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/TMhLfAsgZsI/AAAAAAAAAjc/EPP7eT7_kR8/s1600/imagemixer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/TMhLfAsgZsI/AAAAAAAAAjc/EPP7eT7_kR8/s1600/imagemixer.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;About two years ago I decided to get Nikon Camera Control Pro 2. I found two sources that offered a downloadable version. The Nikon Mall and imagemixer.net. Since the Nikon Mall was (and still is) US only I ordered from imagemixer.net and was happy. I also updated Nikon Camera Control Pro several times without problems - until yesterday. &lt;br /&gt;&lt;br /&gt;Yesterday when I tried to update the software to 2.8 the following message appeared:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The product key 40700-24986-02156-58340-44741 is unusable since it is not a genuine product key. Please purchase a genuine product key. If you see this message when you enter your product key, please contact your local Nikon office mentioned in the user's manual.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;What a nice surprise. Suddenly I can't use the software any longer and I also can't use the previous version any longer. &lt;br /&gt;&lt;br /&gt;I looked around and found an official statement from Nikon regarding this online company: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;It has come to our attention that a website called “Imagemixer.net” is attempting to sell Nikon software keys. This web site is not an authorized dealer and is not affiliated with Nikon Inc. in any way. Nikon Inc. cannot assist with any license keys sold by this site and cannot replace any non-working keys without proof of purchase from an authorized dealer. &lt;br /&gt;The only web site authorized to sell software keys alone (not boxed copies of software) is the Nikon Mall. ( http://www.nikonmall.com)"&lt;br /&gt;To ensure that you receive a legal, authorized license key for Nikon software which Nikon Inc. can support please only purchase from an authorized dealer.&lt;/blockquote&gt;&lt;br /&gt;I bought an illegal software product without knowing it. If I want to use Nikon Camera Control Pro 2 I'm forced to buy it again from a Nikon authorized dealer. &lt;br /&gt;&lt;br /&gt;As of today imagemixer.net is still offering Nikon software so hopefully this post will help others to stay away from this online store. I can only speak about Nikon software but obviously you should be also very cautious about the rest of their offer.&lt;br /&gt;&lt;br /&gt;I fully understand why Nikon is taking action but I don't understand why imagemixer.net is still allowed to offer their software.&lt;br /&gt;&lt;br /&gt;Most likely I will not buy the expensive software a second time and rather use the excellent and free Sofortbild app.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photocamel.com/forum/photography-talk/109768-imagemixer-net-warning.html"&gt;Thread at photocamel.com&lt;/a&gt; &lt;br /&gt;&lt;a href="http://support.nikonusa.com/app/answers/detail/a_id/16891/session/L3NpZC84aGtZdThkaw%3D%3D/kw/ImageMixer/p/42/r_id/116678/sno/1"&gt;Official Nikon statement&lt;/a&gt;&lt;br /&gt;&lt;a href="http://nikoneurope-en.custhelp.com/app/answers/detail/a_id/47896"&gt;Another official Nikon statement&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sofortbildapp.com/"&gt;Sofortbild app&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Update February 2011: All Nikon Sofware has dissapeared from the imagemixer website. I really hope Nikon has taken action and sued them. The thread at Photocamel also dissapeared. I'm very happy with Sofortbild and didn't miss Nikon Camera Control Pro so far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-8657116349778653508?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/8657116349778653508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/10/dont-buy-nikon-software-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8657116349778653508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8657116349778653508'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/10/dont-buy-nikon-software-from.html' title='Don&apos;t buy Nikon software from imagemixer.net'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3Xt9bQNnE4Q/TMhLfAsgZsI/AAAAAAAAAjc/EPP7eT7_kR8/s72-c/imagemixer.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-8619150259404014720</id><published>2010-03-24T11:11:00.000-07:00</published><updated>2010-03-24T13:55:25.724-07:00</updated><title type='text'>Sennheiser MKE 400 + Canon 5D Mark II</title><content type='html'>The Canon 5D Mark II Firmware 2.0.4 finally allows manual control of the audio recording level in 64 steps. The audio preamp inside the Canon 5D Mark II is not the greatest but if you set the rec. level low i.e. 1, 2 or max. 3 steps above zero audio hiss practically disapears.&lt;br /&gt;&lt;br /&gt;I find the Sennheiser MKE 400 signal at the "+" setting just a little too low to be used with the 1, 2 or 3 rec level of the camera. I didn't want to add a third battery to the system therefore I had the idea to boost the signal using an audio transformer. My solution boosts only one channel following an old sound recording trick. If you set one channel about 6 dB lower than the other you minimize clipped audio because when one channel clips you will most probably be able to use the -6 db one. Since the 5D Mark II doesn't show audio level meters during video recording such a safety net is very welcome.&lt;br /&gt;&lt;br /&gt;I have no experience with audio transformers so I virtually tried my luck and bought a specs wise good looking shielded 1:2 audio transformer from RS-Components. The part number is &lt;a href="http://uk.rs-online.com/web/search/searchBrowseAction.html?method=getProduct&amp;R=6676044"&gt;667-6044&lt;/a&gt;.&lt;br /&gt;The shielded Z21805C 1:2 (6 dB) audio transformer is made by &lt;a href="http://www.oep.co.uk"&gt;Oxford Electrical Products&lt;/a&gt;. &lt;a href="http://docs-europe.origin.electrocomponents.com/webdocs/0d72/0900766b80d72895.pdf"&gt;Here's the data sheet&lt;/a&gt;. It has a very wide frequency range and low distortion and it doesn't add any noise. I think any quality transformer with similar specs will do.&lt;br /&gt;&lt;br /&gt;I also bought a ready made &lt;a href="http://uk.rs-online.com/web/search/searchBrowseAction.html?method=getProduct&amp;R=1557800"&gt;stereo 3.5mm plug to socket cable&lt;/a&gt; and used a short piece of both ends.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3Xt9bQNnE4Q/S6peOHmGzII/AAAAAAAAAiw/AL3dE8SAhI4/s1600/%2B6dB.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 320px;" src="http://3.bp.blogspot.com/_3Xt9bQNnE4Q/S6peOHmGzII/AAAAAAAAAiw/AL3dE8SAhI4/s320/%2B6dB.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5452273895535463554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To my surprise this simple solution works very well. Soundtrack Pro reports a 5 dB difference between the channels. The noise floor of a recording in an absolutely quiet room is at -65 dB at both channels (using rec. level 1 of the 5DMKII) and is practically not audible. It's a huge difference to the annoying hiss in the former AGC only recordings. I have no means to measure the audio quality but I can't hear any difference between the two channels other than the volume. For many applications this quality will be good enough and double sound is no longer mandatory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-8619150259404014720?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/8619150259404014720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/03/sennheiser-mke-400-canon-5d-mark-ii.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8619150259404014720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8619150259404014720'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/03/sennheiser-mke-400-canon-5d-mark-ii.html' title='Sennheiser MKE 400 + Canon 5D Mark II'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3Xt9bQNnE4Q/S6peOHmGzII/AAAAAAAAAiw/AL3dE8SAhI4/s72-c/%2B6dB.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-3457410623318780578</id><published>2010-03-15T11:11:00.000-07:00</published><updated>2010-03-15T11:24:06.984-07:00</updated><title type='text'>Some interesting camera control projects</title><content type='html'>&lt;a href="http://www.hdrlabs.com/occ/index.html"&gt;Open Camera Controller&lt;/a&gt;&lt;br /&gt;A "hacked" Nintendo DS, the microprocessor chip of an Arduino board and a camera release cable are the main ingredients for this project.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://openmoco.org/"&gt;OpenMoco&lt;/a&gt;&lt;br /&gt;Open-Source Photographic Motion-Control&lt;br /&gt;&lt;br /&gt;&lt;a href="http://vp-systems.eu/camremote.html"&gt;CAMremote-2&lt;/a&gt;&lt;br /&gt;A small battery operated device controls many cameras via the USB port.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-3457410623318780578?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/3457410623318780578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/03/some-interesting-camera-control.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/3457410623318780578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/3457410623318780578'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/03/some-interesting-camera-control.html' title='Some interesting camera control projects'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-2006113619777926455</id><published>2010-02-26T03:57:00.000-08:00</published><updated>2010-02-26T07:19:34.228-08:00</updated><title type='text'>Control your camera by voice</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S4fQ_HTWc-I/AAAAAAAAAio/PONSba7spEw/s1600-h/speech+control.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 141px; height: 116px;" src="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S4fQ_HTWc-I/AAAAAAAAAio/PONSba7spEw/s400/speech+control.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5442548457411081186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now this is fun. Did you know that every Mac comes with built-in speech recognition? Since all Apple laptops and the iMac come with a built in microphone you only need to know how to use AppleScript to voice control your camera using a &lt;a href="http://www.thezephir.com"&gt;Zephir&lt;/a&gt; or an &lt;a href="http://www.arduino.cc"&gt;Arduino I/O board&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You find the control panel under &lt;span style="font-style:italic;"&gt;System Preferences- Speech&lt;/span&gt;. At first click on &lt;span style="font-style:italic;"&gt;Calibrate ...&lt;/span&gt; to set the levels and train the system.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S4fKAdyB73I/AAAAAAAAAig/gbNwWmf5Tuk/s1600-h/speechcontrol.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 327px;" src="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S4fKAdyB73I/AAAAAAAAAig/gbNwWmf5Tuk/s400/speechcontrol.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5442540784043814770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The following AppleScript listens for an hour for one of three keywords and starts or stops video or shoots a photo on one of the new Canon EOS DSLRs while you're hands are free to do other things. See previous posts for details on the Zephir.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;tell application "ZephIR" to activate --get ZephIR ready&lt;br /&gt;delay 2&lt;br /&gt;tell application "System Events" to set visible of process "ZephIR" to false --hide ZephIR&lt;br /&gt;&lt;br /&gt;repeat&lt;br /&gt; try&lt;br /&gt;  tell application "SpeechRecognitionServer"&lt;br /&gt;   set command to listen for {"shoot photo", "shoot video", "exit"} giving up after 3600 --seconds&lt;br /&gt;  end tell&lt;br /&gt; on error&lt;br /&gt;  display alert "Listening session timed out. Start script again."&lt;br /&gt;  return&lt;br /&gt; end try&lt;br /&gt; &lt;br /&gt; if command is "shoot video" then&lt;br /&gt;  tell application "ZephIR" to fire zephir command "START-STOP VIDEO" of component "Canon RC-1"&lt;br /&gt;  beep&lt;br /&gt; else if command is "shoot photo" then&lt;br /&gt;  tell application "ZephIR" to fire zephir command "SHOOT PHOTO" of component "Canon RC-1"&lt;br /&gt; else if command is "exit" then&lt;br /&gt;  delay 1&lt;br /&gt;  say "Good bye"&lt;br /&gt;  return&lt;br /&gt; end if&lt;br /&gt;end repeat&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can also demand a keyword (e.g. okay) before each command like &lt;span style="font-style:italic;"&gt;okay shoot video, okay shoot photo&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;okay exit&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-2006113619777926455?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/2006113619777926455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/voice-controlled-camera.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/2006113619777926455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/2006113619777926455'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/voice-controlled-camera.html' title='Control your camera by voice'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S4fQ_HTWc-I/AAAAAAAAAio/PONSba7spEw/s72-c/speech+control.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-4505893351252698036</id><published>2010-02-23T04:29:00.000-08:00</published><updated>2011-04-06T14:50:22.271-07:00</updated><title type='text'>Controlling the Canon EOS Utility using AppleScript</title><content type='html'>The Canon EOS Utility is a great piece of software especially when you consider that it comes free with every Canon EOS DSLR. Its Remote Live View shooting window gives you a decent monitor image and lets you even start and stop video recording on all cameras that have the EOS Movie function.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S4PSdATENvI/AAAAAAAAAiY/LpGbqjbGbNE/s1600-h/Remote-Live-View-window.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 234px;" src="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S4PSdATENvI/AAAAAAAAAiY/LpGbqjbGbNE/s320/Remote-Live-View-window.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5441424170531698418"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The EOS Utility is not directly accessible using AppleScript but you still can control it using GUI scripting. The AppleScript below e.g. clicks on the "Prepare the camera for movie recording" button at the lower left corner of the Remote Live View window.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;To find the pixel coordinates of a button press &lt;span style="font-style:italic;"&gt;SHIFT COMMAND 4&lt;/span&gt; on the keyboard. This activates the screenshot utility and if you place the cursor over a button you can see its pixels coordinates. Note the numbers and press &lt;span style="font-style:italic;"&gt;ESC&lt;/span&gt;.&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;You must "Enable access for assistive devices" in System Preferences &gt; Universal Access in order to use the scripts below.&lt;/blockquote&gt;&lt;br /&gt;Tested with OS X 10.4 and 10.5 only:&lt;br /&gt;&lt;pre&gt;tell application "EOS Utility" to activate&lt;br /&gt;tell application "System Events"&lt;br /&gt;tell process "EOS Utility"&lt;br /&gt;click at {38, 700} --x,y screen coordinates. 0,0 is at the upper left corner.&lt;br /&gt;end tell&lt;br /&gt;end tell&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;When you run this AppleScript (with the button coordinates of &lt;span style="font-style:italic;"&gt;your&lt;/span&gt; screen!) you will notice the line &lt;br /&gt;&lt;pre&gt;checkbox 1 of window "Remote Live View window" of application process "EOS Utility" of application "System Events"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;in the "Result" area at the bottom of the Script Editor window. This is the actual AppleScript reference to this button that can be used in an AppleScript that is now independent of the window size of the EOS Utility.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;tell application "EOS Utility" to activate&lt;br /&gt;tell application "System Events"&lt;br /&gt;tell process "EOS Utility"&lt;br /&gt;click checkbox 1 of window "Remote Live View window" of application process "EOS Utility" of application "System Events"&lt;br /&gt;end tell&lt;br /&gt;end tell&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Or just for fun the entire script in two command lines&lt;br /&gt;&lt;pre&gt;tell application "EOS Utility" to activate&lt;br /&gt;tell application "System Events" to tell process "EOS Utility" to click checkbox 1 of window "Remote Live View window" of application process "EOS Utility" of application "System Events"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The following script allows timed recordings:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;on enable()&lt;br /&gt;tell application "EOS Utility" to activate&lt;br /&gt;tell application "System Events"&lt;br /&gt;tell process "EOS Utility"&lt;br /&gt;click checkbox 1 of window "Remote Live View window" of application process "EOS Utility" of application "System Events"&lt;br /&gt;end tell&lt;br /&gt;end tell&lt;br /&gt;delay 1&lt;br /&gt;end enable&lt;br /&gt;&lt;br /&gt;on rec()&lt;br /&gt;tell application "EOS Utility" to activate&lt;br /&gt;tell application "System Events"&lt;br /&gt;tell process "EOS Utility"&lt;br /&gt;click checkbox 2 of window "Remote Live View window" of application process "EOS Utility" of application "System Events"&lt;br /&gt;end tell&lt;br /&gt;end tell&lt;br /&gt;delay 2&lt;br /&gt;end rec&lt;br /&gt;&lt;br /&gt;enable()&lt;br /&gt;rec()&lt;br /&gt;delay 10 --record for 10 seconds&lt;br /&gt;rec()&lt;br /&gt;enable()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The next example clicks repeatedly on the &lt;span style="font-weight:bold;"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; Focus buttons to simulate a focus pull from the background to the foreground and back again. It's not very smooth and repeatable though.&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-d332eb23dfef22b8" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v4.nonxt8.googlevideo.com/videoplayback?id%3Dd332eb23dfef22b8%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332300755%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1ED901F3F694FB02162E56DF1647656122D1D177.459045338A807185C4C78B70129376421A0BF929%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dd332eb23dfef22b8%26offsetms%3D5000%26itag%3Dw160%26sigh%3DwK2lztxRMgYr-PQ3GNr4SOeY8RQ&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v4.nonxt8.googlevideo.com/videoplayback?id%3Dd332eb23dfef22b8%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332300755%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1ED901F3F694FB02162E56DF1647656122D1D177.459045338A807185C4C78B70129376421A0BF929%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dd332eb23dfef22b8%26offsetms%3D5000%26itag%3Dw160%26sigh%3DwK2lztxRMgYr-PQ3GNr4SOeY8RQ&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;on enable()&lt;br /&gt;tell application "EOS Utility" to activate&lt;br /&gt;tell application "System Events"&lt;br /&gt;tell process "EOS Utility"&lt;br /&gt;click checkbox 1 of window "Remote Live View window" of application process "EOS Utility" of application "System Events"&lt;br /&gt;end tell&lt;br /&gt;end tell&lt;br /&gt;delay 1&lt;br /&gt;end enable&lt;br /&gt;&lt;br /&gt;on rec()&lt;br /&gt;tell application "EOS Utility" to activate&lt;br /&gt;tell application "System Events"&lt;br /&gt;tell process "EOS Utility"&lt;br /&gt;click checkbox 2 of window "Remote Live View window" of application process "EOS Utility" of application "System Events"&lt;br /&gt;end tell&lt;br /&gt;end tell&lt;br /&gt;delay 2&lt;br /&gt;end rec&lt;br /&gt;&lt;br /&gt;on focusNear3()&lt;br /&gt;tell application "EOS Utility" to activate&lt;br /&gt;tell application "System Events"&lt;br /&gt;tell process "EOS Utility"&lt;br /&gt;click button 8 of group 1 of window "Remote Live View window" of application process "EOS Utility" of application "System Events"&lt;br /&gt;end tell&lt;br /&gt;end tell&lt;br /&gt;end focusNear3&lt;br /&gt;&lt;br /&gt;on focusFar3()&lt;br /&gt;tell application "EOS Utility" to activate&lt;br /&gt;tell application "System Events"&lt;br /&gt;tell process "EOS Utility"&lt;br /&gt;click button 9 of group 1 of window "Remote Live View window" of application process "EOS Utility" of application "System Events"&lt;br /&gt;end tell&lt;br /&gt;end tell&lt;br /&gt;end focusFar3&lt;br /&gt;&lt;br /&gt;enable()&lt;br /&gt;rec()&lt;br /&gt;delay 3&lt;br /&gt;repeat 4 times&lt;br /&gt;focusFar3()&lt;br /&gt;end repeat&lt;br /&gt;delay 3&lt;br /&gt;repeat 4 times&lt;br /&gt;focusNear3()&lt;br /&gt;end repeat&lt;br /&gt;delay 3&lt;br /&gt;rec()&lt;br /&gt;enable()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Before you ask, yes I've tried to start movie recording and QuickTime audio recording at the same time via AppleScript. It works but it's impossible to get video and audio synced automatically. The delays are too long. &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-4505893351252698036?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/4505893351252698036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/controlling-canon-eos-utility-using.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/4505893351252698036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/4505893351252698036'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/controlling-canon-eos-utility-using.html' title='Controlling the Canon EOS Utility using AppleScript'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S4PSdATENvI/AAAAAAAAAiY/LpGbqjbGbNE/s72-c/Remote-Live-View-window.jpg' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-1779126805214229678</id><published>2010-02-21T13:08:00.000-08:00</published><updated>2010-02-22T06:32:45.920-08:00</updated><title type='text'>Recording EOS movies with synced external audio - A more dependable way</title><content type='html'>Requires an Arduino I/O board  plus 180 ohms resistor and IR LED, an Apple computer with QuickTime Pro and an USB bus powered audio interface with phantom powered microphone inputs.&lt;br /&gt;&lt;br /&gt;Calling the Zephir application from AppleScript (see previous post) added an unwanted delay. This solution is better since it uses the &lt;a href="http://controlyourcamera.blogspot.com/2010/01/automatically-resume-video-shooting-on.html"&gt;Arduino as an IR transmitter&lt;/a&gt; again.  The response is much faster and both the QuickTime audio recording and the EOS movie recording stop at the same time. Occasionally there is a one frame inaccuracy but most of the time synchronisation is spot on if the track ends are aligned.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S4IqGcyHHXI/AAAAAAAAAiQ/urGW0eV6_H0/s1600-h/Arduino%2BZephir+Sync.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 237px;" src="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S4IqGcyHHXI/AAAAAAAAAiQ/urGW0eV6_H0/s400/Arduino%2BZephir+Sync.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5440957590110936434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The AppleScript works like in the previous post but only has to send a character over the serial connection to the Arduino to start video recording. You need the free AppleScript extension &lt;a href="http://mysite.verizon.net/vzenuoqe/MacSoft.html"&gt;SerialPort X&lt;/a&gt; to make it work.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(*&lt;br /&gt;Simultanuously start and stop EOS movie and QuickTime audio recording. &lt;br /&gt;EOS movie recording starts with a delay after receiving the remote signal but it stops at the same time as the audio recording.&lt;br /&gt;To sync video and external audio align the track ends.&lt;br /&gt;Requires an Arduino I/O board (arduino.cc) plus 180 ohms resistor and IR LED, an Apple computer with QuickTime Pro and an USB bus powered audio interface with phantom powered microphone inputs.&lt;br /&gt;2010, Martin Koch, controlyourcamera.blogspot.com&lt;br /&gt;*)&lt;br /&gt;on countdown()&lt;br /&gt; say "three"&lt;br /&gt; delay 1&lt;br /&gt; say "two"&lt;br /&gt; delay 1&lt;br /&gt; say "one"&lt;br /&gt; delay 1&lt;br /&gt; say "action"&lt;br /&gt;end countdown&lt;br /&gt;&lt;br /&gt;-- Uses SerialPort X from http://mysite.verizon.net/vzenuoqe/MacSoft.html&lt;br /&gt;set portRef to serialport open "/dev/cu.usbserial-A6004byf" bps rate 9600 data bits 8 parity 0 stop bits 1 handshake 0&lt;br /&gt;delay 2&lt;br /&gt;if portRef is equal to -1 then&lt;br /&gt; display dialog "Could not open serial port" buttons {"Cancel"} default button 1&lt;br /&gt; &lt;br /&gt;else&lt;br /&gt;&lt;br /&gt; tell application "QuickTime Player"&lt;br /&gt;  activate --get QuickTime Player ready&lt;br /&gt;  new audio recording --prepare new audio recording&lt;br /&gt; end tell&lt;br /&gt; &lt;br /&gt; tell application "Script Editor"&lt;br /&gt;  activate&lt;br /&gt;  display dialog "Start recording?" with title "EOS movie + QuickTime audio" buttons {"Cancel", "START"} default button 2&lt;br /&gt; end tell&lt;br /&gt; &lt;br /&gt; countdown()&lt;br /&gt; &lt;br /&gt; serialport write "R" to portRef -- Write to Arduino to send EOS movie start/stop signal&lt;br /&gt; tell application "QuickTime Player" to start first recording&lt;br /&gt; beep&lt;br /&gt; &lt;br /&gt; tell application "Script Editor" to display dialog "Stop recording?" with title "EOS movie + QuickTime audio" buttons {"STOP"} default button 1&lt;br /&gt; &lt;br /&gt; serialport write "R" to portRef -- Write to Arduino to send EOS movie start/stop signal&lt;br /&gt; tell application "QuickTime Player"&lt;br /&gt;  stop first recording&lt;br /&gt;  close first document&lt;br /&gt; end tell&lt;br /&gt; &lt;br /&gt; serialport close portRef&lt;br /&gt; &lt;br /&gt;end if&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Arduino sketch continuously  monitors the serial connection to the computer and sends the movie recording start signal if it receives the character &lt;span style="font-style:italic;"&gt;R&lt;/span&gt;. &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/*&lt;br /&gt;Arduino sketch for simulating a Canon RC-1 remote control &lt;br /&gt;Huge thanks go to http://www.doc-diy.net/photo/rc-1_hacked/index.php for figuring out the Canon RC-1 IR code.&lt;br /&gt;2010, Martin Koch, http://controlyourcamera.blogspot.com&lt;br /&gt;*/&lt;br /&gt;#define irLED_EOS 11 // connect a IR LED with a 180 ohms resistor in series to digital pin 11&lt;br /&gt;byte inbyte = 0;&lt;br /&gt;&lt;br /&gt;void setup() {&lt;br /&gt; pinMode(irLED_EOS, OUTPUT);&lt;br /&gt;        Serial.begin(9600); //open the serial port&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() { &lt;br /&gt;    inbyte = Serial.read(); &lt;br /&gt;    if (inbyte == 'R') EOS_REC(); &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void EOS_REC() {&lt;br /&gt; for(int count=0; count&lt;16; count++) {     //Burst 1&lt;br /&gt;   digitalWrite(irLED_EOS, HIGH); &lt;br /&gt;   delayMicroseconds(11);&lt;br /&gt;   digitalWrite(irLED_EOS, LOW); &lt;br /&gt;   delayMicroseconds(11);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; delayMicroseconds(5360);    //Pause&lt;br /&gt; &lt;br /&gt; for(int count=0; count&lt;16; count++) {     //Burst 2&lt;br /&gt;   digitalWrite(irLED_EOS, HIGH);&lt;br /&gt;   delayMicroseconds(11);&lt;br /&gt;   digitalWrite(irLED_EOS, LOW);&lt;br /&gt;   delayMicroseconds(11);&lt;br /&gt; } &lt;br /&gt; return;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-1779126805214229678?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/1779126805214229678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/recording-eos-movies-with-synced_21.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/1779126805214229678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/1779126805214229678'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/recording-eos-movies-with-synced_21.html' title='Recording EOS movies with synced external audio - &lt;br /&gt;A more dependable way'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S4IqGcyHHXI/AAAAAAAAAiQ/urGW0eV6_H0/s72-c/Arduino%2BZephir+Sync.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-8798708788478796657</id><published>2010-02-17T08:33:00.000-08:00</published><updated>2010-02-23T09:55:20.817-08:00</updated><title type='text'>Recording EOS movies with synced external audio - The simple way</title><content type='html'>I found a very convenient way to get high quality synced audio. I tried this some time ago with my Canon 5D Mark II but gave up because I couldn’t get the external audio synched to the movie files. Now that I know that the 5D Mark II takes some time to actually start recording (when triggered via remote) I tried it again with success. &lt;br /&gt;&lt;br /&gt;All that’s needed is a &lt;a href="http://www.thezephir.com"&gt;Zephir universal remote control&lt;/a&gt;, an Apple computer with QuickTime Pro and an USB bus powered audio interface with phantom powered microphone input(s) like e.g. the &lt;a href="http://www.alesis.com/io2"&gt;Alesis io|2&lt;/a&gt; or a &lt;a href="http://www.shure.com/ProAudio/Products/Accessories/us_pro_X2u_content"&gt;Shure X2U&lt;/a&gt; or a &lt;a href="http://centrance.com/products/mp/"&gt;Centrance MicPort Pro&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;To get the Canon RC-1 remote for the Zephir click on WebztIR in the Zephir application and navigate to Canon - Camera - Remote_RC_1. To make it compatible with the Applescript below rename the rather long video starting command to "START-STOP VIDEO".&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3wbAuuQTHI/AAAAAAAAAhY/iHVqb-K3tIQ/s1600-h/script-editor.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 323px;" src="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3wbAuuQTHI/AAAAAAAAAhY/iHVqb-K3tIQ/s400/script-editor.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5439252149312703602" /&gt;&lt;/a&gt;&lt;br /&gt;Starting and stopping audio and video recording is done by AppleScript. Copy and paste the script below into the Script Editor and press the green run button. Note that there's no guarantee for the accuracy of AppleScripts delay command. &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(*&lt;br /&gt;Start and stop EOS movie and QuickTime audio recording. &lt;br /&gt;EOS movie recording starts with a delay after receiving the remote signal but it stops at the same time as the audio recording.&lt;br /&gt;To sync video and external audio align the track ends.&lt;br /&gt;Requires a Zephir universal remote control (thezephir.com), an Apple computer with QuickTime Pro and an USB bus powered audio interface with phantom powered microphone inputs.&lt;br /&gt;2010, Martin Koch, controlyourcamera.blogspot.com&lt;br /&gt;*)&lt;br /&gt;&lt;br /&gt;tell application "ZephIR" to activate --get ZephIR ready&lt;br /&gt;tell application "System Events" to set visible of process "ZephIR" to false --hide ZephIR&lt;br /&gt;&lt;br /&gt;tell application "QuickTime Player" to activate --get QuickTime Player ready&lt;br /&gt;tell application "QuickTime Player" to new audio recording --prepare new audio recording&lt;br /&gt;&lt;br /&gt;tell application "Script Editor" to activate&lt;br /&gt;tell application "Script Editor" to display dialog "Recording" buttons {"Cancel", "START"}&lt;br /&gt;&lt;br /&gt;say "three"&lt;br /&gt;delay 1&lt;br /&gt;say "two"&lt;br /&gt;delay 1&lt;br /&gt;say "one"&lt;br /&gt;delay 1&lt;br /&gt;say "action"&lt;br /&gt;beep&lt;br /&gt;&lt;br /&gt;tell application "ZephIR" to fire zephir command "START-STOP VIDEO" of component "Canon RC-1"&lt;br /&gt;tell application "QuickTime Player" to start first recording&lt;br /&gt;&lt;br /&gt;tell application "Script Editor" to display dialog "Recording ..." buttons {"STOP"}&lt;br /&gt;&lt;br /&gt;ignoring application responses  --don't wait until the Zephir action has finished&lt;br /&gt; tell application "ZephIR" to fire zephir command "START-STOP VIDEO" of component "Canon RC-1"&lt;br /&gt;end ignoring&lt;br /&gt;delay 0.33 --alter this delay until the EOS movie and QuickTime recording end at the same time.&lt;br /&gt;tell application "QuickTime Player" to stop first recording&lt;br /&gt;tell application "QuickTime Player" to close first document&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S3wbBtFfQwI/AAAAAAAAAhw/rPTTZh4lap0/s1600-h/script-start.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 269px;" src="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S3wbBtFfQwI/AAAAAAAAAhw/rPTTZh4lap0/s400/script-start.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5439252166053151490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3wbB8RHKLI/AAAAAAAAAh4/gB8Rako5I5M/s1600-h/script-stop.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3wbB8RHKLI/AAAAAAAAAh4/gB8Rako5I5M/s400/script-stop.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5439252170128435378" /&gt;&lt;/a&gt;&lt;br /&gt;The AppleScript starts movie recording with the help of the Zephir universal remote control and uses the QuickTime Player to record an audio file at the same time. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S303Sk9a9jI/AAAAAAAAAiA/aWJbpmSGh68/s1600-h/files.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 101px;" src="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S303Sk9a9jI/AAAAAAAAAiA/aWJbpmSGh68/s400/files.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5439564717231896114" /&gt;&lt;/a&gt;&lt;br /&gt;The audio files are automatically saved at a location that can be determined with &lt;span style="font-style:italic;"&gt;QuickTime Player &amp;gt; Preferences… - Recording&lt;/span&gt;. They are automatically named &lt;span style="font-style:italic;"&gt;Audio.mov, Audio 1.mov, Audio 2.mov&lt;/span&gt; and so on.  With the 5D Mark II file numbering set to “Auto reset” paired file naming can be achieved so finding the corresponding audio files is easy.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S3wbBU10dWI/AAAAAAAAAho/N9mOxy7dJ1E/s1600-h/synced-tracks.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 167px;" src="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S3wbBU10dWI/AAAAAAAAAho/N9mOxy7dJ1E/s400/synced-tracks.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5439252159544980834" /&gt;&lt;/a&gt;&lt;br /&gt;All that’s needed to sync the audio tracks is to align the track ends. AppleScript doesn't guarantee exact timing but I found that the synchronisation accuracy &lt;span style="font-style:italic;"&gt;most of the time&lt;/span&gt; was high and repeatable. &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I  run the script without delay first and measured 10 frames difference between the audio spikes. At a frame rate of 30 fps one frame equals 1/30 = 0.033 seconds so since the external audio was 10 frames earlier a 0.33 s delay did the syncronisation.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S3wbBCOhtwI/AAAAAAAAAhg/5ZqVxNDVz88/s1600-h/synced-tracks-closeup.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 229px;" src="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S3wbBCOhtwI/AAAAAAAAAhg/5ZqVxNDVz88/s400/synced-tracks-closeup.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5439252154548336386" /&gt;&lt;/a&gt;&lt;br /&gt;The screenshot above shows the timeline zoomed in to a one frame level. As you can see the offset is really low and not audible. But since AppleScripts timing is not dependable such a synchronisation accuracy is not always the case.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;If the audio sync is not perfect select the video track and press the &lt;span style="font-weight:bold;"&gt;.&lt;/span&gt; or &lt;span style="font-weight:bold;"&gt;,&lt;/span&gt; key to move the track by one frame until the audio waveforms line up. &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-8798708788478796657?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/8798708788478796657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/recording-eos-movies-with-synced_17.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8798708788478796657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8798708788478796657'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/recording-eos-movies-with-synced_17.html' title='Recording EOS movies with synced external audio - The simple way'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3wbAuuQTHI/AAAAAAAAAhY/iHVqb-K3tIQ/s72-c/script-editor.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-8401985938572261686</id><published>2010-02-15T12:49:00.001-08:00</published><updated>2010-03-25T07:31:58.917-07:00</updated><title type='text'>Recording EOS movies with synced external audio</title><content type='html'>As long as you don’t film fine detail which causes heavy aliasing the current Canon DSLRs with EOS movie function record stunning images. The biggest flaw though is the audio automatic gain control (AGC) of those cameras. Whenever a scene is quiet the AGC pumps up the amplification of the microphone signal resulting in quite noticable noise hiss.&lt;br /&gt;&lt;br /&gt;One solution to get high quality audio is to record it externally and sync the video and audio files later in the video editor. This means you have to start video and audio recording by pushing buttons on two different devices. It’s a hassle and you better not forget to turn on audio recording.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3mz6h5fM6I/AAAAAAAAAfw/l9nrKGSAW0Y/s1600-h/R09HR.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 241px;" src="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3mz6h5fM6I/AAAAAAAAAfw/l9nrKGSAW0Y/s320/R09HR.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5438575843139859362" /&gt;&lt;/a&gt;&lt;br /&gt;The&lt;a href="http://www.roland.com/products/en/R-09HR/"&gt; Edirol R-09HR audio recorder&lt;/a&gt; has good internal microphones and records up to 24 bit/96 kHz audio. It also has 1/8”  jack inputs for an external mic or line signal. But the best thing is that it comes with an infrared remote control.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3Xt9bQNnE4Q/S3mz68gwJmI/AAAAAAAAAf4/u7zVUgoOea4/s1600-h/R09_leathercase.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 116px;" src="http://3.bp.blogspot.com/_3Xt9bQNnE4Q/S3mz68gwJmI/AAAAAAAAAf4/u7zVUgoOea4/s320/R09_leathercase.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5438575850283869794" /&gt;&lt;/a&gt;&lt;br /&gt;An optional leather cover offers a 1/4" mounting thread. I removed the back to get to the SD card more easily. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3mz7dA8LOI/AAAAAAAAAgA/Js9gPZXA7p0/s1600-h/RC-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 320px;" src="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3mz7dA8LOI/AAAAAAAAAgA/Js9gPZXA7p0/s320/RC-1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5438575859008810210" /&gt;&lt;/a&gt;&lt;br /&gt;All current Canon DSLRs with EOS movie function allow starting and stopping video recording via an optional infrared remote control. Just switch the camera into Live View and use the 2s delay setting on the Canon RC-1 remote to start and stop video recording.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S3m4-J1m1gI/AAAAAAAAAhI/RjoPgY1xoDw/s1600-h/arduino.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 254px;" src="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S3m4-J1m1gI/AAAAAAAAAhI/RjoPgY1xoDw/s400/arduino.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5438581402958747138" /&gt;&lt;/a&gt;&lt;br /&gt;This project uses an Arduino I/O board and two IR LEDs to start recording on the Edirol R-09HR audio recorder and the camera at the same time.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3m49m9HfiI/AAAAAAAAAg4/L5EZU8TraY0/s1600-h/syncedfiles.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 99px;" src="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3m49m9HfiI/AAAAAAAAAg4/L5EZU8TraY0/s400/syncedfiles.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5438581393595006498" /&gt;&lt;/a&gt;&lt;br /&gt;You can find the corresponding files with  the help of the recording date but once you convert the h.264 files to lets say ProRes 422 files you’re altering the file date. A foolproof way is to set the cameras file numbering to “Auto reset” and the R-09HR audio recorder file naming to “Name”. This makes sure that file numbering starts with one on every blank storage card. Unfortunately the Canon EOS DSLRs do not differentiate between movie files and photo files so if you shoot photos make sure you also record a short audio file to keep file numbering paired.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3m48wvy7TI/AAAAAAAAAgw/LJPVgA5UCp0/s1600-h/syncedtimeline.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 112px;" src="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3m48wvy7TI/AAAAAAAAAgw/LJPVgA5UCp0/s400/syncedtimeline.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5438581379043618098" /&gt;&lt;/a&gt;&lt;br /&gt;Although both devices receive the IR signal at practically the same time (with just a few milliseconds delay) the EOS movie recording starts with a quite long delay.  Fortunately both stop recording at the same time so syncing is easy. All that’s needed to sync the audio tracks with one frame accuracy is to align the track ends.  &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style:italic;"&gt;Is the synchronisation accurate enough?&lt;/span&gt; Since the R-09HR STOP signal takes about 73 milliseconds and the EOS REC signal takes just about  6 milliseconds it makes sense to send the shorter signal at last i.e. the movie recording stops about 6 milliseconds later than the audio recording. To put this into perspective lets look at the approximate frame duration of video files. 24 or 25 fps equal roughly 40 milliseconds per frame and 30 fps equals about 33 milliseconds  per frame. The 6 millisecond delay is therefore well within frame accuracy.  You will hear the external sound within the same frame even when it comes 6 milliseconds before the audio recorded in the camera.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S3m499Zb7uI/AAAAAAAAAhA/O353AL8ajRs/s1600-h/doublesystem.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S3m499Zb7uI/AAAAAAAAAhA/O353AL8ajRs/s400/doublesystem.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5438581399619366626" /&gt;&lt;/a&gt;&lt;br /&gt;It looks weird but it gives me EOS movies with synced 24 bit/96 kHz audio. &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style:italic;"&gt;Does this setup produce good sound?&lt;/span&gt; Not really, the internal microphones of the R-09HR are omnidirectional and pick up sound from everywhere. You usually want to capture the sound of the scene you're filming by placing a directional microphone close to the action. So for best sound connect an external directional microphone.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S3m54bOHvYI/AAAAAAAAAhQ/ljIRjsQ_EO0/s1600-h/EOS_R09_REC_schematic.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 259px;" src="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S3m54bOHvYI/AAAAAAAAAhQ/ljIRjsQ_EO0/s400/EOS_R09_REC_schematic.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5438582404057382274" /&gt;&lt;/a&gt;&lt;br /&gt;The circuit.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Arduino sketch&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/*&lt;br /&gt;Arduino sketch for simulating a Canon RC-1 and EDIROL R-09HR IR remote control &lt;br /&gt; 2010, Martin Koch&lt;br /&gt; http://controlyourcamera.blogspot.com/&lt;br /&gt; Huge thanks go to http://www.doc-diy.net/photo/rc-1_hacked/index.php for figuring out the Canon RC-1 IR code.&lt;br /&gt; IR signal sending code is based on an example at http://luckylarry.co.uk/2009/07/arduino-ir-remote-intervalometer-for-nikon-d80-that-means-timelapse-photography-yarrr&lt;br /&gt; */&lt;br /&gt;#define irLED_EOS 12 // connect a IR LED with a 180 ohms resistor in series to digital pin 12&lt;br /&gt;#define irLED_R09 8 // connect a IR LED with a 180 ohms resistor in series to digital pin 8&lt;br /&gt;#define statusLED 13 // Built in LED on Arduino board&lt;br /&gt;#define recBUTTON 4 // connect a push button to digital pin 4 and GND&lt;br /&gt;#define photoBUTTON 0 // connect a push button to digital pin 0 and GND&lt;br /&gt;boolean rec = true;&lt;br /&gt;&lt;br /&gt;void setup() {&lt;br /&gt;  pinMode(irLED_EOS, OUTPUT);&lt;br /&gt;  pinMode(irLED_R09, OUTPUT);&lt;br /&gt;  pinMode(statusLED, OUTPUT);&lt;br /&gt;  pinMode(recBUTTON, INPUT);&lt;br /&gt;  pinMode(photoBUTTON, INPUT);&lt;br /&gt;  digitalWrite(recBUTTON, HIGH); //turn on internal 20 k pullup resistor so the open input state is HIGH&lt;br /&gt;  digitalWrite(photoBUTTON, HIGH); //turn on internal 20 k pullup resistor so the open input state is HIGH&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() {&lt;br /&gt;  if (digitalRead(recBUTTON) == LOW) {&lt;br /&gt;    if (rec) {&lt;br /&gt;      digitalWrite(statusLED, HIGH); &lt;br /&gt;      R09_REC(); // Activate&lt;br /&gt;      delay(1000);&lt;br /&gt;      EOS_REC();&lt;br /&gt;      R09_REC();&lt;br /&gt;      rec = false;&lt;br /&gt;      delay(1000); // ignore button contact bouncing&lt;br /&gt;    } &lt;br /&gt;    else {&lt;br /&gt;      R09_STOP();&lt;br /&gt;      EOS_REC();&lt;br /&gt;      digitalWrite(statusLED, LOW);&lt;br /&gt;      rec = true;&lt;br /&gt;      delay(1000); // ignore button contact bouncing&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (digitalRead(photoBUTTON) == LOW) {&lt;br /&gt;    digitalWrite(statusLED, HIGH); &lt;br /&gt;    EOS_PHOTO();&lt;br /&gt;    delay(2000); // allow camera to write photo to card&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void EOS_REC() {&lt;br /&gt;  for(int count=0; count&lt;16; count++) {     //Burst 1&lt;br /&gt;    digitalWrite(irLED_EOS, HIGH); &lt;br /&gt;    delayMicroseconds(11);&lt;br /&gt;    digitalWrite(irLED_EOS, LOW); &lt;br /&gt;    delayMicroseconds(11);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  delayMicroseconds(5360);    //Pause&lt;br /&gt;&lt;br /&gt;  for(int count=0; count&lt;16; count++) {     //Burst 2&lt;br /&gt;    digitalWrite(irLED_EOS, HIGH);&lt;br /&gt;    delayMicroseconds(11);&lt;br /&gt;    digitalWrite(irLED_EOS, LOW);&lt;br /&gt;    delayMicroseconds(11);&lt;br /&gt;  } &lt;br /&gt;  return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void EOS_PHOTO() {&lt;br /&gt;  for(int count=0; count&lt;16; count++) {     //Burst 1&lt;br /&gt;    digitalWrite(irLED_EOS, HIGH); &lt;br /&gt;    delayMicroseconds(11);&lt;br /&gt;    digitalWrite(irLED_EOS, LOW); &lt;br /&gt;    delayMicroseconds(11);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  delayMicroseconds(7330);    //Pause&lt;br /&gt;&lt;br /&gt;  for(int count=0; count&lt;16; count++) {     //Burst 2&lt;br /&gt;    digitalWrite(irLED_EOS, HIGH);&lt;br /&gt;    delayMicroseconds(11);&lt;br /&gt;    digitalWrite(irLED_EOS, LOW);&lt;br /&gt;    delayMicroseconds(11);&lt;br /&gt;  } &lt;br /&gt;  return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void R09_REC() { &lt;br /&gt;  unsigned long IR_Signal[68] = {&lt;br /&gt;    690,690,44,44,44,130,44,44,44,44,44,44,44,44,44,44,44,130,44,44,44,130,44,130,44,44,44,130,44,130,44,130,44,130,44,130,44,130,44,44,44,130,44,44,44,130,44,44,44,44,44,44,44,44,44,130,44,44,44,130,44,44,44,130,44,130,44,0  };&lt;br /&gt;  for (int i=0; i&lt;68; i=i+2) {&lt;br /&gt;    unsigned long endBurst = micros() + IR_Signal[i] * 13; &lt;br /&gt;    while(micros() &lt; endBurst) {&lt;br /&gt;      digitalWrite(irLED_R09, HIGH); &lt;br /&gt;      delayMicroseconds(13); &lt;br /&gt;      digitalWrite(irLED_R09, LOW);&lt;br /&gt;      delayMicroseconds(13); &lt;br /&gt;    }&lt;br /&gt;    unsigned long endPause = micros() + IR_Signal[i+1] * 13; &lt;br /&gt;    while(micros() &lt; endPause);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void R09_STOP() { &lt;br /&gt;  unsigned long IR_Signal[68] = {&lt;br /&gt;    690,690,44,44,44,130,44,44,44,44,44,44,44,44,44,44,44,130,44,44,44,130,44,130,44,44,44,130,44,130,44,130,44,130,44,130,44,44,44,44,44,130,44,44,44,130,44,44,44,44,44,44,44,130,44,130,44,44,44,130,44,44,44,130,44,130,44,0  };&lt;br /&gt;  for (int i=0; i&lt;68; i=i+2) {&lt;br /&gt;    unsigned long endBurst = micros() + IR_Signal[i] * 13; &lt;br /&gt;    while(micros() &lt; endBurst) {&lt;br /&gt;      digitalWrite(irLED_R09, HIGH); &lt;br /&gt;      delayMicroseconds(13); &lt;br /&gt;      digitalWrite(irLED_R09, LOW);&lt;br /&gt;      delayMicroseconds(13); &lt;br /&gt;    }&lt;br /&gt;    unsigned long endPause = micros() + IR_Signal[i+1] * 13; &lt;br /&gt;    while(micros() &lt; endPause);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-8401985938572261686?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/8401985938572261686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/recording-eos-movies-with-synced.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8401985938572261686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8401985938572261686'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/recording-eos-movies-with-synced.html' title='Recording EOS movies with synced external audio'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3mz6h5fM6I/AAAAAAAAAfw/l9nrKGSAW0Y/s72-c/R09HR.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-6154962308655398674</id><published>2010-02-13T02:00:00.000-08:00</published><updated>2010-02-14T10:26:52.673-08:00</updated><title type='text'>Finding out IR signal timing using a Zephir</title><content type='html'>Thanks to John Sims from &lt;a href="http://www.TheZephir.com"&gt;TheZephir.com&lt;/a&gt; I recently learned an easy way to find out infrared signal timings for use with lets say an Arduino application. &lt;br /&gt;&lt;br /&gt;The screenshot below shows the START-STOP signal of a Canon HF100 camcorder in the Zephir signal editor. The editor offers a graphical representation of the IR signal. Red bars are ON bursts where the IR LED is switched on and off repeatedly 38000 times per second. Blue bars represent pauses. The height of the bars is proportional to the length of each burst or pause.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3fA-D1fwdI/AAAAAAAAAfo/439H1ZDKo8U/s1600-h/Zephireditor.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 345px;" src="http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3fA-D1fwdI/AAAAAAAAAfo/439H1ZDKo8U/s400/Zephireditor.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5438027247487271378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you select a bar the number of ON or OFF segments is shown in the lower left corner.  The example above shows 44 segments. Since each cycle consists of two segments (one ON and one OFF state) the number of cycles repeating at 38 kHz is 22. To find out an entire burst length or pause length multiply the number of cycles with 26 microseconds, the length of a  38 kHz cycle.  (1 / 38000 = 0.000026 seconds) e.g. 22 cycles times 26 microseconds equals 572 microseconds burst length. &lt;br /&gt;&lt;br /&gt;Now comes the fun part. In the Zephir editor choose  &lt;span style="font-style:italic;"&gt;Edit &amp;gt; Select All&lt;/span&gt; followed by &lt;span style="font-style:italic;"&gt;Edit &amp;gt; Copy&lt;/span&gt;. To get the number of cycles of each bar just copy the clipboard content into a text editor:&lt;br /&gt;&lt;pre&gt;684,351,044,130,044,130,044,044,044,044,044,044,044,044,044,044,044,130,044,130,044,130,044,044,044,044,044,044,044,130,044,130,044,130,044,130,044,130,044,044,044,044,044,044,044,044,044,044,044,044,044,044,044,044,044,130,044,130,044,130,044,130,044,130,044,130,044,3116&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Below is an example how this can be used in an Arduino sketch. Note that all "044" numbers have been replaced with "44".&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/*&lt;br /&gt;Arduino sketch for sending a START-STOP IR remote signal to a Canon HF100 camcorder&lt;br /&gt;Code is based on an example at http://luckylarry.co.uk/2009/07/arduino-ir-remote-intervalometer-for-nikon-d80-that-means-timelapse-photography-yarrr&lt;br /&gt;2010, Martin Koch, http://controlyourcamera.blogspot.com&lt;br /&gt;*/&lt;br /&gt;#define irLED 3&lt;br /&gt;unsigned long START_STOP_Signal[68] = {684,351,44,130,44,130,44,44,44,44,44,44,44,44,44,44,44,130,44,130,44,130,44,44,44,44,44,44,44,130,44,130,44,130,44,130,44,130,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,130,44,130,44,130,44,130,44,130,44,130,44,3116};&lt;br /&gt;&lt;br /&gt;void setup() {&lt;br /&gt; pinMode(irLED, OUTPUT);  &lt;br /&gt; START_STOP();&lt;br /&gt; delay(3000); // record 3 * 1000 ms&lt;br /&gt; START_STOP();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() {&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void START_STOP() { &lt;br /&gt; for (int i=0; i&amp;lt;68; i=i+2) {&lt;br /&gt;  unsigned long endBurst = micros() + START_STOP_Signal[i] * 13; // create the microseconds to pulse for&lt;br /&gt;  while(micros() &amp;lt; endBurst) {&lt;br /&gt;   digitalWrite(irLED, HIGH); // turn IR on&lt;br /&gt;   delayMicroseconds(13); // half the clock cycle for 38 Khz (26.32×10-6s)&lt;br /&gt;   digitalWrite(irLED, LOW); // turn IR off&lt;br /&gt;   delayMicroseconds(13); // delay for the other half of the cycle to generate oscillation&lt;br /&gt;  }&lt;br /&gt;  unsigned long endPause = micros() + START_STOP_Signal[i+1] * 13; // create the microseconds to delay for&lt;br /&gt;  while(micros() &amp;lt; endPause);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-6154962308655398674?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/6154962308655398674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/finding-out-ir-signal-timing-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/6154962308655398674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/6154962308655398674'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/02/finding-out-ir-signal-timing-with.html' title='Finding out IR signal timing using a Zephir'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3Xt9bQNnE4Q/S3fA-D1fwdI/AAAAAAAAAfo/439H1ZDKo8U/s72-c/Zephireditor.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-4350616057185813881</id><published>2010-01-17T12:13:00.001-08:00</published><updated>2010-01-17T12:19:33.189-08:00</updated><title type='text'>Pclix LT universal timelapse controller</title><content type='html'>The second best thing after having in-camera timelapse control seems to be the &lt;a href="http://www.pclix.com/"&gt;Pclix LT&lt;/a&gt; universal timelapse controller. Pclix offers cables for different camera model and even have an infrared option. How could I be so naiv to think I where the first thinking of &lt;a href="http://controlyourcamera.blogspot.com/2010/01/infrared-controlled-timelapse.html"&gt;infrared use for timelapse control&lt;/a&gt;. You'll find the user manual under support at the Pclix website.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-4350616057185813881?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/4350616057185813881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/01/pclix-lt-universal-timelapse-controller.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/4350616057185813881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/4350616057185813881'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/01/pclix-lt-universal-timelapse-controller.html' title='Pclix LT universal timelapse controller'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-8497150863153845670</id><published>2010-01-10T12:58:00.000-08:00</published><updated>2010-01-11T09:49:34.435-08:00</updated><title type='text'>Powering the Arduino</title><content type='html'>&lt;span style="font-weight:bold;"&gt;USB&lt;/span&gt;&lt;br /&gt;When the Arduino is connected to a computer via USB cable it is also powered by the 5 V USB line.&lt;br /&gt;Alternatively you can use a plain USB charger to power the Arduino from a wall socket. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Power adapter or battery&lt;/span&gt;&lt;br /&gt;The recommended voltage range for powering the Arduino via the VIN terminal or the 2.5 mm plug is 7 to 12 volts. Voltages above 12 volts are not recommended because the 5 V voltage regulator on the board will have to burn the additional voltage and become too hot. If possible use a voltage close to 7 volts e.g. some power adapters allow to set a 7.5 V output. &lt;br /&gt;For low power applications a 9 V battery will work fine. Small 12 V lead batteries will also work fine.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Bhodilabs VPack battery packs&lt;/span&gt;&lt;br /&gt;A nice option to power the Arduino board with 5 V coming from a single AA battery is a &lt;a href="http://bodhilabs.com/vpack5aa1.html"&gt;Bhodilabs VPack battery pack&lt;/a&gt;. Connect this battery pack to the 5V and GND terminals of the Arduino board. If your current rquirements are below 100 mA this works well e.g. with the infrared remote applications in previous posts. If you need more current there are two-batteries-pack available. &lt;br /&gt;An advantage of the Bhodilabs VPack battery pack is that a alkaline AA battery has at least three times the capacity of a typical 9 V battery (1700 mAh to 3000 mAh compared to 500 mAh) and that there's no loss because of unneccessary high supply voltage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-8497150863153845670?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/8497150863153845670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/01/5-v-100-ma-from-single-aa-battery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8497150863153845670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8497150863153845670'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/01/5-v-100-ma-from-single-aa-battery.html' title='Powering the Arduino'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-7432354783640362820</id><published>2010-01-10T11:50:00.000-08:00</published><updated>2010-01-16T04:36:00.719-08:00</updated><title type='text'>Infrared controlled timelapse photography with Canon DSLRs</title><content type='html'>I wished all digital cameras would allow timelapse shooting out of the box. Digital cameras with a selftimer are able to trigger a photo via it's software but for some odd marketing reasons timelapse is seldom added. And even if your camera has a timelapse option it is often limited to 999 shots.&lt;br /&gt;&lt;br /&gt;You can find lots of remote cable based external timelapse solutions for Canon cameras on the web but I haven't yet seen one that works infrared based.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S0ox2YLCOHI/AAAAAAAAAfY/lh1Y1pZ5F4o/s1600-h/RC-1_TIMELAPSE.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 179px;" src="http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S0ox2YLCOHI/AAAAAAAAAfY/lh1Y1pZ5F4o/s400/RC-1_TIMELAPSE.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5425203511392614514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This solution is based on a &lt;a href="http://controlyourcamera.blogspot.com/2010/01/automatically-resume-video-shooting-on.html"&gt;previous post&lt;/a&gt;. A different code and a push button instead of a switch allows timelapse control of &lt;a href="http://www.usa.canon.com/consumer/controller?act=SupplyModelCompatAct&amp;modelid=7581 "&gt;Canon DSLRs that are compatible with the Canon RC-1 infrared remote control&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;The timelapse settings like interval and number of shots can be set in the code. Once the sketch is loaded to the Arduino board it can run standalone close-by to the cameras infrared receiver.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/*&lt;br /&gt;Arduino sketch for simulating a Canon RC-1 IR remote control to do timelapse photography with a compatible Canon DSLR&lt;br /&gt;2010, Martin Koch&lt;br /&gt;http://controlyourcamera.blogspot.com/&lt;br /&gt;Huge thanks go to http://www.doc-diy.net/photo/rc-1_hacked/index.php for figuring out the IR code.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#define irLED 12 &lt;br /&gt;#define statusLED 13&lt;br /&gt;#define pushBUTTON 7&lt;br /&gt;&lt;br /&gt;int interval = 15; //seconds&lt;br /&gt;int timelapseDuration = 60; //seconds&lt;br /&gt;int numberOfShots = timelapseDuration / interval;&lt;br /&gt;&lt;br /&gt;void setup() {&lt;br /&gt;  pinMode(irLED, OUTPUT);&lt;br /&gt;  pinMode(statusLED, OUTPUT);&lt;br /&gt;  pinMode(pushBUTTON, INPUT);&lt;br /&gt;  digitalWrite(pushBUTTON, HIGH);&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() { &lt;br /&gt;  if (digitalRead(pushBUTTON) == LOW) {&lt;br /&gt;    digitalWrite(statusLED, HIGH); //Timelapse active&lt;br /&gt;    for (int i=0; i &lt;= numberOfShots; i++) {&lt;br /&gt;      sendInfraredSignal();&lt;br /&gt;      if (i &lt; numberOfShots) delay(interval * 1000); //ms&lt;br /&gt;    }&lt;br /&gt;    digitalWrite(statusLED, LOW);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void sendInfraredSignal() {&lt;br /&gt;  for(int i=0; i&lt;16; i++) { &lt;br /&gt;    digitalWrite(irLED, HIGH);&lt;br /&gt;    delayMicroseconds(11);&lt;br /&gt;    digitalWrite(irLED, LOW);&lt;br /&gt;    delayMicroseconds(11);&lt;br /&gt;   } &lt;br /&gt;   delayMicroseconds(7330); &lt;br /&gt;   for(int i=0; i&lt;16; i++) { &lt;br /&gt;     digitalWrite(irLED, HIGH);&lt;br /&gt;     delayMicroseconds(11);&lt;br /&gt;     digitalWrite(irLED, LOW);&lt;br /&gt;     delayMicroseconds(11);&lt;br /&gt;   }   &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If the infrared timing is known the sendInfraredSignal() sub routine can be adapted to release other cameras.&lt;br /&gt;&lt;br /&gt;Add a  &lt;a href="http://www.arduino.cc/playground/Learning/SerialLCD"&gt;serial LCD&lt;/a&gt; and &lt;a href="http://www.arduino.cc/en/Tutorial/Potentiometer"&gt;potentiometers&lt;/a&gt; for setting interval and number of shots for a simple to make luxury intervalometer that doesn't require to re-programming the Arduino every time you want to change settings. Multi turn precision potentiometers would allow very fine adjustments e.g. a voltage between 0 and 5 V could translate to an interval between 1 to 3600 seconds and to 1 to 5000 shots. &lt;a href="http://www.arduino.cc/playground/Main/RotaryEncoders"&gt;Rotary encoders&lt;/a&gt; would give even more flexibility and accuracy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-7432354783640362820?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/7432354783640362820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/01/infrared-controlled-timelapse.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/7432354783640362820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/7432354783640362820'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/01/infrared-controlled-timelapse.html' title='Infrared controlled timelapse photography&lt;br /&gt; with Canon DSLRs'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3Xt9bQNnE4Q/S0ox2YLCOHI/AAAAAAAAAfY/lh1Y1pZ5F4o/s72-c/RC-1_TIMELAPSE.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-8465251635425480268</id><published>2010-01-09T13:54:00.000-08:00</published><updated>2010-12-07T02:08:20.843-08:00</updated><title type='text'>Automatically resume video shooting on a Canon 5D Mark II</title><content type='html'>The Canon 5D Mark II has a video recording limit of roughly 12 minutes . I'm fine with that but &lt;a href="http://www.dvinfo.net/forum/canon-eos-5d-mk-ii-hd/470559-automatically-resume-video-shooting.html"&gt;some people need longer recording times&lt;/a&gt; and would like to have a solution that automatically starts a new video clip after 12 minutes. They rather loose one or two seconds than to loose everything because they forgot to restart the camera . Especially in multi camera productions the gap will be of no concern.&lt;br /&gt;&lt;br /&gt;I've chosen a 11 minutes limit because the 5D video recording length is actually limited by the 4 GB file size limit of the FAT32 file system that the Compact Flash cards use. By using 11 minutes I make sure to stay below this file size limit so the camera is always controlled by the external device. &lt;br /&gt;&lt;br /&gt;The current video DSLRs from Canon don't support video recording control over a remote cable. The only way to do that works via the built in infrared receiver e.g. when the camera is in Live View mode the 2-seconds-delay setting of the Canon RC-1 remote starts and stops video recording. &lt;br /&gt;&lt;br /&gt;Thanks to  &lt;a href="http://www.doc-diy.net/photo/rc-1_hacked/index.php"&gt;very helpful info at doc-diy.net&lt;/a&gt; I was able to program an &lt;a href="http://arduino.cc/en/Main/ArduinoBoardDuemilanove"&gt;Arduino board&lt;/a&gt; to send the required IR signals for starting and stopping video recording. For Arduino board suppliers see &lt;a href="http://arduino.cc/en/Main/Buy"&gt;arduino.cc/en/Main/Buy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The IR signal code is quite straight forward. The delay between two IR bursts  determines if the camera takes a picture immediately or with 2 seconds delay. If it is in Live View mode the 2 seconds delay setting records video.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S0kAFa0ZgPI/AAAAAAAAAe4/th20niONGco/s1600-h/Canon-RC-1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 83px;" src="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S0kAFa0ZgPI/AAAAAAAAAe4/th20niONGco/s320/Canon-RC-1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5424867319242916082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3Xt9bQNnE4Q/S0kH1ijldXI/AAAAAAAAAfA/HS_gK2vhGWM/s1600-h/arduino_RC-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 196px;" src="http://3.bp.blogspot.com/_3Xt9bQNnE4Q/S0kH1ijldXI/AAAAAAAAAfA/HS_gK2vhGWM/s320/arduino_RC-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5424875842534995314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You also need an infrared LED, a 180 ohms resistor and a switch. Any standard IR-LED from any electronics supplier will do. Connect one end of the resistor to digital pin 12 and the other to the longer lead (anode) of the IR-LED. Connect the shorter lead (cathode) to "GND".  Finally wire a switch that shorts digital pin 7 to "GND" when activated.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S0nYz6GXPiI/AAAAAAAAAfQ/kJOxMc8XMO8/s1600-h/RC-1_clone.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S0nYz6GXPiI/AAAAAAAAAfQ/kJOxMc8XMO8/s320/RC-1_clone.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5425105612425346594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Connect the Arduino board to your computer via USB cable and load the code below on the Arduino.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;br /&gt;&lt;pre&gt;/*&lt;br /&gt;Arduino sketch for simulating a Canon RC-1 IR remote control to start and stop video recording on a Canon 5D Mark II or 7D&lt;br /&gt;2010, Martin Koch&lt;br /&gt;http://controlyourcamera.blogspot.com/&lt;br /&gt;Huge thanks go to http://www.doc-diy.net/photo/rc-1_hacked/index.php for figuring out the IR code.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#define irLED 12 &lt;br /&gt;#define SWITCH 7&lt;br /&gt;&lt;br /&gt;unsigned int pulseDuration = 10; //microseconds &lt;br /&gt;//The required 15 microseconds pulseDuration didn't work since digitalWrite consumes some additional time&lt;br /&gt;//thats adds to pulseDuration value. 10 to 12 microseconds worked for me.&lt;br /&gt;&lt;br /&gt;unsigned int photo = 7330; //A 7330 microseconds delay between bursts shoots a photo.&lt;br /&gt;unsigned int video = 5360; //A 5360 microseconds delay between bursts starts/stops video recording. &lt;br /&gt;&lt;br /&gt;void setup() {&lt;br /&gt;pinMode(irLED, OUTPUT);&lt;br /&gt;pinMode(SWITCH, INPUT);&lt;br /&gt;digitalWrite(SWITCH, HIGH); //turn on internal 20 k pullup resistor so the open input state is HIGH.&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() { //run again and again &lt;br /&gt;if (digitalRead(SWITCH) == LOW) { //read switch input&lt;br /&gt;shoot(video); //start video recording&lt;br /&gt;delay(660000); //record for 11 min * 60 s * 1000 ms&lt;br /&gt;shoot(video); //stop video recording&lt;br /&gt;delay(1000); //1 s delay between stop and start of next clip&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void shoot(unsigned int delayBetweenBursts) { //sends the IR signal&lt;br /&gt;&lt;br /&gt;//send first 16 bursts&lt;br /&gt;for(int i=0; i&lt;16; i++) { &lt;br /&gt;digitalWrite(irLED, HIGH);&lt;br /&gt;delayMicroseconds(pulseDuration);&lt;br /&gt;digitalWrite(irLED, LOW);&lt;br /&gt;delayMicroseconds(pulseDuration);&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;delayMicroseconds(delayBetweenBursts); &lt;br /&gt;&lt;br /&gt;//send second 16 bursts&lt;br /&gt;for(int i=0; i&lt;16; i++) { &lt;br /&gt;digitalWrite(irLED, HIGH);&lt;br /&gt;delayMicroseconds(pulseDuration);&lt;br /&gt;digitalWrite(irLED, LOW);&lt;br /&gt;delayMicroseconds(pulseDuration);&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;After the upload has completed you can test the program.  Enable the IR receiver on the 5D Mark II using the AF-DRIVE button and the large wheel on the back. Turn on Live View. Aim the IR LED at the camera and flip the start switch to start the continuously repeating 11 minutes video recording.  &lt;span style="font-weight:bold;"&gt;Note that the function depends on a light path. To avoid any interruption I recommend that you mount the IR-LED very close to the IR receiver of the camera.&lt;/span&gt;For standalone operation disconnect the USB cable and connect  the VIN and GND terminals of the Arduino board to a 7-12 V DC power source (e.g. a &lt;a href="http://www.arduino.cc/playground/Learning/9VBatteryAdapter"&gt;9 V block battery&lt;/a&gt; as shown in the diagram above or a &lt;a href="http://www.arduino.cc/playground/Learning/WhatAdapter"&gt;DC adapter&lt;/a&gt;). A typical &lt;a href="http://en.wikipedia.org/wiki/9V_battery"&gt;9 V battery&lt;/a&gt; has a capacity of roughly 500 mAh. This should allow for about 25 hours operation of the Arduino interface assuming an average current consumption of  20 mA.&lt;span style="font-style:italic;"&gt;The photo above shows my first try with the IR-LED connected directly to digital pin 13 without any resistor. It works but the recommended way is to use a current limiting resistor on any digital output when using a LED. I used &lt;a href="http://led.linear1.org/1led.wiz?VS=5;VF=1.5;ID=20"&gt;this LED calculator&lt;/a&gt; to get the resistor value of 180 ohms.&lt;/span&gt;For a more compact package take a look at the &lt;a href="http://arduino.cc/en/Main/ArduinoBoardNano"&gt;Arduino Nano&lt;/a&gt;.I recommend the book &lt;a href="http://www.amazon.com/Getting-Started-Arduino-Make-Projects/dp/0596155514"&gt;&lt;span style="font-style:italic;"&gt;Getting Started with Arduino&lt;/span&gt;&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-8465251635425480268?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/8465251635425480268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2010/01/automatically-resume-video-shooting-on.html#comment-form' title='29 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8465251635425480268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8465251635425480268'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2010/01/automatically-resume-video-shooting-on.html' title='Automatically resume video shooting &lt;br /&gt;on a Canon 5D Mark II'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3Xt9bQNnE4Q/S0kAFa0ZgPI/AAAAAAAAAe4/th20niONGco/s72-c/Canon-RC-1.png' height='72' width='72'/><thr:total>29</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-8323640125895266894</id><published>2009-10-10T10:27:00.000-07:00</published><updated>2011-02-13T08:34:20.069-08:00</updated><title type='text'>Dragon Stop Motion moves your camera</title><content type='html'>At my Canon HF100 blog I show a &lt;a href="http://canon-hf100.blogspot.com/2009/07/diy-camera-motion-control_09.html"&gt;DIY camera motion control rig&lt;/a&gt; that is also useful for time lapse or stop motion. &lt;br /&gt;&lt;br /&gt;The best stop motion software I know is &lt;a href="http://www.dragonstopmotion.com/"&gt;Dragon Stop Motion&lt;/a&gt;. Since version 2.0 &lt;a href="http://www.dragonstopmotion.com/arduino/index.php"&gt;it supports the Arduino controller&lt;/a&gt; that I used for the rig mentioned above. I can now control my DIY slider  directly from Dragon Stop Motion for slowly panning across a stop motion scene or for camera movement between time lapse shots.&lt;br /&gt;&lt;br /&gt;Here's my skinny Arduino sketch:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/*&lt;br /&gt;Arduino sketch that moves an unipolar stepper motor &lt;br /&gt;every time Dragon Stop Motion sends a "PF" (Position Frame) command.&lt;br /&gt;A linear slider solution and a simple stepper motor interface capable of moving a DSLR is shown at &lt;br /&gt;http://canon-hf100.blogspot.com/2009/07/diy-camera-motion-control_09.html &lt;br /&gt;2009, Martin Koch&lt;br /&gt;----------------------------------------&lt;br /&gt;Function:&lt;br /&gt;move(steps, direction, hold_load)&lt;br /&gt;steps: 200 steps = 360° &lt;br /&gt;clockwise: true = cw, false = ccw&lt;br /&gt;hold_load: true = leave motor current on&lt;br /&gt;----------------------------------------&lt;br /&gt;*/&lt;br /&gt;//Arduino digital output numbers&lt;br /&gt;#define D0 13&lt;br /&gt;#define D1 12&lt;br /&gt;#define D2 11&lt;br /&gt;#define D3 10&lt;br /&gt;byte inbyte = 0;&lt;br /&gt;&lt;br /&gt;void setup() { &lt;br /&gt;pinMode(D0, OUTPUT);&lt;br /&gt;pinMode(D1, OUTPUT);&lt;br /&gt;pinMode(D2, OUTPUT);&lt;br /&gt;pinMode(D3, OUTPUT);&lt;br /&gt;pinMode(D12, OUTPUT);&lt;br /&gt;Serial.begin(56000); //open the serial port&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() {&lt;br /&gt;/*&lt;br /&gt;Read one byte (one character) from serial port.&lt;br /&gt;If Dragon Stop Motion sends the character "P"&lt;br /&gt;it must be the  "PF" (Position Frame) command.&lt;br /&gt;Lets move the camera to the next position.&lt;br /&gt;*/&lt;br /&gt;inbyte = Serial.read(); &lt;br /&gt;if (inbyte == 'P') move(20, false, false); //Move 20 steps, clockwise?, hold_load? &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void move(int number_of_steps, boolean clockwise, boolean hold_load) {&lt;br /&gt;int output_pattern = 0;&lt;br /&gt;int steps_so_far = 0;&lt;br /&gt;do {&lt;br /&gt;switch (output_pattern) { // Full steps&lt;br /&gt;case 0:     //1100&lt;br /&gt;digitalWrite(D0, HIGH);&lt;br /&gt;digitalWrite(D1, HIGH);&lt;br /&gt;digitalWrite(D2, LOW);&lt;br /&gt;digitalWrite(D3, LOW);&lt;br /&gt;break;&lt;br /&gt;case 1:    //0110&lt;br /&gt;digitalWrite(D0, LOW);&lt;br /&gt;digitalWrite(D1, HIGH);&lt;br /&gt;digitalWrite(D2, HIGH);&lt;br /&gt;digitalWrite(D3, LOW);&lt;br /&gt;break;&lt;br /&gt;case 2:    //0011&lt;br /&gt;digitalWrite(D0, LOW);&lt;br /&gt;digitalWrite(D1, LOW);&lt;br /&gt;digitalWrite(D2, HIGH);&lt;br /&gt;digitalWrite(D3, HIGH);&lt;br /&gt;break;&lt;br /&gt;case 3:    //1001&lt;br /&gt;digitalWrite(D0, HIGH);&lt;br /&gt;digitalWrite(D1, LOW);&lt;br /&gt;digitalWrite(D2, LOW);&lt;br /&gt;digitalWrite(D3, HIGH);&lt;br /&gt;break;&lt;br /&gt;} &lt;br /&gt;delay(15); //15 ms give 10 revolutions per minute&lt;br /&gt;steps_so_far += 1;&lt;br /&gt;if (clockwise) output_pattern -= 1; else output_pattern += 1;&lt;br /&gt;if ( output_pattern &gt; 3 ) output_pattern = 0;&lt;br /&gt;if ( output_pattern &lt; 0 ) output_pattern = 3;&lt;br /&gt;} while (steps_so_far &lt; number_of_steps);&lt;br /&gt;if (!hold_load) {&lt;br /&gt;//If the stepper motor doesn't have to hold the load when it stands still &lt;br /&gt;//turn off any motor current to keep it cool&lt;br /&gt;digitalWrite(D0, LOW);&lt;br /&gt;digitalWrite(D1, LOW);&lt;br /&gt;digitalWrite(D2, LOW);&lt;br /&gt;digitalWrite(D3, LOW);&lt;br /&gt;}&lt;br /&gt;return;&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-8323640125895266894?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/8323640125895266894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2009/10/dragon-stop-motion-moves-your-camera.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8323640125895266894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/8323640125895266894'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2009/10/dragon-stop-motion-moves-your-camera.html' title='Dragon Stop Motion moves your camera'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7153314628426170021.post-5104700223748800322</id><published>2009-09-24T09:20:00.000-07:00</published><updated>2011-04-06T13:22:30.128-07:00</updated><title type='text'>Control software for Canon or Nikon DSLRs</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Canon EOS Utility&lt;/span&gt;&lt;br /&gt;Free, Mac OS X, Windows&lt;br /&gt;Comes with your Canon camera. Allows remote shooting plus time lapse with adjustable interval from 5s to 59 min 59s.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Nikon Camera Control Pro 2&lt;/span&gt;&lt;br /&gt;150 EUR, Mac OS X, Windows&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://www.sofortbildapp.com/"&gt;Sofortbild&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;Free, Mac OS X&lt;br /&gt;Really great application for Nikon DSLRs that in part outperforms Nikons expensive remote application.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.breezesys.com/DSLRRemotePro4Mac/index.htm"&gt;Breeze DSLR Remote Pro for Mac&lt;/a&gt;&lt;br /&gt;$95, Mac OS X (Windows versions are also available)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dslrassistant.com"&gt;DSLR Assistant&lt;/a&gt;&lt;br /&gt;$30, Mac OS X&lt;br /&gt;Supports Canon EOS DSLRs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dragonstopmotion.com"&gt;Dragon Stop Motion&lt;/a&gt;&lt;br /&gt;$275, Mac OS X, Windows&lt;br /&gt;Professional software that beside its main use for stop motion animation allows time lapse and camera control. Only software so far that supports Canon and Nikon cameras. &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://thezephir.com"&gt;Zephir&lt;/a&gt; IR control&lt;/span&gt;&lt;br /&gt;50 EUR, Mac OS X&lt;br /&gt;If your camera allows IR remote control a Zephir device can be teached to do anything the camera remote does and the Zephir application can be controlled via Applescript. For instance time lapse shooting where a camera takes a photo every minute for one hour requires just six lines in the AppleScript editor. &lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;tell application "ZephIR"&lt;br /&gt;repeat 60 times&lt;br /&gt;fire zephir command "SHOOT PHOTO" of component "YOUR IR CONTROL"&lt;br /&gt;delay 60&lt;br /&gt;end repeat &lt;br /&gt;end tell&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7153314628426170021-5104700223748800322?l=controlyourcamera.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://controlyourcamera.blogspot.com/feeds/5104700223748800322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://controlyourcamera.blogspot.com/2009/09/control-software-for-canon-or-nikon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/5104700223748800322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7153314628426170021/posts/default/5104700223748800322'/><link rel='alternate' type='text/html' href='http://controlyourcamera.blogspot.com/2009/09/control-software-for-canon-or-nikon.html' title='Control software for Canon or Nikon DSLRs'/><author><name>Martin Koch</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_3Xt9bQNnE4Q/R_M2XlB14uI/AAAAAAAAACc/8bT-rY_uhmM/S220/40px-avatar.gif'/></author><thr:total>0</thr:total></entry></feed>
