Focus Speed

From Rev0 Wiki
Revision as of 06:18, 28 March 2017 by WikiSysop (talk | contribs) (Created page with "This is a method that I used to benchmark the focusing speed (from MFD to ~1.7m target) of several lenses/motor technologies. The setup involves using a DSLR, Arduino (used a...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This is a method that I used to benchmark the focusing speed (from MFD to ~1.7m target) of several lenses/motor technologies. The setup involves using a DSLR, Arduino (used a Maple Mini clone for the hardware) connected to an LED, and a PC for setting the delay. The Arduino turns on an LED in view of the camera, triggers the shutter and turns off the LED after a set delay, if the LED is still on by the time the picture is taken, the delay should be increased, and vice versa until the focus time is converged.

File:Test.jpg
Picture of the test setup with a 450D and Canon EF-S 17-85mm IS USM lens.

Results

1. Canon EF-S 18-55 IS STM -> 500ms

2. Canon EF-S 17-85 IS USM (Ring USM with FTM) -> 307ms

3. Sigma DG 17-50 f/2.8 OS HSM (Micro HSM without FTM) -> 472ms

The numbers above do not include the native shutter lag, which for the 7D measured (in manual focus) at: 120-125 ms.

Arduino Code

/*
Justin Kenny 2017
AF Speed Tester
*/

  uint32 delaytime = 100;
  
void setup() {
  Serial.begin(115200); // Ignored by Maple. But needed by boards using hardware serial via a USB to Serial adaptor
  // Initialize the built-in LED pin as an output:
  pinMode(20, OUTPUT);
  pinMode(10, OUTPUT);
  // Initialize the built-in button (labeled BUT) as an input:
  pinMode(32, INPUT);
}

uint8 isButtonPressed() {
    if (digitalRead(32) == 1) {
        delay(1);
        while (digitalRead(32) == 1);
        return true;
    }
    return false;
}

void loop() {
  while (Serial.available() > 0) {
  
    // look for the next valid integer in the incoming serial stream:
    delaytime = Serial.parseInt();
    
    // look for the newline. That's the end of your
    // sentence:
    if (Serial.read() == '\n') {
      break;
    }
  }
  Serial.print("Using ");
  Serial.print(delaytime);
  Serial.println("ms delay.");
     
    // Check if the button is pressed.
    if (isButtonPressed()) {
        // Trigger camera
        digitalWrite(10, HIGH); // Trigger shutter release
        delay(delaytime);
        digitalWrite(20,HIGH); // Turn LED on
        delay(5000);
        digitalWrite(10, LOW); // Let off shutter release
        digitalWrite(20,LOW); // Turn LED off
    }
    delay(100);
}

Improvements and Notes

  • The setup should be better controlled, the following conditions need to be fixed:
    • Start and end focus distances should be equivalent (MFD as start distance is not "fair" as it varies from lens to lens)
      • Adjust start focus by using a fixed target near the camera
    • Lighting conditions should be fixed, along with shutter speed
    • Target (high contrast) is fixed and camera is pointing at same part of the target from lens to lens
    • Focal length is common between lenses compared (if possible)