Laser trigger too slow

I have the following code that successfully triggers my Canon 7D to take a picture, however, it's not fast enough! When the laser is broken, I want the picture taken the absolute moment the laser beam is interrupted, not 50ms later. Is there a sensor/Arduino/circuit combination that would be faster??

I'm currently using a standard photoresistor, 10k resister, and Arduino Uno.

void loop() {
  sensorValue = analogRead(sensorPin);
  laserValue = map(sensorValue, sensorMin, sensorMax, 0, 1000);
  laserValue = constrain(sensorValue, 0, 1500); 

  if (laserValue > (sensorMin - 10)) {  // trigger camera shutter
    digitalWrite(shutterPin, LOW);
    digitalWrite(shutterPin, HIGH);

LDRs are slow. 50 ms is not too bad a reaction time.

Use a photodiode or phototransistor, connect it through a comparator to a digital pin and you can even get rid of the slow (about 110 µs) analogRead() call.

I’ve never worked with those two. I’ll go looking/shopping. And, what is a comparator?

Thank you very much!!


Usually built using an OpAmp. Those sold as "comparator" are kinda specialised OpAmps. Most general purpose OpAmps will do just fine for this purpose.

Here some more photodiode circuit suggestions.

Comparators are not opamps, and using a random opamp as a "poor-mans comparator" may create various issues (including fried opamps) unless you understand all the specs.

LM339 or LM393 are the common, cheap, go-to comparators that will work for most purposes.

And, what is a comparator?

Is it not possible to answer that question for yourself? Really?

I guess the important detail is that comparators output a logic signal (digital), opamps don't. And many comparators have open-collector outputs, that's another thing you can google!