บทความ: คู่มือการใช้งานเซ็นเซอร์แสง Arduino ฉบับสมบูรณ์ (LDR, BH1750)

เรียนรู้วิธีการใช้งาน Light Dependent Resistor (LDR) และเซ็นเซอร์แสงดิจิทัล BH1750 กับ Arduino พร้อมโค้ดตัวอย่างและวงจรที่สามารถนำไปประยุกต์ใช้กับโปรเจกต์ IoT ของคุณได้ทันที

23 มีนาคม 2026 15 นาที ระดับเริ่มต้น
Arduinoเซ็นเซอร์IoTมือใหม่

🌟 แนะนำเซ็นเซอร์แสง (Light Sensors)

เซ็นเซอร์แสงเป็นหนึ่งในเซ็นเซอร์พื้นฐานที่สุดและมีประโยชน์มากที่สุดในโลกของ IoT และอิเล็กทรอนิกส์ ไม่ว่าคุณจะต้องการสร้างโคมไฟอัจฉริยะที่เปิด-ปิดอัตโนมัติ, ระบบเตือนดวงอาทิตย์, หรือเครื่องวัดความสว่าง เซ็นเซอร์แสงคือคำตอบ!

ในบทความนี้ เราจะมาเรียนรู้กันถึง 2 เซ็นเซอร์แสงที่ได้รับความนิยมมากที่สุดสำหรับ Arduino:

  • LDR (Light Dependent Resistor) - เซ็นเซอร์แสงแบบอะนาล็อกที่ราคาถูกและใช้งานง่าย
  • BH1750 - เซ็นเซอร์แสงดิจิทัลที่ให้ค่าแม่นยำสูงและวัดหน่วย Lux

🔆 LDR (Light Dependent Resistor)

Light Dependent Resistor (LDR) หรือที่เรียกว่า Photoresistor เป็นตัวต้านทานที่เปลี่ยนค่าตามความสว่างของแสง ยิ่งแสงสว่างมาก ค่าตัวต้านทานยิ่งต่ำลง และในทางกลับกัน

📦 อุปกรณ์ที่ต้องใช้

  • ✅ Arduino Uno (หรือ Arduino รุ่นอื่นๆ)
  • ✅ LDR (5mm หรือ 10mm)
  • ✅ ตัวต้านทาน 10kΩ (1 ตัว)
  • ✅ Breadboard และสาย jumper

🔌 การต่อวงจร (Voltage Divider Circuit)

เราต่อวงจรแบบ Voltage Divider เพื่อแปลงค่าตัวต้านทานของ LDR เป็นแรงดันที่ Arduino สามารถอ่านได้:

  • 📍 LDR ขา 1 → 5V
  • 📍 LDR ขา 2 → ตัวต้านทาน 10kΩ → GND
  • 📍 จุดระหว่าง LDR กับตัวต้านทาน → Pin A0 (Analog Input)

💻 โค้ด Arduino - อ่านค่าแสงจาก LDR

// กำหนดขา Analog Input สำหรับ LDR
const int ldrPin = A0;

// ตัวแปรสำหรับเก็บค่า
int ldrValue = 0;

void setup() {
  Serial.begin(9600);  // เริ่มต้น Serial Monitor
  pinMode(ldrPin, INPUT);  // ตั้งค่า LDR pin เป็น input
}

void loop() {
  // อ่านค่าจาก LDR (0 - 1023)
  ldrValue = analogRead(ldrPin);

  // แสดงค่าบน Serial Monitor
  Serial.print("ความสว่างแสง: ");
  Serial.print(ldrValue);
  Serial.print(" | ");

  // แปลงค่าเป็นเปอร์เซ็นต์
  int brightnessPercent = map(ldrValue, 0, 1023, 0, 100);
  Serial.print(brightnessPercent);
  Serial.println("%");

  // ตรวจสอบระดับแสงและแสดงผล
  if (ldrValue < 200) {
    Serial.println("สถานะ: มืดมาก 🔦");
  } else if (ldrValue < 500) {
    Serial.println("สถานะ: แสงน้อย 🌤️");
  } else if (ldrValue < 800) {
    Serial.println("สถานะ: แสงปานกลาง ⛅");
  } else {
    Serial.println("สถานะ: แสงจ้ามาก ☀️");
  }

  delay(1000);  // รอ 1 วินาที
}

💡 โปรเจกต์: โคมไฟอัจฉริยะอัตโนมัติ

ต่อยอดจากโค้ดด้านบน โดยเพิ่ม LED เข้าไป เพื่อให้ไฟเปิดอัตโนมัติเมื่อมืด:

const int ldrPin = A0;
const int ledPin = 13;  // LED บนบอร์ด Arduino

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

void loop() {
  ldrValue = analogRead(ldrPin);

  // ถ้าแสงมืด (ค่าน้อยกว่า 300) เปิดไฟ
  if (ldrValue < 300) {
    digitalWrite(ledPin, HIGH);
    Serial.println("แสงมืด - เปิดไฟ 💡");
  } else {
    digitalWrite(ledPin, LOW);
    Serial.println("แสงสว่าง - ปิดไห 🌙");
  }

  delay(100);
}

💡 เซ็นเซอร์แสงดิจิทัล BH1750

BH1750 เป็นเซ็นเซอร์แสงดิจิทัลที่ให้ค่าความสว่างในหน่วย Lux แม่นยำกว่า LDR มาก ใช้งานร่วมกับ Arduino ผ่านบัส I2C ทำให้ต่อสายง่ายและประหยัดขา GPIO

📦 อุปกรณ์ที่ต้องใช้

  • ✅ Arduino Uno (หรือ Arduino รุ่นอื่นๆ)
  • ✅ เซ็นเซอร์ BH1750
  • ✅ Breadboard และสาย jumper

🔌 การต่อวงจร (I2C)

ต่อสายตามนี้ (ใช้ I2C bus):

  • 📍 VCC → 3.3V หรือ 5V
  • 📍 GND → GND
  • 📍 SCL → Pin A5 (หรือ SCL)
  • 📍 SDA → Pin A4 (หรือ SDA)

📚 การติดตั้ง Library

1. เปิด Arduino IDE

2. ไปที่ Sketch → Include Library → Manage Libraries

3. ค้นหา "BH1750" และติดตั้ง library จาก Christopher Laws

💻 โค้ด Arduino - อ่านค่าแสงจาก BH1750

#include <Wire.h>
#include <BH1750.h>

// สร้าง object สำหรับเซ็นเซอร์
BH1750 lightMeter;

void setup() {
  Serial.begin(9600);

  // เริ่มต้น I2C bus
  Wire.begin();

  // เริ่มต้นเซ็นเซอร์
  lightMeter.begin();

  Serial.println("เริ่มต้นเซ็นเซอร์ BH1750...");
  delay(1000);
}

void loop() {
  // อ่านค่าแสง (Lux)
  float lux = lightMeter.readLightLevel();

  // แสดงค่าบน Serial Monitor
  Serial.print("ความสว่าง: ");
  Serial.print(lux);
  Serial.println(" lx");

  // ตรวจสอบระดับแสง
  if (lux < 10) {
    Serial.println("สถานะ: มืดมาก 🔦");
  } else if (lux < 50) {
    Serial.println("สถานะ: แสงน้อย 🌙");
  } else if (lux < 200) {
    Serial.println("สถานะ: แสงปานกลาง 🌤️");
  } else if (lux < 500) {
    Serial.println("สถานะ: แสงสว่าง ☀️");
  } else {
    Serial.println("สถานะ: แสงจ้ามาก ☀️☀️");
  }

  Serial.println("-------------------");
  delay(2000);  // รอ 2 วินาที
}

🎨 ตัวอย่างโปรเจกต์ที่น่าสนใจ

1️⃣ ระบบเปิด-ปิดไฟอัตโนมัติ

ใช้ LDR หรือ BH1750 เปิด-ปิดไฟในบ้านอัตโนมัติเมื่อมืด ประหยัดไฟและสะดวกสบาย

2️⃣ เครื่องวัดความสว่าง (Lux Meter)

สร้างเครื่องวัดความสว่างแบบมืออาชีพด้วย BH1750 เพื่อใช้ในการถ่ายภาพหรือออกแบบแสง

3️⃣ ระบบรดน้ำอัตโนมัติ

ตรวจสอบแสงอาทิตย์เพื่อปรับเวลาการรดน้ำพืชให้เหมาะสมกับสภาพแสง

4️⃣ ม่านบ้านอัจฉริยะ

เปิด-ปิดม่านอัตโนมัติตามแสงแดด เพื่อประหยัดพลังงานและความเย็น

5️⃣ โคมไฟปรับความสว่าง

ปรับความสว่างไฟ LED อัตโนมัติตามแสงภายในห้อง (PWM)

6️⃣ เตือนดวงอาทิตย์

แจ้งเตือนเมื่อมีแสงแดดจ้า เพื่อให้คุณรู้ว่าเวลาออกกำลังกายกลางแจ้ง

⚖️ เปรียบเทียบ LDR vs BH1750

คุณสมบัติLDRBH1750
ราคาถูก (5-10 บาท)ปานกลาง (30-50 บาท)
ความแม่นยำปานกลางสูง (Lux)
การใช้งานง่ายมากต้องใช้ I2C
OutputAnalog (0-1023)Digital (Lux)
ใช้ขา GPIO1 ขา2 ขา (I2C)
เหมาะกับโปรเจกต์ง่ายๆโปรเจกต์ที่ต้องการความแม่นยำ

💡 คำแนะนำในการเลือกใช้

เลือก LDR ถ้าคุณเป็นมือใหม่และอยากเริ่มต้นด้วยโปรเจกต์ง่ายๆ เช่น ไฟเปิดอัตโนมัติ
เลือก BH1750 ถ้าคุณต้องการค่าที่แม่นยำ วัดหน่วย Lux หรือทำโปรเจกต์ที่ซับซ้อนกว่า เช่น เครื่องวัดความสว่าง

🔧 การแก้ปัญหาที่พบบ่อย

❗ ปัญหา: LDR อ่านค่าได้แค่ 0 หรือ 1023 เท่านั้น

สาเหตุ: อาจต่อวงจรผิด หรือตัวต้านทานเสีย

วิธีแก้: ตรวจสอบการต่อสาย Voltage Divider ให้ถูกต้อง ลองเปลี่ยนตัวต้านทาน 10kΩ

❗ ปัญหา: BH1750 อ่านค่าไม่ได้

สาเหตุ: อาจต่อ I2C ผิด หรือ Library ไม่ถูกต้อง

วิธีแก้: ตรวจสอบการต่อ SCL/SDA ให้ถูกต้อง (A5/A4) ติดตั้ง BH1750 library ที่ถูกต้อง

❗ ปัญหา: ค่าที่อ่านได้ไม่คงที่

สาเหตุ: แสงในห้องกระพริบ หรือเซ็นเซอร์มีความไวสูง

วิธีแก้: ใช้ค่าเฉลี่ย (averaging) จากหลายๆ ค่าอ่าน เพื่อให้ผลลัพธ์เสถียรขึ้น

💻 โค้ด: การใช้ค่าเฉลี่ย (Averaging)

// ฟังก์ชันอ่านค่าเฉลี่ยจาก LDR
int readLDRAverage(int pin, int samples) {
  long sum = 0;
  for (int i = 0; i < samples; i++) {
    sum += analogRead(pin);
    delay(10);  // รอ 10ms ระหว่างแต่ละครั้ง
  }
  return sum / samples;
}

void loop() {
  // อ่านค่าเฉลี่ย 10 ครั้ง
  int ldrValue = readLDRAverage(A0, 10);
  Serial.print("ค่าเฉลี่ย: ");
  Serial.println(ldrValue);
  delay(1000);
}

✅ สรุป

ในบทความนี้ เราได้เรียนรู้เกี่ยวกับเซ็นเซอร์แสง 2 ประเภทที่ได้รับความนิยมสำหรับ Arduino:

  • LDR - เหมาะสำหรับมือใหม่ ราคาถูก ใช้งานง่าย แต่ความแม่นยำปานกลาง
  • BH1750 - ให้ค่าแม่นยำสูง วัดหน่วย Lux ใช้ I2C เหมาะกับโปรเจกต์ที่ต้องการความแม่นยำ

ทั้งสองเซ็นเซอร์มีข้อดีและข้อเสียที่แตกต่างกัน ขึ้นอยู่กับความต้องการของโปรเจกต์และงบประมาณที่คุณมี

🚀 โปรเจกต์ต่อไปที่ควรลอง

  • ✨ ระบบควบคุมไฟอัจฉริยะด้วย ESP32 และ CynoIoT
  • ✨ เครื่องวัดคุณภาพอากาศพร้อมเซ็นเซอร์แสง
  • ✨ ระบบอัตโนมัติสำหรับบ้านอัจฉริยะ (Smart Home)

CynoIoT Platform

แพลตฟอร์ม IoT ที่ช่วยให้คุณเชื่อมต่อและควบคุมอุปกรณ์ IoT ได้ง่ายๆ

© 2026 CynoIoT. All rights reserved.