การวัดความสว่างด้วยเซนเซอร์ 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) ด้วย
รูปที่
9.1 (ก) LDR และ (ข) โมดูลวัดความสว่างด้วยเซนเซอร์ LDR
โดยลักษณะวงจรภายในโมดูล LDR นี้ แสดงดังรูปที่ 9.2 โดยเมื่อมีการป้อนไฟเลี้ยง VCC และกราวด์ GND ให้กับบอร์ด ความต้านทานของ
LDR จะถูกแปลงเป็นสัญญาณแรงดันผ่านวงจรแบ่งแรงดันเป็นสัญญาณแอนะล็อก
A0
แล้วสัญญาณนี้จึงนำมาเปรียบเทียบกับสัญญาณอ้างอิงที่ได้จากวงจรแบ่งแรงดันอีกวงจรที่สร้างด้วยตัวต้านทานปรับค่าได้
VR โดยออปแอมป์ (LM393)
จะเป็นไอซีที่ใช้เปรียบเทียบสัญญาณ จากนั้นจึงส่งสัญญาณดิจิทัลออกไปเป็นสัญญาณ D0
โดยเราสามารถสังเกตระดับสัญญาณ D0 ผ่าน D0
LED ที่ต่ออยู่กับด้านขาออกของออปแอมป์ได้ด้วย
รูปที่
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 |
รูปที่
9.3 ความสัมพันธ์ระหว่างค่าความสว่างและความต้านทานของ LDR
จากค่าความต้านทานที่เปลี่ยนแปลงตามความสว่าง เราสามารถแปลงข้อมูลสัญญาณเป็นแรงดันได้โดยใช้กฎการแบ่งแรงดัน
ดังแสดงรูปวงจรในรูปที่ 9.4
รูปที่
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
รูปที่
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) โดยกระบวนการแปลงสัญญาณ
แอนะล็อกเป็นดิจิทัลเป็นขบวนการแปลงสัญญาณแอนะล็อกให้เป็นข้อมูลทางดิจิทัลเพื่อส่งไปประมวลผลยังไมโครคอนโทรลเลอร์ต่อไป
รูปที่
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)
รูปที่
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
รูปที่
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 (ข) ตามลำดับ
รูปที่
9.9 แผนผังการทำงานของโปรแกรมในการทดลองตอนที่ 1
รูปที่
9.10
ผลลัพธ์ของโปรแกรมในการทดลองตอนที่ 1
ที่เปิดดูผ่าน (ก) Serial Monitor และ (ข) Serial Plotter
ตอนที่
2
การอ่านค่าแอนะล็อกและแสดงผลบนจอ OLED
1.
ต่อวงจรดังรูปที่ 9.11
2.
เขียนโค้ดโปรแกรมดังที่แสดงข้างล่างนี้
แล้วอัปโหลดและสังเกตผลที่แสดงบนหน้าจอ OLED Display และผลบนคอมพิวเตอร์
(ผ่าน Serial Monitor)
รูปที่
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
รูปที่
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 |
รูปที่
9.13 การเชื่อมต่อ NodeMCU v.3 กับ
โมดูลวัดแสงแบบแอนะล็อก และโมดูลรีเลย์