electronut Programming & Embedded Systems - by Mahesh Venkitachalam

Ambient Light sensor using an Op-Amp Comparator

Say you have a microcontroller circuit that does something when it goes dark. To save power, you want to put the chip to sleep when the ambient light drops below a certain level. One way to do this is using an LDR and an op-amp comparator.

Here is the schematic:

In the above circuit, the reference voltage at the non-inverting terminal of the op-amp is VCC/2. When it's dark, the LDR has a high resistance (over 20K), and the voltage at the inverting terminal (pin 3) is going to be less than VCC/2. Hence, the output of the op-amp will go to high when it is dark. When sufficient light falls on the LDR, its resistance falls, and the voltage at the inverting terminal (pin 2) exceeds VCC/2. At this point, the op-amp output goes low. We can control the threshold at which it goes from low to high by adjusting the potentiometer R1.

Here is what the circuit looks like on a breadboard. The supply is 5V regulated.

In this case, I am using the LM358 - a very popular general-purpose Op-Amp IC. This works fine for our purpose, but do note that there are dedicated comparator ICs with better switching characteristics for critical applications.

In my next post, I will describe how to hook this up to an ATmega168 and wake it up from power-save mode.

If you liked this article, please consider supporting my efforts by purchasing my book.

Python Playground, published by No Starch Press, USA, is a collection of imaginative programming projects that will inspire you to use Python to make art and music, build simulations of real-world phenomena, and interact with hardware like the Arduino and Raspberry Pi. Do check it out!