A while ago, I read a blog post about using a normal LED as a light sensor. After browsing around the Internet, I found that all the examples that I found were not working well or hard to read. Then I stumbled upon this instructable: http://www.instructables.com/id/LED-as-lightsensor-on-the-arduino/

However, I found that the code was kind of hard to read/edit and it missed a serial output. Below is the cleaned up code with serial output. In addition, I found that adding a 100R resistor in series with the sensing LED greatly improves the sensitivity. This change improves the range of light on the serial port from 290-270 to 290-120.

#define READ A0
#define LED 13
int basis = 0;

void setup() {
  pinMode(LED, OUTPUT);

void loop() {
  int sens = readLED(50);
  basis = sens - 20;                 // setting sensitivity - now it will react if the LED is 20 lower than the setting above
  for(int y = 0; y < 1000; y++) {    // after every 1000 tests the program will reset the led to cope with changing light
    sens = readLED(50);
    if (sens < basis)                // testing is the led was in the dark
      digitalWrite(LED, HIGH);     
      digitalWrite(LED, LOW);

int readLED(int number) {            // Read analog value n times and avarage over those n times
  int totaal = 0;
  for(int x = 0; x < number; x++) {
    totaal += analogRead(READ);
  return totaal/number;
<p>sir this is great job but I notice that the led work as motion sensor not for dark sensor</p>
<p>sorry sir i forget to put the resistor great work </p>
I will come with a better Ible soon :) (and better code) <br>I didn't have the same result with the resistor tough.
this works great, <br>is there a way to alter the code so the output led is the same as the sensor led? <br>I tried this (http://playground.arduino.cc/Learning/LEDSensor) code, but doesn't seem to be very stable.

About This Instructable


25 favorites


More by hansc44: Arduino: Use LED as a light sensor Add Ethernet to any Arduino project for less than 10$
Add instructable to: