Introduction: 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: https://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;
}