Basic Photocell Reading

We'll start with a basic photocell. This is a resistor that changes resistance based on how bright the light is. You can read tons more about photocells in our tutorial but basically we'll be able to measure how bright or dark the room is using the photocell. Note that photocells are not precision measurement devices, and this technique is also not very precise so its only good for basic measurements. For precision sensing, you'd want a digital lux sensor like this one - we don't have a tutorial on connecting that to the Pi but we do have example code for Arduino.

Wiring is simple using the Adafruit Pi Cobbler. Connect the blue right rail to ground and the red left rail to 3.3V. Then connect one side of the photocell to 3.3V and the other side to Pi GPIO #18 (you can use any pin but our example code is for #18). Then connect a 1uF capacitor from #18 to ground. Make sure the negative side of the capacitor (marked with a - down the side if its electrolytic) goes to ground. The capacitor just needs to be rated for 5V or greater, its really unlikely you'll find a 1uF that has less than 16V rating.

Now on your Pi, make sure you've installed RPi.GPIO version 0.3.1a or later. Check here for instructions how

Now copy & paste the following code into a new file called and chmod +x it 
Download: file
#!/usr/bin/env python

# Example for RC timing reading for Raspberry Pi
# Must be used with GPIO 0.3.1a or later - earlier verions
# are not fast enough!

import RPi.GPIO as GPIO, time, os      


def RCtime (RCpin):
        reading = 0
        GPIO.setup(RCpin, GPIO.OUT)
        GPIO.output(RCpin, GPIO.LOW)

        GPIO.setup(RCpin, GPIO.IN)
        # This takes about 1 millisecond per loop cycle
        while (GPIO.input(RCpin) == GPIO.LOW):
                reading += 1
        return reading

while True:                                     
        print RCtime(18)     # Read RC timing using pin #18

With the Pi connected to the Cobbler, run the script and shade your hand over the sensor to test it out!

Once you know it works you can change what pin you are using by changing the RCtime(18) to RCtime(yourpinnumberhere) any pin will work

This guide was first published on Jul 29, 2012. It was last updated on Jul 29, 2012. This page (Basic Photocell Reading) was last updated on Nov 19, 2015.