การใช้ LDR ร่วมกับ Arduino และสวิตช์ควบคุมเพื่อให้ไฟ Arduino สว่างขึ้น
ในบทช่วยสอนนี้ เราจะสำรวจวิธีการใช้ตัวต้านทานไวแสง (LDR) ร่วมกับ Arduino เพื่อควบคุมแสงตามระดับแสงโดยรอบ LDR จะเปลี่ยนค่าความต้านทานตามความเข้มของแสง ดังนั้นจึงสามารถใช้ตรวจจับได้ว่าสภาพแวดล้อมนั้นสว่างหรือมืด เมื่อแสงต่ำกว่าเกณฑ์ที่กำหนด เราจะเปิดพินเอาต์พุตเพื่อเปิดใช้งานไฟ

ส่วนประกอบหลักที่คุณต้องใช้ ได้แก่ บอร์ด Arduino ตัวต้านทาน 10k โอห์ม LDR และสายจัมเปอร์บางเส้น LDR จะถูกเชื่อมต่อในรูปแบบตัวแบ่งแรงดันร่วมกับตัวต้านทานเพื่ออ่านค่าแรงดันอนาล็อก ซึ่งจะเปลี่ยนแปลงตามความเข้มของแสง เราจะใช้แรงดันนี้เพื่อควบคุม LED หรืออุปกรณ์เอาต์พุตอื่น ๆ
สำหรับการสาธิตการติดตั้งและโค้ดด้วยภาพ โปรดดูวิดีโอที่เกี่ยวข้อง (ในวิดีโอที่ 0:10)
อธิบายฮาร์ดแวร์
ตัวต้านทานไวแสง (LDR) เป็นตัวต้านทานชนิดหนึ่งที่มีค่าความต้านทานลดลงเมื่อความเข้มของแสงที่ตกกระทบเพิ่มขึ้น โดยทั่วไปจะใช้ในงานที่ต้องตรวจสอบระดับแสง ในการติดตั้งของเรา LDR จะถูกใช้เพื่อตรวจจับระดับแสงโดยรอบและส่งค่าแรงดันอนาล็อกที่สอดคล้องกันไปยัง Arduino
Arduino จะอ่านค่าแรงดันนี้ผ่านพินอนาล็อกพินใดพินหนึ่ง และตัดสินใจว่าจะเปิดหรือปิดไฟที่เชื่อมต่ออยู่ตามเกณฑ์ที่กำหนด ตัวต้านทาน 10k โอห์มถูกใช้ในรูปแบบตัวแบ่งแรงดันร่วมกับ LDR เพื่อสร้างเอาต์พุตแรงดันที่เสถียรซึ่ง Arduino สามารถอ่านได้
รายละเอียดจากดาต้าชีต
| ผู้ผลิต | ทั่วไป |
|---|---|
| หมายเลขชิ้นส่วน | LDR |
| ความต้านทาน (แสง) | 100 - 500 Ω |
| ความต้านทาน (มืด) | 10 kΩ - 1 MΩ |
| แรงดันใช้งาน | 3.3 V - 5 V |
| เวลาตอบสนอง | 20 ms (ทั่วไป) |
| แพ็กเกจ | แบบทะลุรู |
- ตรวจสอบให้แน่ใจว่าระดับแรงดันเหมาะสม อย่าเกิน 5V
- ใช้ตัวต้านทานแบบดึงลงเพื่อทำให้การอ่านค่ามีความเสถียร
- เลือกค่าตัวต้านทานที่เหมาะสม (10kΩ) สำหรับตัวแบ่งแรงดัน
- พิจารณาใช้ตัวเก็บประจุเพื่อกรองสัญญาณรบกวนหากจำเป็น
- เก็บ LDR ให้ห่างจากแหล่งแสงโดยตรงเมื่อทำการทดสอบ
คำแนะนำการเดินสายไฟ

ในการตั้งค่าวงจร ให้เริ่มต้นโดยเชื่อมต่อขาหนึ่งของ LDR เข้ากับแหล่งจ่ายไฟ 3.3V บน Arduino ขาอีกข้างของ LDR จะเชื่อมต่อกับปลายด้านหนึ่งของตัวต้านทาน 10k โอห์ม ปลายอีกด้านของตัวต้านทานควรเชื่อมต่อกับกราวด์
ถัดไป สร้างการเชื่อมต่อระหว่างจุดร่วมของ LDR และตัวต้านทานเข้ากับพินอินพุตอนาล็อก เช่น A0 การเชื่อมต่อนี้จะช่วยให้ Arduino อ่านค่าแรงดันได้ ตรวจสอบให้แน่ใจว่าได้เชื่อมต่อกราวด์ของ Arduino เข้ากับกราวด์ร่วมของวงจรเพื่อให้ทำงานได้อย่างถูกต้อง
ตัวอย่างโค้ดและคำอธิบาย
โค้ดต่อไปนี้เริ่มต้นการสื่อสารแบบซีเรียลและอ่านค่าอนาล็อกจาก LDR จากนั้นค่าจะถูกแปลงเป็นแรงดันและพิมพ์ไปยังซีเรียลมอนิเตอร์
int LDRvalue = analogRead(A0); // อ่านค่าอนาล็อกจาก LDR
float voltage = LDRvalue * (5.0 / 1023.0); // แปลงเป็นแรงดัน
Serial.print("Voltage ="); // พิมพ์ป้ายกำกับ
Serial.print(voltage); // พิมพ์ค่าแรงดันจริง
ในโค้ดนี้ ตัวแปร LDRvalue เก็บค่าอนาล็อกดิบที่อ่านจาก LDR ค่าแรงดันคำนวณจากค่าอนาล็อกสูงสุด (1023) และแรงดันอ้างอิง (5V)
ถัดไป เราจะตรวจสอบว่าแรงดันนี้ต่ำกว่าเกณฑ์ (ในกรณีนี้คือ 3V) เพื่อควบคุมพินเอาต์พุต
if(voltage < 3 ){
digitalWrite(10, HIGH); // เปิดไฟ
}else{
digitalWrite(10, LOW); // ปิดไฟ
}
ที่นี่ หากค่าแรงดันที่วัดได้ต่ำกว่า 3 โวลต์ เราจะตั้งค่าพินเอาต์พุต (10) เป็น HIGH เพื่อเปิดไฟ มิฉะนั้นจะตั้งเป็น LOW เพื่อปิดไฟ การตรวจสอบสภาพแสงอย่างต่อเนื่องช่วยให้สามารถควบคุมแบบเรียลไทม์ตามระดับแสงโดยรอบได้
การสาธิต / สิ่งที่คาดหวัง
เมื่อเดินสายไฟและอัปโหลดโค้ดเสร็จแล้ว คุณควรเห็นค่าแรงดันบนซีเรียลมอนิเตอร์เปลี่ยนแปลงเมื่อคุณปรับความเข้มของแสงที่ตกกระทบ LDR หากคุณปิดบัง LDR ค่าแรงดันควรเพิ่มขึ้น และเมื่อได้รับแสงควรลดลง พฤติกรรมนี้จะส่งผลโดยตรงต่อพินเอาต์พุตซึ่งควบคุมไฟ
โปรดระวังข้อผิดพลาดทั่วไป เช่น อินพุตลอยหรือระดับแรงดันที่ไม่ถูกต้อง ซึ่งอาจทำให้การอ่านค่าผิดพลาด (ในวิดีโอที่ 12:30)
ไทม์สแตมป์วิดีโอ
- 00:00 แนะนำ LDR
- 01:30 การตั้งค่าฮาร์ดแวร์
- 03:45 คำอธิบายโค้ด
- 06:00 การรันโค้ด
- 09:15 เคล็ดลับการแก้ไขปัญหา
//Original source: https://www.arduino.cc/en/Tutorial/ReadAnalogVoltage
// This code is used with a video tutorial for RoboJax.com
// Published on August 31, 2017 from Ajax, ON, Canada.
// Written/Edited by A.B.S
/void setup()
{
Serial.begin(9600); // setup serial
pinMode(10, OUTPUT);
}
void loop(){
int LDRvalue = analogRead(A0);
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
float voltage = LDRvalue * (5.0 / 1023.0);
// print out the value you read:
Serial.print("Voltage =");// prints the text "Voltage ="
Serial.print(voltage);// prints the actual voltage
// check if voltage is less than 3, then set pin 10 to high or ON
if(voltage < 3 ){
digitalWrite(10, HIGH);
}else{
digitalWrite(10, LOW); // or keep it OFF when voltage is larger than 3
}
Serial.println();
delay(300);
}
แหล่งข้อมูลและเอกสารอ้างอิง
ยังไม่มีทรัพยากรเลย
ไฟล์📁
ไฟล์อื่น ๆ
-
แผนภาพวงจร LDR 1
LDR_circuit1.PDF0.04 MB -
แผนภาพวงจร LDR 2
LDR_circuit2.PDF0.04 MB