บทความนี้เป็นการต่อยอดจากบทความก่อนหน้าเรื่อง 3 pins, 32 LEDs, 4 Shift Registers 74HC595 โดยในครั้งนี้เราจะยกระดับจากการใช้ LED 5mm สีเดียวแบบธรรมดา มาเป็นการควบคุม Common Anode RGB LEDs (LED สามสีแบบขั้วบวกเด็กร่วม) แทน เพื่อสร้างสรรค์สีสันที่หลากหลายและซับซ้อนยิ่งขึ้น
แม้ว่าการเชื่อมต่อพื้นฐานจะยังคงคล้ายเดิม แต่การใช้ RGB LED จะมีความท้าทายเพิ่มขึ้นในเรื่องของการจัดการพื้นที่บน Breadboard สายจัมเปอร์ที่มากขึ้น และความต้องการตัวต้านทาน (Resistors) ที่เพิ่มขึ้นเป็นสามเท่าตามจำนวนขาของสี (แดง, เขียว, น้ำเงิน)
นอกจากนี้ เราจะนำ ShiftPWM Library เข้ามาช่วยในการจัดการสัญญาณ PWM (Pulse Width Modulation) เพื่อให้เราสามารถผสมสีและปรับความสว่างของ RGB LED ได้อย่างอิสระผ่านไอซี Shift Register ซึ่งโดยปกติแล้วจะไม่สามารถทำ PWM แบบ Hardwired ได้
รายการอุปกรณ์และลิงก์ที่เกี่ยวข้อง
- ShiftPWM Library: Github Link (หัวใจสำคัญในการทำ Software PWM)
- SPI Definition: ความรู้พื้นฐานเกี่ยวกับ SPI
- Datasheet: SN74HC595 Datasheet
- Deep Dive IC: ข้อมูลเชิงลึกเกี่ยวกับ 74HC595
ติดตามผลงานอื่นๆ ได้ที่
เจาะลึกทางวิศวกรรม: 74HC595 และ Common Anode RGB LED
ในการควบคุม RGB LED หลายดวง ปัญหาใหญ่คือ "จำนวนขา (Pins)" ของไมโครคอนโทรลเลอร์ไม่เพียงพอ เนื่องจาก RGB LED 1 ดวงต้องการขาควบคุมถึง 3 ขา (R, G, B) หากเรามี LED 8 ดวง เราต้องใช้ถึง 24 ขา!
74HC595 (Shift Register) คือทางออกของปัญหานี้ มันคือไอซีแบบ Serial-in Parallel-out (SIPO) ที่รับข้อมูลแบบอนุกรมผ่านสายสัญญาณเพียงไม่กี่เส้น แล้วส่งออกเป็นสัญญาณดิจิทัลแบบขนาน 8 ช่องทาง และที่สำคัญคือเราสามารถนำมันมาต่อพ่วงกันแบบ Daisy Chain เพื่อขยายจำนวนขาออกไปได้ไม่จำกัดโดยใช้สายสัญญาณจาก Arduino เท่าเดิม

ความเข้าใจเรื่อง Common Anode (ขั้วบวกร่วม)
RGB LED ที่เราใช้ในโปรเจคนี้เป็นแบบ Common Anode หมายความว่าขาที่ยาวที่สุด (Anode) จะต้องต่อเข้ากับแหล่งจ่ายไฟบวก (VCC/5V) เสมอ ส่วนขา R, G, B จะต้องได้รับสัญญาณ "LOW" (0V) จากไอซี 74HC595 เพื่อให้ครบวงจรและไฟติด
- Logic Inversion: ในการเขียนโปรแกรม หากต้องการให้ไฟติด เราต้องส่งค่า
0และหากต้องการให้ดับต้องส่งค่า1(หรือหากใช้ ShiftPWM Library ตัวไลบรารีจะจัดการเรื่องการแปลงค่าความสว่างให้เราเอง)
ขั้นตอนการประกอบวงจร (Wiring Phase)
การต่อวงจรจะแบ่งออกเป็นชุด เพื่อความเป็นระเบียบและป้องกันความสับสนของสายสัญญาณ เนื่องจากแต่ละไอซีจะควบคุมขาของ RGB LED ได้เพียง 2 ดวงกับอีก 2 ขา (เพราะ 1 ดวงใช้ 3 ช่องสัญญาณ)
เริ่มต้นการวางไอซี Shift Register ชุดแรก และเชื่อมต่อสายสัญญาณพื้นฐาน (VCC, GND, Latch, Clock, Data)
การเพิ่มตัวต้านทาน (Resistors) เป็นสิ่งสำคัญมาก เพื่อจำกัดกระแสไม่ให้ไหลผ่าน LED และไอซีมากเกินไป ซึ่งอาจทำให้อุปกรณ์เสียหายได้ ในโปรเจคนี้ควรใช้ตัวต้านทานขนาด 220-330 โอห์ม
การติดตั้ง RGB LED ชุดแรกเข้ากับระบบ
การขยายระบบด้วย Shift Register ชุดที่สอง โดยการต่อขา Q7' (Serial Out) ของตัวแรก เข้ากับขา DS (Serial Data In) ของตัวถัดไป
ภาพรวมการเดินสายจัมเปอร์ที่ซับซ้อนขึ้นเมื่อมีการเพิ่มจำนวน LED
การทำงานของ Software และ ShiftPWM Library
โปรเจคนี้มีความพิเศษตรงที่การใช้ SPI (Serial Peripheral Interface) ซึ่งเป็นโปรโตคอลการสื่อสารความเร็วสูงที่มีอยู่ใน Arduino (ขา 11 สำหรับ Data และขา 13 สำหรับ Clock บนบอร์ด Uno)
ทำไมต้องใช้ ShiftPWM?
โดยปกติ 74HC595 จะส่งสัญญาณได้แค่ ON หรือ OFF เท่านั้น แต่ ShiftPWM ใช้เทคนิคการรบกวนด้วย Interrupts ความถี่สูงเพื่อเปิด-ปิดขาเอาต์พุตด้วยความเร็วที่สายตามนุษย์มองไม่ทัน (Pulse Width Modulation) ทำให้เราสามารถกำหนดค่าความสว่างได้ตั้งแต่ 0-255 สำหรับแต่ละสีของ RGB LED
Code Logic เบื้องต้น:
- Initialization: กำหนดจำนวนไอซี Shift Register และค่าความสว่างสูงสุด
- SPI Communication: ไลบรารีจะทำการส่งข้อมูลผ่าน SPI ไปยังไอซีแบบเบื้องหลัง (Background process)
- Color Mapping: เมื่อเราสั่ง
ShiftPWM.setRGB(led_number, r, g, b), ไลบรารีจะคำนวณว่าค่าสีนั้นต้องไปอยู่ที่บิตไหนของไอซีตัวที่เท่าไหร่ และส่งข้อมูลออกไปอย่างแม่นยำ
วิดีโอสาธิตการทำงาน
ชมผลลัพธ์ของการผสมสีและการทำ Effects ต่างๆ ผ่าน Shift Register และ RGB LED ได้ที่วิดีโอด้านล่างนี้:


หากคุณต้องการสร้างโปรเจคที่มีแสงสีตระการตาแต่มีข้อจำกัดเรื่องจำนวนขาของ Arduino การใช้ Shift Register ร่วมกับ ShiftPWM คือคำตอบที่มีประสิทธิภาพและคุ้มค่าที่สุดครับ!
ติดตามความรู้ทางวิศวกรรมเพิ่มเติมได้ที่ YouTube @HeathenHacks