Fork me on GitHub

Project Notes

#048 StereoLightTrigger - Dual input Low-light Trigger

Demonstrates an interrupt-driven method for an Arduino to respond to LDR light threshold triggers.


This demonstrates three circuit concepts:

  • a light sensor comprising a light-dependent resistor (LDR) and Wheatstone Bridge.
  • a threshold detector using an OpAmp comparator.
  • triggering an arduino function when light exceeds the OpAmp threshold

Two LDRs are in the circuit to provide dual or stereo light detection. There is nothing special about running two LDRs. The circuit could equally be built with just one if that is all the application required.

Calibrating the Wheatstone Bridge

The particular LDR used has a range of about 200Ω (bright light) to 20kΩ (dark). However the ambient light conditions used for testing the circuit exhibited a typical range of 2kΩ-5kΩ, hence 4.7kΩ is selected as the common resistor value in the bridge so that we can drive positive and negative voltages from the bridge. A variable resistor opposes the LDR, so that the actual threshold level can be trimmed.

The voltage differential measured across the bridge - from the base of the pot to the base of the LDR - will tend to rise in lighter conditions as the LDR resistance drops. As conditions get darker, the LDR resistance rises until a point there the voltage differential will go negative.


The voltage differential of the Wheatstone Bridge is fed to an OpAmp comparator (an LM324 Low Power Quad Op-Amp). By feeding the LDR end of the differential to the negative input of the comparator, it acts as a low-threshold trigger. Reversing the inputs to the comparator could be used for a high-threshold trigger.

Arduino Triggering

While it would be completely OK to sample the OpAmp outputs in a loop, in this case we are using hardware interrupts to trigger when each the OpAmp output transits from low to high (RISING interrupt).

The interrupt service routine simply sets a flag corresponding to the LDR that activated.

The flags are then used and cleared by the main script when it gets around to checking LDR status. For demonstration purposes, a high flag is used to switch a corresponding indicator LED so that it is possible to see when an LDR interrupt has been successfully processed.


For plots of received light to triggering, see the LDRComparator project. It uses the same LDR wheatstone Bridge and monitors results with an Arduino.


The build uses an Arduino Nano on a breadboard, with all components powered by an external 5V regulated supply.

The Breadboard

The Schematic

The Build

Credits and References

Project Source on GitHub Project Gallery Return to the LEAP Catalog

This page is a web-friendly rendering of my project notes shared in the LEAP GitHub repository.

LEAP is just my personal collection of projects. Two main themes have emerged in recent years, sometimes combined:

  • electronics - usually involving an Arduino or other microprocessor in one way or another. Some are full-blown projects, while many are trivial breadboard experiments, intended to learn and explore something interesting
  • scale modelling - I caught the bug after deciding to build a Harrier during covid to demonstrate an electronic jet engine simulation. Let the fun begin..
To be honest, I haven't quite figured out if these two interests belong in the same GitHub repo or not. But for now - they are all here!

Projects are often inspired by things found wild on the net, or ideas from the many great electronics and scale modelling podcasts and YouTube channels. Feel free to borrow liberally, and if you spot any issues do let me know (or send a PR!). See the individual projects for credits where due.