// ****** LDR Pin Definition *********************************************
#define LDRanalog 27 // Analog input pin for LDR
#define LDRdigital 26 // Digital input pin for LDR
// ****** LDR Lux Calculation Constants ***********************************
const float GAMMA = 0.7; // LDR gamma characteristic constant
const float RL10 = 50; // LDR resistance (kΩ) at 10 lux
void setup() {
// Initialize serial monitor at 115200 baud
Serial.begin(115200);
pinMode(25, OUTPUT); // Pin 25 = LED output (street light)
}
void loop() {
// ===== READ LDR =====
int digitalValue = digitalRead(LDRdigital); // Digital: 0 (dark) or 1 (bright)
int adcValue = analogRead(LDRanalog); // Analog: 0 to 4095 (12-bit ADC)
// ===== CALCULATE VOLTAGE, RESISTANCE, LUX =====
// Step 1: Convert ADC value to voltage (assuming 5V reference)
float voltage = adcValue * 5 / 4095.0;
// Step 2: Calculate LDR resistance using voltage divider formula
// R_LDR = (R_fixed * V_ldr) / (Vcc - V_ldr)
// Here R_fixed = 2000 ohms, Vcc = 5V
float resistance = 2000 * voltage / (1 - voltage / 5);
// Step 3: Convert resistance to lux using LDR characteristic curve
// lux = (RL10 * 1000 * 10^GAMMA / R_LDR) ^ (1/GAMMA)
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
// ===== PRINT TO SERIAL MONITOR =====
Serial.print("Digital Value = ");
Serial.println(digitalValue);
Serial.print("ADC Value = ");
Serial.println(adcValue);
Serial.print("Lux = ");
Serial.println(lux);
Serial.print("Voltage = ");
Serial.println(voltage);
// ===== AUTOMATIC STREET LIGHT LOGIC =====
// If ADC >= 2000 → bright environment (daytime) → turn OFF the light
// If ADC < 2000 → dark environment (nighttime) → turn ON the light
// This mimics a real street light that activates automatically at night.
if (adcValue >= 2000) {
digitalWrite(25, LOW); // Daytime: LED OFF (save power)
Serial.println("Status: DAYTIME → Light OFF");
} else {
digitalWrite(25, HIGH); // Nighttime: LED ON (street light active)
Serial.println("Status: NIGHTTIME → Light ON");
}
Serial.println("----------------------------------");
delay(500);
}