การวัดความสว่างด้วยเซนเซอร์ LDR

เซนเซอร์และโมดูลวัดความสว่าง

เราสามารถมองความเข้มแสงหรือความสว่างเป็นสัญญาณประเภทหนึ่งที่มนุษย์สามารถสัมผัสได้ด้วยดวงตา ความสว่างมีหน่วยเป็นลักซ์ (lux) เป็นหน่วยที่ใช้วัดค่าความสว่าง (Illuminance) ต่อพื้นที่ หรือคิดเป็นลูเมนต่อตารางเมตร โดยในปกติความสว่างตามสถานที่ต่าง ๆ นั้นได้มาจากแหล่งกำเนิดที่แตกต่างกัน เช่น จากหลอดไฟ ดวงอาทิตย์หรือแสงจากไฟบริเวณข้างเคียง เป็นต้น ในทางปฏิบัติจะมีการกำหนดค่าความสว่างที่เหมาะสม กับการใช้งานในสถานที่นั้น ๆ ซึ่งโดยทั่วไปจะมีค่าไม่น้อยกว่า 50-500 ลักซ์

 

ตัวต้านทานที่แปรค่าตามแสง (Light Dependent Resistor, LDR)

แอลดีอาร์ (LDR) หรือชื่อเต็ม ๆ คือ Light Dependent Resistor หรือตัวต้านทานที่แปรค่าตามแสง คือ ตัวต้านทานชนิดที่เปลี่ยนสภาพความนำไฟฟ้า (Conductance) ได้เมื่อมีแสงมาตกกระทบ ทำจากวัสดุสารกึ่งตัวนำที่ไวต่อแสง บางครั้งเราเรียก LDR เซนเซอร์ชนิดนี้ว่าโฟโตรีซีสเตอร์ (Photoresistor) หรือ โฟโตคอนดัคเตอร์ (Photoconductor) รูปที่ 9.1(ก) แสดงตัว LDR  และ รูปที่ 9.1(ข) แสดงโมดูลวัดความสว่างที่ใช้ LDR เป็นเซนเซอร์ โมดูลนี้ให้สัญญาณเอาต์พุตได้ ทั้งแบบแอนะล็อกที่ช่อง (A0) ซึ่งมีค่าระหว่าง 0 - 1023 และแบบดิจิทัลที่ช่อง (D0) ค่า 0 กับ 1 โดยสามารถปรับระดับแรงดันที่นำเปรียบเทียบได้โดยการหมุนตัวต้านทานปรับค่าได้ (VR) บนบอร์ด และจะต้องป้อนใช้ไฟเลี้ยง 3.3-5V ให้กับวงจร ซึ่งบนบอร์ดจะมีแอลอีดีแสดงสัญญาณไฟเลี้ยง (PWR LED) และระดับสัญญาณที่เปรียบเทียบ (D0 LED) ด้วย

1

 

รูปที่ 9.1 (ก) LDR และ (ข) โมดูลวัดความสว่างด้วยเซนเซอร์ LDR

 

โดยลักษณะวงจรภายในโมดูล LDR นี้ แสดงดังรูปที่ 9.2 โดยเมื่อมีการป้อนไฟเลี้ยง VCC และกราวด์ GND ให้กับบอร์ด ความต้านทานของ LDR จะถูกแปลงเป็นสัญญาณแรงดันผ่านวงจรแบ่งแรงดันเป็นสัญญาณแอนะล็อก A0 แล้วสัญญาณนี้จึงนำมาเปรียบเทียบกับสัญญาณอ้างอิงที่ได้จากวงจรแบ่งแรงดันอีกวงจรที่สร้างด้วยตัวต้านทานปรับค่าได้ VR โดยออปแอมป์ (LM393) จะเป็นไอซีที่ใช้เปรียบเทียบสัญญาณ จากนั้นจึงส่งสัญญาณดิจิทัลออกไปเป็นสัญญาณ D0 โดยเราสามารถสังเกตระดับสัญญาณ D0 ผ่าน D0 LED ที่ต่ออยู่กับด้านขาออกของออปแอมป์ได้ด้วย

 

1

 

รูปที่ 9.2 ลักษณะวงจรภายในโมดูลวัดความสว่างด้วย LDR

 

 

การเทียบวัดค่าความสว่าง

ในการใช้โมดูลวัดความสว่างด้วยเซนเซอร์ LDR นี้ เพื่อให้การอ่านค่าความสว่าง (มีหน่วยเป็นลักซ์) ได้อย่างถูกต้อง เราควรจะทำการเทียบวัดค่า (calibration) เสียก่อน โดยหลักการเทียบวัดนั้น จะเริ่มจากการใช้เซนเซอร์อ่านค่าแสงที่ทราบค่าความสว่าง ซึ่งอาจวัดโดยใช้ลักซ์มิเตอร์วัดเปรียบเทียบ ตัวอย่างผลการทดลองกับ LDR ตัวหนึ่งแสดงในตารางที่ 9.1 และพล็อตเป็นกราฟได้ดังแสดงในรูปที่ 9.3

 

ตารางที่ 9.1 ความสัมพันธ์ระหว่างค่าความสว่างและความต้านทานของ LDR

ค่าความสว่าง (lux)

ค่าความต้านทาน (Ohm)

1

11600

60

2840

310

1374

590

1060

1300

664

1770

546

 

1

 

รูปที่ 9.3 ความสัมพันธ์ระหว่างค่าความสว่างและความต้านทานของ LDR

 

จากค่าความต้านทานที่เปลี่ยนแปลงตามความสว่าง เราสามารถแปลงข้อมูลสัญญาณเป็นแรงดันได้โดยใช้กฎการแบ่งแรงดัน ดังแสดงรูปวงจรในรูปที่ 9.4

 

1

 

รูปที่ 9.4 วงจรแบ่งแรงดัน

 

จากรูปวงจรที่ 9.4 เราสามารถคำนวณหาค่ากระแสไฟฟ้าที่ไหลในวงจรได้ดังสมการที่ (9.1) และแรงดันที่ตกคร่อม LDR หรือแรงดันที่ด้านออก (Vout) ดังสมการที่ (9.2)

 

                                                              (9.1)

 

                                                                  (9.2)

 

ตัวอย่าง ที่แสงความสว่าง 60 lux จงหาค่าแรงดัน Vout โดยแทนค่าความต้านทาน LDR ด้วยค่า 2.84 kW

 

ตัวอย่าง ที่แสงความสว่าง 590 lux จงหาค่าแรงดัน Vout โดยแทนค่าความต้านทาน LDR ด้วยค่า 1.06 kW

 

จากตารางที่ 9.1 และสมการที่ (9.2) เราสามารถสร้างตารางค่าแรงดันไฟฟ้าได้ดังตารางที่ 9.2

 

ตารางที่ 9.2 ความสัมพันธ์ระหว่างค่าความสว่างและแรงดันไฟฟ้าที่ตกคร่อมของ LDR

 

ค่าความสว่าง (lux)

ค่าความต้านทาน (Ohm)

แรงดันไฟฟ้า (Volt)

1

11600

2.69

60

2840

1.11

310

1374

0.60

590

1060

0.479

1300

664

0.311

1770

546

0.259

 

ในการหาค่าความสว่างจากข้อมูลที่แสดงในรูปที่ 9.3 เราจะฟิตข้อมูลและหาสมการความสัมพันธ์ของแสงและแรงดันไฟฟ้า ดังแสดงในรูปที่ 9.5

 

1

 

รูปที่ 9.5 การฟิตหาความสัมพันธ์ระหว่างค่าความสว่างและแรงดันไฟฟ้าที่วัดได้

 

จากสมการที่ได้จากการฟิตกราฟในรูปที่ 9.5 ความสัมพันธ์ระหว่างแรงดันไฟฟ้ามีหน่วยเป็นโวลต์ (volt) ในแนวแกน x กับค่าความสว่างที่มีหน่วยเป็นลักซ์ (lux) ในแนวแกน y สมการที่ได้เป็นสมการส่วนกลับ ดังสมการที่ (9.3) และมีค่า R2 เท่ากับ 0.963 ซึ่งเป็นค่าความเชื่อมั่นในระดับสูง

 

                                                            (9.3)

 

 

การแปลงสัญญาณแอนะล็อกเป็นดิจิทัล

กระบวนการตรวจจับและแปลงสัญญาณหรือปริมาณทางกายภาพใด ๆ มาเป็นสัญญาณไฟฟ้าเป็นกระบวนการแรกในการประมวลสัญญาณ อุปกรณ์ที่สำคัญคือ ตัวตรวจจับหรือเซนเซอร์ หน้าที่สำคัญคือ การเปลี่ยนหรือแปลงปริมาณทางกายภาพมาเป็นสัญญาณทางไฟฟ้าเช่น จอยสติ๊ก (joystick) โพรบวัดความชื้น โพรบวัดความสั่นสะเทือนที่ทำจากวัสดุเพียโซอิเล็กทริก (piezoelectric material) ตัวต้านทานแปรค่าตามแสง (LDR) ใช้ในการตรวจจับความสว่าง เพื่อเปลี่ยนเป็นค่าความต้านทานทางไฟฟ้าแล้วจึงแปลงเป็นแรงดันไฟฟ้า ตามลำดับ (ดูรูปที่ 9.6)

การปรับแต่งสัญญาณแรงดัน ซึ่งเป็นสัญญาณแอนะล็อกเป็นกระบวนการถัดมา โดยในส่วนนี้จะเป็นเรื่องของวงจรอิเล็กทรอนิกส์ที่จะทำให้สัญญาณไฟฟ้าที่ได้จากกระบวนการแรกเหมาะสมกับการเชื่อมต่อเข้ากับไมโครคอนโทรลเลอร์หรืออุปกรณ์แปลงสัญญาณแอนะล็อกเป็นดิจิทัล (Analog-to-Digital Conversion: ADC) โดยกระบวนการแปลงสัญญาณ
แอนะล็อกเป็นดิจิทัลเป็นขบวนการแปลงสัญญาณแอนะล็อกให้เป็นข้อมูลทางดิจิทัลเพื่อส่งไปประมวลผลยังไมโครคอนโทรลเลอร์ต่อไป

 

Ch09LightSensor

 

รูปที่ 9.6 ขบวนการแปลงสัญญาณแอนะล็อกเป็นดิจิทัล

 

ความละเอียดในการแปลงสัญญาณแอนะล็อก

ส่วนที่ต้องให้ความสนใจในส่วนนี้คือ ความละเอียดในการแปลงสัญญาณ วงจรแปลงสัญญาณแอนะล็อกเป็นสัญญาณดิจิทัลที่เหมาะสมในการนำมาใช้ในการทดลองทางวิทยาศาสตร์ควรมีความละเอียดไม่น้อยกว่า 8 บิต ซึ่งให้ความแตกต่างของข้อมูลไม่น้อยกว่า 256 ค่า (= 28) โดยเราสามารถหาจำนวนระดับความแตกต่างของข้อมูลได้โดยใช้สมการที่ (9.4) ส่วนค่าของข้อมูลดิจิทัล คือ 1024 สำหรับ NodeMCU หาได้จากสมการที่ (9.5) โดยกำหนดให้ความละเอียด n เท่ากับ 10 บิต ถ้าการแปลงสัญญาณนี้มีความละเอียดสูง (n มาก ๆ) เท่าใดก็จะยิ่งดี เพราะจะให้ผลการแปลงที่แม่นยำขึ้น สำหรับบอร์ด ADC ที่มีขายทั่วไปในท้องตลาดจะมีความละเอียด 8 – 24 บิต และสำหรับ NodeMCU วงจรแปลงสัญญาณภายในบอร์ดนี้มีความละเอียด 10 บิต

 

                            N = 2n เมื่อ n = 8 ได้ N = 2n = 256                         (9.4)

 

                            N = 2n เมื่อ n = 10 ได้ N = 2n = 1024                     (9.5)

 

รูปที่ 9.7 แสดงตัวอย่างการแปลงสัญญาณแอนะล็อกเป็นดิจิทัลและการแปลงกลับ ความแยกชัด (Resolution) ของการแปลงสัญญาณกำหนดด้วย 1 LSB คือ Least Significant Bit หมายถึง ค่าแรงดันอินพุตในแต่ขั้นการเปลี่ยนข้อมูลการแปลง ช่วงห่างระหว่างขั้นของการเปลี่ยนแปลงแรงดันแอนะล็อกเอาต์พุตหาได้จากสมการที่ (9.6)

 

                       Voltage Resolution                    (9.6)

 

โดยเมื่อแรงดันอินพุทของการแปลงแอนะล็อกเป็นดิจิทัลเท่ากับ 3.3 V ที่ความละเอียด 10 บิต จะได้ Voltage resolution หรือ 1 LSB คือ 3.223 mV ดังแสดงในสมการที่ (9.7)

 

               Voltage Resolution = 1 LSB              (9.7)

 

1

 

รูปที่ 9.7 ตัวอย่างการแปลงสัญญาณแอนะล็อกเป็นดิจิทัลและการแปลงกลับ

 

ตารางที่ 9.3 ตัวอย่างการแปลงแรงดันเป็นตัวเลขฐานสองขนาด 10 บิต

 

ค่าแรงดัน

ข้อมูลเลขฐานสิบ

ข้อมูลเลขฐานสอง

0.0 V

0

00 0000 0000

0.003223 V

1

00 0000 0001

0.3223 V

100

00 0110 0100

1.00 V

310

01 0011 0110

1.65 V

512

10 0000 0000

3.30 V

1023

11 1111 1111

 

คำสั่งในการอ่านค่าสัญญาณแอนะล็อกจาก NodeMCU

คำสั่ง analogRead(pin) โดย pin คือ ชื่อขา สำหรับ NodeMCU จะมีเพียงขาเดียวคือ ขา A0 (ดูรูปที่ 9.6 คอลัมน์ขวามือสุด)

 

โค้ดตัวอย่างการรับค่าสัญญาณแอนะล็อกแล้วคำนวณค่าแรงดันและค่าความสว่าง คือ

 

 

data_LDR = analogRead(A0);

volt_LDR = (3.3/1024) * data_LDR;

illu_LDR = 42.0 * pow(volt_LDR, -3.15);

 

 

การทดลองวัดค่าความสว่าง

วัตถุประสงค์

1. สามารถเข้าใจการแปลงข้อมูลจากสัญญาณแอนะล็อกเป็นดิจิทัลได้

2. สามารถต่อวงจรไมโครคอนโทรลเลอร์ NodeMCU v.3 กับโมดูลวัดแสงแบบแอนะล็อกได้

3. สามารถเขียนโปรแกรมแสดงการคำนวณค่าความสว่างและแสดงผลบน OLED Display ได้

 

อุปกรณ์ที่ใช้ในการทดลอง

1.     เครี่องคอมพิวเตอร์ที่มีระบบปฏิบัติการ Windows (ตั้งแต่ Windows 7 ขึ้นไป)
พร้อมติดตั้งโปรแกรม
Arduino IDE 1.8.8 IoT                            1 เครื่อง

2.     NodeMCU v.3                                                             1 บอร์ด

3.     NodeMCU Base Ver 1.0                                                 1 บอร์ด

4.     โมดูลวัดความสว่างด้วย LDR                                               1 โมดูล

5.     โมดูล OLED Display ขนาด 128×64 พิกเซล                             1 โมดูล

6.     สาย USB                                                                    1 เส้น

7.     สายต่อวงจร (สายจัมพ์ เมีย-เมีย)                                           7 เส้น

 

วิธีการทดลอง

ตอนที่ 1 การอ่านค่าแอนะล็อกและแสดงผลบนคอมพิวเตอร์

1. ต่อวงจรโดยป้อนแรงดัน 5 V และ กราวด์ให้แก่โมดูลวัดแสงแบบแอนะล็อกด้วย LDR และป้อนสัญญาณ A0 เข้าสู่ขา A0 ดังรูปที่ 9.8

 

1

 

รูปที่ 9.8 การเชื่อมต่อ NodeMCU v.3 กับ โมดูลวัดแสงแบบแอนะล็อก

 

2. เขียนโค้ดโปรแกรมดังแสดงข้างล่างนี้ แล้วอัปโหลดและสังเกตผลที่แสดงบนคอมพิวเตอร์ ผ่านพอร์ตอนุกรม ทั้งทาง Serial Monitor และ Serial Plotter ในเมนู Tools

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

// Read LDR by NodeMCU ESP8266

// Result is sent to serial port.

 

// Pin A0 = analog input

int LDR_Sensor = A0;

int data_LDR;

 

void setup() {

    // Set serial speed to 9600 bps

    Serial.begin(9600);

}

 

void loop() {

    // Read Analog Data

    data_LDR = analogRead(LDR_Sensor);

    Serial.println(data_LDR);

    delay(500);            

}

 

แผนผังการทำงานของโปรแกรมที่เขียนในตอนที่ 1 แสดงดังรูปที่ 9.9 และผลลัพธ์อาจแสดงเป็นตัวเลข (ผ่าน Serial Monitor) และเป็นกราฟ (ผ่าน Serial Plotter) ได้ดังรูปที่ 9.10 () และ 9.10 (ข) ตามลำดับ

 

 

2

 

รูปที่ 9.9 แผนผังการทำงานของโปรแกรมในการทดลองตอนที่ 1

 

1

 

รูปที่ 9.10 ผลลัพธ์ของโปรแกรมในการทดลองตอนที่ 1
ที่เปิดดูผ่าน (ก) Serial Monitor และ (ข) Serial Plotter

 

 

ตอนที่ 2 การอ่านค่าแอนะล็อกและแสดงผลบนจอ OLED

1. ต่อวงจรดังรูปที่ 9.11

2. เขียนโค้ดโปรแกรมดังที่แสดงข้างล่างนี้ แล้วอัปโหลดและสังเกตผลที่แสดงบนหน้าจอ OLED Display และผลบนคอมพิวเตอร์ (ผ่าน Serial Monitor)

 

1

 

รูปที่ 9.11 การเชื่อมต่อ NodeMCU v.3 กับ โมดูลวัดแสงแบบแอนะล็อก
และจอแสดงผล
OLED Display

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

 

33

34

35

36

37

38

 

39

40

41

 

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

// Read LDR by NodeMCU ESP8266

// result is sent to OLED & Serial

 

#include <Wire.h>

#include <SH1106.h>

 

// SH1106(Addr, SDA, SCL) 

SH1106 display(0x3c, D1, D2);  // OLED

 

// Pin A0 = analog input

int LDR_Sensor = A0;

int data_LDR;

float volt_LDR;

float illu_LDR;

 

void setup() {

    display.init();   

    // Set serial speed to 9600 bps

    Serial.begin(9600);

}

 

void Calculate() {

    data_LDR = analogRead(LDR_Sensor);

    volt_LDR = (3.3/1024)*data_LDR;

    illu_LDR = 42.0 * pow(volt_LDR, -3.15);

}

 

void show_OLED() {

    display.clear();

    display.drawRect(0, 0, 128, 64);

    display.setFont(ArialMT_Plain_10);

    display.drawString(15,0, "LDR Sensor Monitor");

 

    display.drawString(5, 15, "data_LDR = ");

    display.drawString(65, 15, String(data_LDR));

 

    display.drawString(5, 30, "volt_LDR = ");

    display.drawString(65, 30, String(volt_LDR) + " V");

 

    display.drawString(5, 45, "illu_LDR = ");

    display.drawString(65, 45, String(illu_LDR) + " lux");

 

    display.display();   

}

 

void show_Serial() {

    Serial.print("\t data_LDR = ");

    Serial.print(data_LDR);

    Serial.print("\t volt_LDR = ");

    Serial.print(volt_LDR);

    Serial.print("\t illu_LDR = ");

    Serial.println(illu_LDR);

}

 

void loop() {

    Calculate();

    show_OLED();

    show_Serial();

    delay(500);

}

 

รูปที่ 9.12 แสดงภาพถ่ายระบบที่ทดสอบและผลลัพธ์ที่ได้ บนหน้าจอ OLED และบนจอคอมพิวเตอร์ ผ่าน Serial Monitor

 

1

 

รูปที่ 9.12 การเชื่อมต่อ NodeMCU v.3 กับ โมดูลวัดแสงแบบแอนะล็อก และ OLED
ที่แสดงพร้อมผลลัพธ์จากการทดลองตอนที่ 2

 

 

แบบฝึกหัดท้ายการทดลอง

จงเขียนโปรแกรมควบคุมการทำงานของรีเลย์ 1 – รีเลย์ 4 โดยมีการรับค่าจากเซนเซอร์วัดความสว่าง และมีเงื่อนไขการทำงานดังแสดงในตารางที่ 9.4

ข้อแนะนำ ควรต่อวงจรตามรูปที่ 9.13

 

ตารางที่ 9.4 เงื่อนไขของโปรแกรมควบคุมรีเลย์

 

เงื่อนไข

รีเลย์ 1

รีเลย์ 2

รีเลย์ 3

รีเลย์ 4

ความสว่าง  £ 20 lux

ON

ON

ON

ON

20 < ความสว่าง £ 50

ON

ON

ON

OFF

50 < ความสว่าง £ 100

ON

ON

OFF

OFF

100 < ความสว่าง £ 200

ON

OFF

OFF

OFF

ความสว่าง > 200 lux

OFF

OFF

OFF

OFF

 

 

2

 

รูปที่ 9.13 การเชื่อมต่อ NodeMCU v.3 กับ โมดูลวัดแสงแบบแอนะล็อก และโมดูลรีเลย์