บทที่ 15: การเขียนโปรแกรมสั่งงาน LED RGB ด้วยสัญญาณ PWM

UTEN BOONLIAM Avatar
บทที่ 15 / 26

บทที่ 15: การเขียนโปรแกรมสั่งงาน LED RGB ด้วยสัญญาณ PWM

LED RGB คือหลอดแอลอีดีซึ่งภายในประกอบด้วย แอลอีดีสีแดง เขียว และน้ำเงินอยู่ภายในหลอดเดียวกัน โดยจะมีอยู่ด้วยกันสองแบบคือแบบ Common Anode (CA) ซึ่งจะใช้ไฟเลี้ยง VCC ร่วมกัน และแบบ Common Cathode (CC) ซึ่งจะใช้กราวนด์ร่วมกัน ดูได้จากรูปด้านล่าง

โดยปกติแล้วในการผสมสีเราจะใช้การขับกระแสแอลอีดีด้วยสัญญาณ PWM (Pulse Width Mod) ให้กับขา R G และ B โดยให้อัตราความกว้างของสัญญาณ PWM แตกต่างกันไปตามสีที่เราต้องการ ซึ่งดูได้จากตารางด้านล่าง

บอร์ด Arduino Learning Kit มี LED RGB ชนิด Common Cathode (CC) ติดตั้งอยู่บนบอร์ด โดยขาต่าง ๆที่เชื่อมต่อดูได้จากตารางด้านล่าง และในการใช้งานต้องทำการเลื่อนสวิตช์ DIP Switch ของ LED RGB ไปตำแหน่ง ON และ RS485 switch ไปตำแหน่ง OFF ทั้งนี้เพราะใช้ตำแหน่งขาร่วมกันระหว่าง LED RGB และ RS485

Red Green Blue
Arduino Uno 9 10 11
Arduino Nano 9 10 11
ESP32(ESP-WROM-32) 25 26 27

ตารางที่ 15. 2 ตำแหน่งขาที่ต่ออยู่กับ LED RGB

15.1. การเขียนโปรแกรมขับ LED RGB บน Arduino Uno

15.1.1. ทดลองเขียนโปรแกรมตาม sketch ตัวอย่างด้านล่าง จากนั้นทำการ upload โปรแกรมให้กับ Arduino แล้วดูการเปลี่ยนแปลงของ LED RGB

จากโปรแกรมตัวอย่าง คำสั่งที่สำคัญคือ analogWrite(pin,value) โดยค่า value จะมีค่าอยู่ในช่วง 0-255 (Resolution 8bits) เป็นคำสั่งที่ขับสัญญาณพัลส์ออกมาทางขา Analog ของ Arduino โดยความกว้างของสัญญาณพัลส์เมื่อการเทียบบัญญัติไตรยางศ์จะได้ค่าคือ

  • Value(0) = pwm(0%)

  • Value(127) = pwm(50%)

  • Value(255) = pwm(100%)

$$pwm(\%) = \frac{Value*100}{255}$$

$$Value = \frac{pwm(\%)*255}{100}$$

  1. การปรับปรุงโปรแกรมก่อนหน้านี้ โดยการทำให้แอลอีดีแต่ละสีค่อยๆ ติดสว่างและค่อยๆ ดับลง

 

  1. การเขียนโปรแกรมขับ LED RGB บน ESP32(ESP-WROM-32)

    1. สำหรับการเขียนโปรแกรมขับสัญญาณ PWM ของ ESP32 จะให้หลักการคล้ายกับ Arduino เพียงแต่คำสั่งและขั้นตอนการเรียกฟังก์ชันจะแตกต่างกันอยู่บ้าง

อธิบายการทำงานของโค้ด

  • บรรทัดที่ 1 – 3 เป็นการกำหนดขาที่ต่อกับขาแอลอีดี

  • บรรทัดที่ 4 – 6 เป็นการกำหนดแชนเนลให้กับแอลอีดีแต่ละสี

  • บรรทัดที่ 10 – 12 เป็นการจับคู่ระหว่างแชนเนลที่สร้างขึ้น กับขาของ ESP32

  • บรรทัดที่ 16 – 18 เป็นกำหนดค่าต่าง ๆให้แต่ละแชนเนล โดยกำหนดค่าความถี่และความละเอียด(resolution) ซึ่งในโค้ดกำหนดเป็น 12 kHz PWM, 8-bit resolution

  • ในฟังก์ชัน loop เป็นการเขียนโปรแกรมให้แอลอีดีแต่ละสีค่อย ๆติดสว่างและค่อย ๆดับลง ซึ่งทำงานเหมือนกับโค้ดก่อนหน้านี้

แบบฝึกหัดสำหรับทบทวนความเข้าใจ

  1. ให้เขียนโค้ดผสมสีแอลอีดี RGB โดยผสมให้เป็นสีต่าง ๆ ดังนี้ (ดูจากตารางค่าสีด้านบน)

    1. สีเหลือง (𝜆D = 580)

    2. สีม่วง (𝜆D = 400)

    3. สีส้ม (𝜆D = 600)

    4. สีฟ้า (𝜆D = 480 )

โดยให้แสดงสีละ 2 วินาทีแล้วเปลี่ยนเป็นสีต่อไป ทำวนซ้ำไปเรื่อย ๆ

 

 

 

  1. จากความรู้เรื่องการเขียนโปรแกรมอ่านค่าแรงดันจากตัวต้านทานปรับค่าได้ ให้เขียนโปรแกรมโดย

  • VR1 ปรับแสงของ LED R

  • VR2 ปรับแสงของ LED G

  • VR3 ปรับแสงของ LED B

และให้แสดงเป็นค่า PWM % ของแอลอีดีแต่ละสีทางหน้าจอ LCD16x2

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *