การใช้งาน PWM กับ LED: ความรู้พื้นฐานและตัวอย่างโค้ด

การใช้งาน PWM กับ LED: ความรู้พื้นฐานและตัวอย่างโค้ด

PWM คืออะไร?

PWM (Pulse Width Modulation) หรือการมอดูเลตความกว้างของพัลส์ เป็นเทคนิคที่ใช้ในการควบคุมพลังงานที่ส่งไปยังอุปกรณ์ไฟฟ้า เช่น LED โดยการปรับความกว้างของสัญญาณพัลส์ (Duty Cycle) ในช่วงเวลาหนึ่ง สัญญาณ PWM จะเป็นสัญญาณดิจิทัลที่มีสถานะ “เปิด” (HIGH) และ “ปิด” (LOW) สลับกันไป ความกว้างของช่วง “เปิด” เมื่อเทียบกับรอบทั้งหมด (เรียกว่า Duty Cycle) จะกำหนดปริมาณพลังงานที่ส่งไปยัง LED ทำให้สามารถควบคุมความสว่างได้อย่างละเอียด โดยที่ตาคนมองไม่เห็นการกระพริบหากความถี่สูงพอ (เช่น 5000 Hz)

สำหรับ LED การใช้ PWM จะช่วยให้ปรับความสว่างได้ตั้งแต่ 0% (ปิดสนิท) ถึง 100% (สว่างเต็มที่) โดยไม่ต้องใช้ตัวต้านทานเพิ่มเติม ซึ่งเหมาะกับการใช้งานบนไมโครคอนโทรลเลอร์

ตัวอย่างโค้ด: ควบคุมความสว่าง LED ด้วย PWM

โค้ดด้านล่างนี้เป็นตัวอย่างการใช้งาน PWM เพื่อควบคุม LED ให้ค่อยๆ สว่างขึ้นและหรี่ลง

const int ledPin = 2;        // กำหนดตัวแปรสำหรับพิน LED เป็น GPIO2
const int pwmFrequency = 5000; // ความถี่ของ PWM (หน่วย Hz)
const int pwmChannel = 0;    // ช่อง PWM (0-15 ใน ESP32)
const int pwmResolution = 8; // ความละเอียดของ PWM (8-bit = 0-255)

void setup() {
  // ตั้งค่า LED pin เป็น OUTPUT
  pinMode(ledPin, OUTPUT);
  // ตั้งค่าช่อง PWM ด้วยความถี่และความละเอียด
  ledcSetup(pwmChannel, pwmFrequency, pwmResolution);
  // เชื่อมต่อพิน LED เข้ากับช่อง PWM
  ledcAttachPin(ledPin, pwmChannel);
}

void loop() {
  // เพิ่มความสว่าง LED จาก 0 ถึง 255
  for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle++) { ledcWrite(pwmChannel, dutyCycle); // กำหนดค่า Duty Cycle delay(10); // รอ 10 มิลลิวินาที } // ลดความสว่าง LED จาก 255 ถึง 0 for (int dutyCycle = 255; dutyCycle >= 0; dutyCycle--) {
    ledcWrite(pwmChannel, dutyCycle); // กำหนดค่า Duty Cycle
    delay(10);                       // รอ 10 มิลลิวินาที
  }
}

อธิบายโค้ด

1.กำหนดตัวแปร:

    • ledPin: พินที่เชื่อมต่อกับ LED (ในที่นี้คือ GPIO2)
    • pwmFrequency: ความถี่ PWM ตั้งไว้ที่ 5000 Hz เพื่อให้ตาไม่เห็นการกระพริบ
    • pwmChannel: ช่อง PWM (ESP32 รองรับหลายช่อง)
    • pwmResolution: ความละเอียด 8-bit (0-255)

 

2.ฟังก์ชัน setup():

    • ตั้งค่าพิน LED เป็นเอาต์พุต
    • ตั้งค่าช่อง PWM และเชื่อมต่อกับพิน LED

 

3.ฟังก์ชัน loop():

    • ใช้ลูป for เพื่อเพิ่มและลดค่า Duty Cycle (0-255) ซึ่งควบคุมความสว่างของ LED
    • ledcWrite(): ส่งค่า PWM ไปยังช่องที่กำหนด
    • delay(10): หน่วงเวลา 10 มิลลิวินาที เพื่อให้เห็นการเปลี่ยนแปลงความสว่างแบบค่อยเป็นค่อยไป

การประยุกต์ใช้ PWM กับ LED

PWM ไม่ได้จำกัดแค่การควบคุมความสว่าง LED เท่านั้น แต่ยังสามารถนำไปประยุกต์ใช้ในงานต่างๆ ได้ เช่น:

    1. ไฟตกแต่งอัจฉริยะ: ใช้ PWM ควบคุม LED RGB เพื่อเปลี่ยนสีและความสว่างตามอารมณ์หรือสถานการณ์ เช่น ไฟในห้องนอนที่ค่อยๆ สว่างขึ้นตอนเช้า
    1. ระบบไฟรถยนต์: ปรับความสว่างของไฟหน้า หรือไฟเลี้ยวแบบกระพริบที่นุ่มนวลขึ้น
    1. เซ็นเซอร์ควบคุมแสง: เชื่อมต่อ PWM กับเซ็นเซอร์วัดแสง (LDR) เพื่อปรับความสว่าง LED อัตโนมัติตามแสงสว่างรอบข้าง
    1. งานศิลปะดิจิทัล: ใช้ PWM สร้างเอฟเฟกต์แสงแบบเคลื่อนไหวในงานศิลปะหรือป้ายโฆษณา
    1. มอเตอร์และพัดลม: นอกจาก LED แล้ว PWM ยังใช้ควบคุมความเร็วของมอเตอร์ได้ ซึ่งสามารถประยุกต์ใช้ร่วมกับระบบที่มี LED แสดงสถานะ
BESTการใช้งาน PWM กับ LED: ความรู้พื้นฐานและตัวอย่างโค้ด

Related Posts