DEV Community

張旭豐
張旭豐

Posted on

5 Light Dependent Resistor Projects That Respond to Darkness and Light

5 Light Dependent Resistor Projects That Respond to Darkness and Light

Build light-reactive systems: street lamp controller, solar tracker, reading lamp, sunrise alarm, and chicken coop door

Hero

Project 1: Automatic Street Lamp

Goal: Turn lamp on at dusk, off at dawn

Automatic Street Lamp

Hardware

GL5528 LDR, Arduino Nano, 5V relay, LED lamp

Code

#define LDR_PIN     A0
#define RELAY_PIN   7
#define DARK_THRESHOLD  700

void setup() { pinMode(RELAY_PIN, OUTPUT); }

void loop() {
  int light = analogRead(LDR_PIN);
  if (light < DARK_THRESHOLD) {
    digitalWrite(RELAY_PIN, HIGH);  // Lamp ON
  } else {
    digitalWrite(RELAY_PIN, LOW);   // Lamp OFF
  }
  delay(1000);
}
Enter fullscreen mode Exit fullscreen mode

Project 2: Solar Panel Sun Tracker

Goal: Rotate panel to face brightest direction

Solar Panel Sun Tracker

Hardware

2x GL5528 LDR, Arduino Nano, 2x SG90 servos

Code

void loop() {
  int left = analogRead(LDR_LEFT);
  int right = analogRead(LDR_RIGHT);
  int diff = left - right;

  if (abs(diff) > 20) {
    if (diff > 0) currentAngle += 2;
    else currentAngle -= 2;
    servo.write(currentAngle);
  }
  delay(100);
}
Enter fullscreen mode Exit fullscreen mode

Project 3: Automatic Reading Lamp

Goal: Turn on desk lamp when room gets dark

Automatic Reading Lamp

Hardware

GL5528 LDR, Arduino Nano, 5V relay, Desk lamp

Code

void loop() {
  int ambient = analogRead(LDR_PIN);
  if (ambient < 300) {
    digitalWrite(LAMP_RELAY, HIGH);
    lcd.setCursor(0, 0); lcd.print("Light ON ");
  } else {
    digitalWrite(LAMP_RELAY, LOW);
    lcd.setCursor(0, 0); lcd.print("Light OFF");
  }
}
Enter fullscreen mode Exit fullscreen mode

Project 4: Sunrise Simulation Alarm

Goal: Gradually brighten LED to simulate sunrise

Sunrise Simulation Alarm

Hardware

GL5528 LDR, Arduino Nano, 128x64 OLED, High-brightness LED

Code

void loop() {
  DateTime now = rtc.now();
  if (now.hour() == ALARM_HOUR && now.minute() == 0) {
    for (int brightness = 0; brightness <= 255; brightness++) {
      analogWrite(LED_PIN, brightness);
      delay(60000 / 255);  // 1 minute to full brightness
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Project 5: Chicken Coop Auto Door

Goal: Open at sunrise, close at sunset

Chicken Coop Auto Door

Hardware

GL5528 LDR, Arduino Nano, SG90 servo, DS3231 RTC

Code

void loop() {
  int light = analogRead(LDR_PIN);
  DateTime now = rtc.now();

  if (light > SUNRISE_THRESHOLD && now.hour() >= 5 && doorState == CLOSED) {
    servo.write(OPEN_ANGLE);
    doorState = OPEN;
  }
  if (light < SUNSET_THRESHOLD && now.hour() >= 19 && doorState == OPEN) {
    servo.write(CLOSE_ANGLE);
    doorState = CLOSED;
  }
}
Enter fullscreen mode Exit fullscreen mode

How It Works

// WF1 Run #048 - Basic LDR
#define LDR_PIN  A0

void setup() {
  Serial.begin(115200);
  pinMode(LDR_PIN, INPUT);
}

void loop() {
  int light = analogRead(LDR_PIN);
  Serial.print("Light: ");
  Serial.println(light);
  delay(500);
}
Enter fullscreen mode Exit fullscreen mode

Troubleshooting

Problem Cause Fix
LDR readings unstable Voltage divider noise Add 10uF capacitor across LDR leads
Lamp flickers at threshold No hysteresis Use separate ON and OFF thresholds at least 100 apart
Servo jitter on solar tracker Deadband too small Increase minimum differential to 20+ before moving

Start Here

Affiliate disclosure: As an Amazon Associate, I earn from qualifying purchases.

GL5528 LDR Photoresistor
Arduino Nano
5V Relay Module
SG90 Servo Motor

Next Step: From Scene to Sensor, Without Writing Code

I offer a personalized interactive device design guide at Fiverr:

👉 https://www.fiverr.com/phd_hfchang/generate-an-arduino-interactive-prototypef

Tags: Arduino LDR Photoresistor Light Sensor Automation

Top comments (0)