กลับไปหน้ารวมไฟล์
light-magic-using-lm393-and-arduino-uno-556c6a.md

ในโปรเจคนี้ เราจะมาสร้าง วงจรควบคุมไฟอัตโนมัติแบบง่ายๆ ด้วย LDR กัน วงจรนี้โคตรง่ายเลยน้อง ใช้แค่โมดูลเซนเซอร์ LDR กับ Arduino UNO เท่านั้นเอง เราใช้หลอด LED เป็นเอาต์พุต ตัวอย่างการใช้งานก็เช่น ควบคุมไฟถนน, ควบคุมไฟในบ้าน/ออฟฟิศ, ทำตัวบ่งบอกกลางวันกลางคืน เป็นต้น

LDR คืออะไร?

โมดูลเซนเซอร์ LDR ใช้สำหรับตรวจจับความเข้มของแสง มันมีทั้งพินเอาต์พุตแบบอนาล็อก (AO) และแบบดิจิทัล (DO) บนบอร์ดเลย เมื่อมีแสงตกกระทบ ความต้านทานของ LDR จะลดลงตามความเข้มของแสง ยิ่งแสงแรงมาก ความต้านทานก็ยิ่งน้อยลง เซนเซอร์ตัวนี้มีปุ่มโพเทนชิโอมิเตอร์ให้ปรับเพื่อเปลี่ยนความไวของ LDR ต่อแสงได้ LDR หรือโฟโตเรซิสเตอร์พวกนี้ทำงานบนหลักการของ "โฟโตคอนดักทิวิตี" (Photo Conductivity) ครับ

ฮาร์ดแวร์ที่ตัดสินใจให้เรา: LM393 Comparator

โมดูลเซนเซอร์ Arduino ราคาถูกๆ ส่วนใหญ่ (เช่น เซนเซอร์เสียง, เซนเซอร์แสง, เซนเซอร์เปลวไฟ) มักมาบนแผ่นวงจรพิมพ์สีฟ้าหรือแดงเล็กๆ พร้อมกับชิปสีดำขาใหญ่ 8 ขาเด่นชัด นั่นแหละคือ LM393 Voltage Comparator การเข้าใจว่ามันทำอะไรคือก้าวสำคัญในการอัพเลเวลการออกแบบฮาร์ดแวร์เลยนะ

ตัวเปรียบเทียบทำงานยังไง?

ลองใช้ LDR (เซนเซอร์แสง) เป็นตัวอย่าง LDR จะสร้างแรงดันอนาล็อกระหว่าง 0V ถึง 5V การอ่านค่าอนาล็อกผ่าน analogRead() ใช้เวลาประมวลผล บางครั้งเราก็แค่อยากได้สัญญาณ "ใช่/ไม่ใช่" แบบเร็วๆ ว่ามันมืดหรือยัง

  1. ชิป LM393 มีอินพุตสองขา: อินพุต A (จาก LDR) และ อินพุต B (จากโพเทนชิโอมิเตอร์สีฟ้าบนโมดูล)
  2. เราใช้ไขควงหมุนปุ่มโพเทนชิโอมิเตอร์สีฟ้า เพื่อตั้งค่าแรงดันขีดเริ่มต้น (Threshold) ด้วยมือ (เช่น 2.5V)
  3. ทันทีที่ห้องมืดจนค่าจาก LDR ข้ามขีด 2.5V ไป ชิป LM393 จะตัดสินใจทันทีและดึงเอาต์พุตพินจาก LOW ไป HIGH ภายในเวลาไม่กี่นาโนวินาที! (เร็วมาก)

ฝั่ง Arduino

เพราะว่า LM393 เป็นคนทำงานหนักให้แล้ว โค้ด Arduino ของเราก็เลยง่ายและเร็วโคตรๆ:

if (digitalRead(sensorPin) == HIGH) { // LM393 ทำงานแล้วว!
  digitalWrite(alarmBuzzer, HIGH);
}

เราไม่ต้องคำนวณค่าอนาล็อกอะไรให้ยุ่งยาก แค่อ่านค่าจากพินดิจิทัลธรรมดา

ตัวอย่างโมดูลอื่นๆ

เราสามารถทดสอบตรรกะของ LM393 ได้ด้วยโมดูลมาตรฐานเกือบทุกตัวใน "คิท" Arduino:

  • บอร์ดเซนเซอร์เสียง (Sound Sensor Board)
  • บอร์ดหลบหลีกสิ่งกีดขวางด้วยอินฟราเรด (IR Obstacle Avoidance Board)
  • บอร์ดเซนเซอร์ความชื้นในดิน (Moisture Sensor Board) ทั้งหมดนี้ใช้ LM393 เพื่อให้เราสามารถปรับ "ขีดเริ่มต้นการทำงาน" ได้ผ่านปุ่มหมุนสีฟ้านั่นแหละ! จัดไปวัยรุ่น

ทำไมต้องทำ?

เป้าหมายหลักของการควบคุมไฟก็คือ ประหยัดไฟไงล่ะ น้องคงเคยเห็นไฟถนนที่เปิดอัตโนมัติตอนกลางคืนและปิดตอนเช้าหรือกลางวันใช่มั้ย มันมีเซ็นเซอร์ที่ตรวจจับแสงและควบคุมไฟตามนั้นแหละ ไฟถนนแบบนี้เป็นโปรเจกต์สำคัญในเมืองอัจฉริยะ (Smart City) น้องก็เอาไปประยุกต์ใช้กับระบบอัตโนมัติในบ้านหรือออฟฟิศได้เหมือนกัน

เจ้า LDR (Light Dependent Resistor) เนี่ย มันตรวจจับแสงได้เหมือนดวงตาของเราเลย มันจะสั่งให้ไฟปิดอัตโนมัติเมื่อมีแสงแดดตกกระทบ (เช่น ตอนเช้า) และจะสั่งให้ไฟเปิดเมื่อแสงรอบข้างหายไปหรือมีน้อยลง

ทำยังไง?

ทีนี้เรามาดูกันดีกว่าว่าจะทำให้มันเกิดขึ้นได้ยังไง

ขั้นแรกสุดเลยคือ ไปหาอุปกรณ์มาก่อน อุปกรณ์ที่ต้องใช้มีดังนี้: เซ็นเซอร์ LDR(1), Arduino UNO(1), LED(1), ตัวต้านทาน 221 โอห์ม(1) [จะใช้อันอื่นก็ได้ตามสะดวก] , สายจัมเปอร์(1), บอร์ดทดลอง(1). เราไม่ได้พูดถึงแหล่งจ่ายไฟเพิ่มเติม เพราะเราสามารถใช้ไฟ 5V จากพอร์ต USB ของคอมได้เลย เวลาเอาไว้อัปโหลดโค้ดลงไมโครคอนโทรลเลอร์ หรือถ้าจะให้สะดวกก็ใช้แบตเตอรี่แทนการพึ่งพา USB ก็ได้

รวบรวมอุปกรณ์ครบแล้ว ก็มาจัดวงจรตามนี้เลย

ในส่วนอินพุตของวงจร โมดูลเซ็นเซอร์ LDR จะมีขาออกทั้งแบบอนาล็อกและดิจิทัล ระบุว่า AO กับ DO ตามลำดับบนบอร์ด และมีขา VCC กับ GND ด้วย ต่อ VCC เข้ากับ 5V และ GND เข้ากับ GND บนบอร์ด Arduino ให้เรียบร้อย ขา DO ให้ต่อเป็นอินพุตเข้า Arduino ผ่านขา Digital I/O ใดก็ได้ (ในที่นี้เราใช้ขาที่ 8) ถ้าน้องอยากรู้ค่าความเข้มแสงแบบอนาล็อก ขา AO ก็ให้ต่อเป็นอินพุตผ่านขาอนาล็อกอินพุตของ Arduino (แต่ในตัวอย่างนี้เราไม่ใช้ส่วนนี้)

ส่วนเอาต์พุตของวงจร ให้นำขาสั้นของ LED ต่อลง GND (กราวด์) และต่อขาบวกเข้า Digital Pin '9' ตามโค้ดที่เราใช้ น้องจะใช้ Digital Pin อื่นก็ได้ แต่ต้องเปลี่ยนเลข '9' ในโค้ดให้ตรงกันด้วยนะ อย่าลืมใส่ตัวต้านทานระหว่างขาบวกของ LED กับขาดิจิทัลเอาต์พุตของ Arduino ด้วย เดี๋ยว LED จะไหม้เพราะแรงดันสูงล่ะ จำไว้ ตัวต้านทานต่อทางไหนก็ได้ ใช้บอร์ดทดลองและสายจัมเปอร์ช่วยต่อให้เรียบร้อย

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

ถ้าอยากดูค่าดิจิทัลเอาต์พุตจากเซ็นเซอร์ LDR ให้เปิด Serial Monitor ตามนี้

Tools->Serial Monitor

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x Arduino IDE"
author: "kiranpaul"
category: "Basic Electronics"
components:
  - "1x Jumper wires (generic)"
  - "1x Breadboard (generic)"
  - "1x LED (generic)"
  - "1x Resistor 221 ohm"
  - "1x Arduino UNO"
  - "1x LM393 Light-Dependent Resistor (LDR)"
description: "มาเล่นกับเซนเซอร์วัดแสง LDR กัน! โปรเจคนี้ใช้ Arduino UNO ควบคุมให้ไฟเปิด-ปิดเองอัตโนมัติตามความมืดสว่าง ใช้ Module LM393 ตรวจจับแสง รับรองว่าตึงๆ วัยรุ่นทำตามได้ไม่ยาก!"
difficulty: "Easy"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX190OggCaeZgeFWaOTTx0Ef0b4zs1bCP1l7+ceq3yFF5bkPf3RDuloBbLZCvxVNOW4EMnM8wvCsdbFQVl0Dm6iLa4pF0tEvD0OE="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/light-magic-using-lm393-and-arduino-uno-556c6a_cover.jpg"
lang: "en"
likes: 6
passwordHash: "b85683e875c6313e8050a01c7a789f94e544abd84f52d5842cd34566c2a59378"
price: 870
seoDescription: "Build an automatic light control system using LDR sensor module and Arduino UNO. A simple DIY project for electronics beginners."
tags:
  - "lights"
  - "ldr"
  - "home automation"
  - "sensor"
title: "Light Magic: เปิดปิดไฟอัตโนมัติด้วย LM393 กับ Arduino UNO งานง่ายแต่หล่อ!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/F1M4l-ehOoY"
views: 43066