Photocells a.k.a CdS cells, photoresistors, LDR (light dependent resistor)…

Cds Lrg
Here’s another MASSIVE tutorial… Photocells a.k.a CdS cells, photoresistors, LDR (light dependent resistor)

What is a photocell?
Photocells are sensors that allow you to detect light. They are small, inexpensive, low-power, easy to use and don’t wear out. For that reason they often appear in toys, gadgets and appliances. Theys are are often refered to a CdS cells (they are made of Cadmium-Sulfide), light-dependent resistors (LDR), and photoresistors.

Photocells are basically a resistor that changes its resistive value (in ohms Ω) depending on how much. They are very low cost, easy to get in many sizes and specifications, but are very innacurate. Each photocell sensor will act a little differently than the other, even if they are from the same batch. The variations can be really large, 50% or higher! For this reason, they shouldn’t be used to try to determine precise light levels in lux or millicandela. Instead, you can expect to only be able to determine basic light changes.

For most light-sentsitive applications like “is it light or dark out”, “is there something in front of the sensor (that would block light)”, “is there something interrupting a laser beam” (break-beam sensors), or “which of multiple sensors has the most light hitting it”, photocells can be a good choice!

Some basic stats
These stats are for the photocell in the Adafruit shop which is very much like the PDV-P8001. Nearly all photocells will have slightly different specifications, although they all pretty much work the same. If there’s a datasheet, you’ll want to refer to it

  • Size: Round, 5mm (0.2″) diameter. (Other photocells can get up to 11mm/0.4″ diameter!)
  • Price: $1.50 at the Adafruit shop
  • Resistance range: 200KΩ (dark) to 10KΩ (10 lux brightness)
  • Sensitivity range: CdS cells respond to light between 400nm (violet) and 600nm (orange) wavelengths, peaking at about 520nm (green).
  • Power supply: pretty much anything up to 100V, uses less than 1mA of current on average (depends on power supply voltage)
  • Datasheet and another Datasheet
  • Two application notes on using and selecting photocells where nearly all of these graphs are taken from

How to measure light using a photocell
As we’ve said, a photocell’s resistance changes as the face is exposed to more light. When its dark, the sensor looks like an large resistor up to 10MΩ, as the light level increases, the resistance goes down. This graph indicates approximately the resistance of the sensor at different light levels. Remember each photocell will be a little different so use this as a guide only!


Read more of the tutorial here… Photocells a.k.a CdS cells, photoresistors, LDR (light dependent resistor) and pick up some photoresistors at the Adafruit store!

Make a robot friend with Adafruit’s CRICKIT – A Creative Robotics & Interactive Construction Kit. It’s an add-on to our popular Circuit Playground Express, FEATHER and other platforms to make and program robots with CircuitPython, MakeCode, and Arduino. Start controlling motors, servos, solenoids. You also get signal pins, capacitive touch sensors, a NeoPixel driver and amplified speaker output. It complements & extends your boards so you can still use all the goodies on the microcontroller, now you have a robotics playground as well.

Join 7,500+ makers on Adafruit’s Discord channels and be part of the community! http://adafru.it/discord

CircuitPython in 2018 – Python on Microcontrollers is here!

Have an amazing project to share? Join the SHOW-AND-TELL every Wednesday night at 7:30pm ET on Google+ Hangouts.

Join us every Wednesday night at 8pm ET for Ask an Engineer!

Follow Adafruit on Instagram for top secret new products, behinds the scenes and more https://www.instagram.com/adafruit/

Maker Business — Rethink Robotics closes shop. Long live collaborative robots #makerbusiness

Wearables — Zip it up

Electronics — Serial overkill

Biohacking — Biohacking Resources – Books, Talks and Podcasts

Python for Microcontrollers — CircuitPython creates new assistive tech opportunities

Get the only spam-free daily newsletter about wearables, running a "maker business", electronic tips and more! Subscribe at AdafruitDaily.com !


  1. AnonymousEditor

    “its resistive value (in ohms Ω) depending on how much.”
    should maybe read
    “its resistive value (in ohms Ω) depending on how much light is shining on it.”

  2. Sadly I think CdS photocells are soon to be extinct thanks to RoHS. (Many people including myself now make it a point to properly recycle electronics, in order to keep lead and other nasties out of the landfill. Will people do the same once the RoHS directive makes it perfectly safe to toss them all into the trash?)

  3. In the sample sketch, I think you can omit this line:

    photocellReading = 1023 – photocellReading;

    if you rewrite the map line as:

    LEDbrightness = map(photocellReading, 1023, 0, 0, 255);

    That is, map() works with decreasing ranges as well as increasing ones.

    (From http://www.arduino.cc/en/Reference/Map:

    “Note that the “lower bounds” of either range may be larger or smaller than the “upper bounds” so the map() function may be used to reverse a range of numbers, for example

    y = map(x, 1, 50, 50, 1);”)

  4. @joshua they’re rohs exempt

    @finsprings i didnt find map worked but sure, whichever way

  5. Have an autocalibrate routine for LDRs and FSRs. It records maximum and minimum intensity and then gives the full 0-255 PWM output over the input range.


  6. I clicked on the datasheet links and got the following errors:

    Not Found
    The requested URL /media/sensors/PDV-P8001.pdf was not found on this server.
    Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
    Apache/1.3.41 Server at http://www.adafruit.com Port 80

    I’m using FireFox 3.0.10.

    Not Found
    The requested URL /media/sensors/DTS_A9950_A7060_B9060.pdf was not found on this server.
    Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
    Apache/1.3.41 Server at http://www.adafruit.com Port 80

  7. Just wanted to add that the difference between the links to the datasheets in this blog vs. the links on http://www.ladyada.net/learn/sensors/cds.html page, is the domain name.

Sorry, the comment form is closed at this time.