Lux คืออะไร?
Lux (lx) คือหน่วยวัด ความเข้มของแสงสว่าง — 1 lux = 1 lumen ต่อ 1 ตารางเมตร
ยิ่งค่า lux สูง = แสงยิ่งสว่าง ยิ่งค่า lux ต่ำ = แสงยิ่งมืด
| สภาพแวดล้อม | ความสว่าง (Lux) |
|---|---|
| กลางคืนไร้แสงจันทร์ | 0.001 - 0.01 lux |
| พระจันทร์เต็มดวง | ~0.3 lux |
| แสงเทียน (1 เมตร) | ~1 lux |
| ถนนตอนกลางคืน (เสาไฟ) | 10 - 30 lux |
| ห้องนั่งเล่น (ไฟบ้าน) | 100 - 300 lux |
| สำนักงาน / ห้องทำงาน | 300 - 500 lux |
| ร้านสะดวกซื้อ | 500 - 1,000 lux |
| วันที่มีเมฆมาก | 1,000 - 5,000 lux |
| วันแดดจัด (ไม่โดนตรง) | 10,000 - 25,000 lux |
| แดดจัดตอนเที่ยง | ~100,000 lux |
ทำไมต้องวัด Lux?
ในงาน Smart Home และ IoT — การวัด lux มีประโยชน์หลายอย่าง:
- 💡 เปิดไฟอัตโนมัติ — ถ้า lux ต่ำกว่า 50 → เปิดไฟ, ถ้า lux > 300 → ปิดไฟ
- 🌱 ระบบรดน้ำต้นไม้ — ค่า lux บอกความเข้มแดด → ปรับการรดน้ำ
- 🪟 Solar Panel — คำนวณพลังงานที่ผลิตได้จากค่า lux
- 🏠 Smart Blind — ปิดม่านอัตโนมัติเมื่อ lux สูงเกินไป
เซ็นเซอร์วัด Lux สำหรับ Arduino
| เซ็นเซอร์ | ช่วงวัด | Interface | ราคา | ข้อดี |
|---|---|---|---|---|
| LDR (Light Dependent Resistor) | ~1 - 10,000 lux | Analog | ~5 บาท | ถูกสุด, ใช้ Analog Read |
| BH1750 | 1 - 65,535 lux | I2C | ~30-50 บาท | แม่นยำ, อ่านค่า lux โดยตรง |
| TSL2561 | 0.1 - 40,000 lux | I2C | ~50-80 บาท | แยกอินฟราเรด, ช่วงกว้าง |
| MAX44009 | 0.045 - 188,000 lux | I2C | ~60-100 บาท | กินไฟต่ำมาก, ช่วงกว้างมาก |
LDR — วัด lux แบบประหยัด (Analog)
LDR ($0.15) คือตัวต้านทานที่เปลี่ยนแปลงค่าตามแสง — ใช้กับ Analog Read ของ Arduino ได้เลย
// LDR → Arduino — วงจร
// [VCC 5V] ──[LDR]──[A0]──[R 10kΩ]──[GND]
// ยิ่งแสงมาก → ค่า analog ยิ่งสูง
const int LDR_PIN = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int raw = analogRead(LDR_PIN); // 0-1023
// แปลงเป็น Lux (ประมาณการ)
float voltage = raw * (5.0 / 1023.0);
float lux = 500.0 * pow(voltage, -1.5); // สูตรประมาณ
Serial.print("Raw: "); Serial.print(raw);
Serial.print(" | Lux: "); Serial.println(lux);
// เปิดไฟเมื่อมืด
if (lux < 30) {
digitalWrite(RELAY_LIGHT, HIGH); // เปิดไฟ
} else {
digitalWrite(RELAY_LIGHT, LOW); // ปิดไฟ
}
delay(1000);
}
⚠️ LDR ไม่แม่นยำเท่า BH1750! LDR ใช้สูตรประมาณการเท่านั้น ถ้าต้องการค่า lux แม่นยำ (เช่น วัดพลังงาน solar หรือ research) ควรใช้ BH1750 ซึ่งอ่านค่าเป็น lux โดยตรง
BH1750 — เซ็นเซอร์ lux แม่นยำ (I2C)
// BH1750 — I2C, ส่งค่า lux กลับมาโดยตรง
// VCC → 5V, GND → GND, SDA → A4, SCL → A5 (Arduino Uno)
#include <Wire.h>
#include <BH1750.h>
BH1750 lightMeter;
void setup() {
Serial.begin(9600);
Wire.begin();
lightMeter.begin();
}
void loop() {
float lux = lightMeter.readLightLevel();
Serial.print("Lux: "); Serial.println(lux);
// Logic เปิด/ปิดไฟ
if (lux < 50) {
Serial.println("🌙 มืดแล้ว → เปิดไฟ");
// digitalWrite(RELAY, HIGH);
} else if (lux > 200) {
Serial.println("☀️ สว่างแล้ว → ปิดไฟ");
// digitalWrite(RELAY, LOW);
}
delay(500);
}
Lux กับ Solar Panel — คำนวณพลังงาน
ค่า lux ช่วยประมาณกำลังที่ Solar Panel จะผลิตได้:
สมมติ Solar Panel 20W ที่ STC (Standard Test Condition = 100,000 lux): • กลางแจ้งแดดจัด (100,000 lux) → 20W (100%) • เมฆบางส่วน (50,000 lux) → ~10W (50%) • เมฆมาก (10,000 lux) → ~2W (10%) • ในร่มใกล้หน้าต่าง (1,000 lux) → ~0.2W (1%) • กลางคืน (0 lux) → 0W ข้อควรจำ: lux ที่วัดได้ = แค่ความสว่าง ณ จุดนั้น Solar Panel ต้องการทั้งความเข้ม + มุมที่เหมาะสม
ค่ามาตรฐาน Lux สำหรับงานต่าง ๆ
| การใช้งาน | Lux ที่แนะนำ | เซ็นเซอร์ที่ใช้เปิด-ปิด |
|---|---|---|
| 📖 อ่านหนังสือ | 300 - 500 lux | — |
| 💻 ทำงานคอม | 200 - 400 lux | — |
| 🚶 ทางเดินกลางคืน | 50 - 100 lux | PIR + LDR |
| 🌙 ไฟกลางคืน (night light) | 10 - 30 lux | LDR |
| 🌱 ต้นไม้ในร่ม | 1,000 - 5,000 lux | BH1750 |
| ☀️ Solar Panel ทำงาน | >30,000 lux | BH1750 |
โปรเจกต์แนะนำ: เปิดไฟอัตโนมัติตาม Lux + PIR
// Smart Light — LDR + PIR + Relay
// LDR วัด lux → ถ้ามืด + PIR เจอคน → เปิดไฟ
const int LDR_PIN = A0;
const int PIR_PIN = 7;
const int RELAY = 8;
int lightThreshold = 100; // lux
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, LOW);
}
void loop() {
float lux = readLux();
bool motion = digitalRead(PIR_PIN) == HIGH;
if (lux < lightThreshold && motion) {
digitalWrite(RELAY, HIGH); // เปิดไฟ
delay(120000); // เปิดค้าง 2 นาที
digitalWrite(RELAY, LOW); // ปิดไฟ
}
delay(500);
}
float readLux() {
int raw = analogRead(LDR_PIN);
return 500.0 * pow(5.0 * raw / 1023.0, -1.5);
}
⚠️ หมายเหตุ: เนื้อหาค้นคว้าและเรียบเรียงโดย Hermes AI — ข้อมูลทางเทคนิคควรตรวจสอบก่อนนำไปใช้งานจริง