Instructables
Picture of Arduino: Use LED as a light sensor
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);
  Serial.begin(57600);
}

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);
    Serial.println(sens);
    if (sens < basis)                // testing is the led was in the dark
      digitalWrite(LED, HIGH);     
    else 
      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);
    delay(10);
  }
  return totaal/number;
}
kenyer11 months ago
I will come with a better Ible soon :) (and better code)
I didn't have the same result with the resistor tough.
lekirst11 months ago
this works great,
is there a way to alter the code so the output led is the same as the sensor led?
I tried this (http://playground.arduino.cc/Learning/LEDSensor) code, but doesn't seem to be very stable.