const int LDR_PIN = A0; // ขา LDR
const float R_FIXED = 10000; // ตัวต้านทานคงที่ 10kΩ
// ค่าประมาณทั่วไปของ LDR (ต้องคาลิเบรตจริงถึงจะแม่น)
// const float A = 500000.0; // 500kΩ
const float A = 200000.0; // 200kΩ
const float B = 0.7;
void setup() {
Serial.begin(9600);
}
void loop() {
int adc_raw = analogRead(LDR_PIN);
// กลับทิศค่า ADC (ให้สว่างมาก → ค่าสูงขึ้น)
int adc = 1023 - adc_raw;
// แปลงค่า ADC -> แรงดัน
float voltage = adc * (5.0 / 1023.0);
if (voltage <= 0.0) voltage = 0.001; // ป้องกันหารศูนย์
// คำนวณค่าความต้านทานของ LDR
float R_LDR = R_FIXED * (5.0 / voltage - 1.0);
// แปลงความต้านทาน -> lux (ประมาณ)
float lux = pow((A / R_LDR), (1.0 / B));
// -------------------------
// จัดระดับความสว่าง
String level;
if (lux < 50) level = "Dark";
else if (lux < 200) level = "Dim";
else if (lux < 500) level = "Medium";
else if (lux < 1000) level = "Bright";
else level = "Very Bright";
// -------------------------
// แสดงผล
Serial.print("ADC raw: ");
Serial.print(adc_raw);
Serial.print(" | ADC adj: ");
Serial.print(adc);
Serial.print(" | Lux (approx): ");
Serial.print(lux);
Serial.print(" | Light Level: ");
Serial.println(level);
delay(1000);
}