ค้นหาโค้ด

การใช้ LDR ร่วมกับ Arduino และสวิตช์ควบคุมเพื่อให้ไฟ Arduino สว่างขึ้น

การใช้ LDR ร่วมกับ Arduino และสวิตช์ควบคุมเพื่อให้ไฟ Arduino สว่างขึ้น

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

LDR Illustration and symbol

ส่วนประกอบหลักที่คุณต้องใช้ ได้แก่ บอร์ด 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 ให้ห่างจากแหล่งแสงโดยตรงเมื่อทำการทดสอบ

คำแนะนำการเดินสายไฟ

Wiring LDR with Arduino
Wiring LDR with Arduino

ในการตั้งค่าวงจร ให้เริ่มต้นโดยเชื่อมต่อขาหนึ่งของ 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 เคล็ดลับการแก้ไขปัญหา

ภาพ

Wiring LDR with Arduino
Wiring LDR with Arduino
An LDR
An LDR
LDR Illustration and symbol
LDR Illustration and symbol
14-Using an LDR with an Arduino and a control switch for a light
ภาษา: C++
//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);

}

แหล่งข้อมูลและเอกสารอ้างอิง

ยังไม่มีทรัพยากรเลย

ไฟล์📁

ไฟล์อื่น ๆ