Light-Activated Night Light Using Arduino – Beginner Project

Ever wanted a night light that just knows when to turn on? In this project, we’ll build a simple automatic night light using an Arduino and an LDR (light-dependent resistor). When it gets dark, the LED turns on. When it’s bright, the light stays off — no switches, no fuss.

This project is perfect for beginners who want to explore how sensors work with Arduino. You’ll learn how to read analog input, set a light threshold, and control an LED based on real-world conditions.

Let’s get started and make your lights a little smarter.

Parts Required

This post may contain affiliate links. If you purchase through these links, I may earn a small commission at no extra cost to you. It helps support this blog and keeps the projects coming—thanks for your support!

How It Works

This project uses a light sensor (LDR) to detect how bright or dark the environment is. The LDR is a special type of resistor that changes its resistance depending on how much light hits it:

  • In bright conditions, the resistance drops low.
  • In the dark, the resistance increases significantly.

We combine the LDR with a regular resistor to form a voltage divider. This setup sends a changing voltage signal to the Arduino’s analog input pin. When it’s bright, the voltage is higher; when it gets dark, the voltage drops.

The Arduino constantly reads this input value. If it detects that the room is dark (i.e., the value falls below a preset threshold), it sends a signal to turn on the LED. When the light comes back, the LED turns off again.

💡 Bonus tip: LDRs aren’t polarized — you can plug them in either direction, no problem.

This is the same principle used in automatic night-lights — simple, effective, and easy to build with just a few components.

Wiring the Circuit

Follow these steps to connect your components to the Arduino:

Let’s walk through how to wire the components for this light-activated night light:

  1. Place the LDR on the breadboard, making sure each leg is on a separate row.
    • Connect one leg to 5V on the Arduino.
    • Connect the other leg to analog pin A0 — this is where we’ll measure the light level.
  2. Add a 10kΩ resistor to form a voltage divider:
    • Connect one end of the resistor to GND on the Arduino.
    • Connect the other end to the same row as the LDR leg going to A0.

This setup creates a voltage divider that adjusts the voltage at pin A0 based on the surrounding light. The darker it gets, the lower the voltage at A0 — and that’s how we know when to turn on the LED.

  1. Connect the LED:
    • Insert the longer leg (anode) of the LED into digital pin 13.
    • Insert the shorter leg (cathode) into GND.
    • Note: Pin 13 on most Arduino boards already includes a current-limiting resistor, so you can safely connect the LED without an external resistor. (But you can always add a 220Ω if you want to be extra safe.)
  2. Upload the code using the Arduino IDE. Once running, the LED will automatically turn on when it gets dark.

Code Breakdown: What’s Happening Here?

const int ldrPin = A0;
const int ledPin = 13;
const int threshold = 500;  // light level threshold to turn on the LED

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int lightLevel = analogRead(ldrPin);  // read value from 0–1023
  Serial.println(lightLevel);

  if (lightLevel < threshold) {
    digitalWrite(ledPin, HIGH);  // it's dark → turn on the LED
  } else {
    digitalWrite(ledPin, LOW);   // it's bright → turn off the LED
  }

  delay(200);
}

Link to Tinker CAD here

Let’s walk through what the sketch actually does under the hood:

  • First, we connect the photoresistor to analog pin A0, which we use as an input to detect how much light is hitting the sensor.
  • The LED is connected to digital pin 13, which acts as an output — the Arduino will send signals to this pin to turn the light on or off.

In the setup() function, we call <strong>Serial.begin(9600)</strong> to start serial communication. This allows the Arduino to send data to your computer, and if you open the Serial Monitor in the Arduino IDE, you’ll see real-time readings from the photoresistor.

Inside the loop()The Arduino runs continuously:

  1. Reads the analog value from A0 — this gives us a number between 0 and 1023, depending on how bright it is.
  2. That value is then divided by 4 (because analogWrite for PWM pins only accepts values between 0 and 255) — this scales the light level down to something the LED can use.
  3. The LED receives this value as a PWM signal (a type of “fake analog”), which makes it appear dimmer or brighter depending on the surrounding light.

⚡ In short:
More light → lower LED brightness
Less light → LED gets brighter automatically

This setup creates a smooth, real-time response that mimics how night-lights work — fading in as the room darkens, and fading out when it’s bright again.

Leave a Reply

Your email address will not be published. Required fields are marked *