กลับไปหน้ารวมไฟล์
3-pins-30-rgb-leds-4-shift-registers-74hc595-a4cdb4.md

บทความนี้เป็นการต่อยอดจากบทความก่อนหน้าเรื่อง 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 ได้


รายการอุปกรณ์และลิงก์ที่เกี่ยวข้อง


ติดตามผลงานอื่นๆ ได้ที่


เจาะลึกทางวิศวกรรม: 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 เท่าเดิม

Pin Definitions

ความเข้าใจเรื่อง 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 ช่องสัญญาณ)

1st SR Set Wiring Phase เริ่มต้นการวางไอซี Shift Register ชุดแรก และเชื่อมต่อสายสัญญาณพื้นฐาน (VCC, GND, Latch, Clock, Data)

Resistors Added การเพิ่มตัวต้านทาน (Resistors) เป็นสิ่งสำคัญมาก เพื่อจำกัดกระแสไม่ให้ไหลผ่าน LED และไอซีมากเกินไป ซึ่งอาจทำให้อุปกรณ์เสียหายได้ ในโปรเจคนี้ควรใช้ตัวต้านทานขนาด 220-330 โอห์ม

1st Set of LEDs การติดตั้ง RGB LED ชุดแรกเข้ากับระบบ

2nd Set of SRs การขยายระบบด้วย Shift Register ชุดที่สอง โดยการต่อขา Q7' (Serial Out) ของตัวแรก เข้ากับขา DS (Serial Data In) ของตัวถัดไป

2nd SR Set Wiring Phase 2nd SR Set Wiring Phase 2nd SR Set Wiring Phase 2nd SR Set Wiring Phase ภาพรวมการเดินสายจัมเปอร์ที่ซับซ้อนขึ้นเมื่อมีการเพิ่มจำนวน 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 เบื้องต้น:

  1. Initialization: กำหนดจำนวนไอซี Shift Register และค่าความสว่างสูงสุด
  2. SPI Communication: ไลบรารีจะทำการส่งข้อมูลผ่าน SPI ไปยังไอซีแบบเบื้องหลัง (Background process)
  3. Color Mapping: เมื่อเราสั่ง ShiftPWM.setRGB(led_number, r, g, b), ไลบรารีจะคำนวณว่าค่าสีนั้นต้องไปอยู่ที่บิตไหนของไอซีตัวที่เท่าไหร่ และส่งข้อมูลออกไปอย่างแม่นยำ

วิดีโอสาธิตการทำงาน

ชมผลลัพธ์ของการผสมสีและการทำ Effects ต่างๆ ผ่าน Shift Register และ RGB LED ได้ที่วิดีโอด้านล่างนี้:

Video Is Up!

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

HeathenHacks YouTube ติดตามความรู้ทางวิศวกรรมเพิ่มเติมได้ที่ YouTube @HeathenHacks

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

title: "3 Pins, 30 RGB LEDs, 4 Shift Registers [74HC595]"
description: "Arduino project #12 follow-up video. Now using common anode RGB LEDs."
author: "Heathen_Hacks-v2"
category: "Lights & LEDs"
tags:
  - "shift registers"
  - "daisychaining"
views: 13283
likes: 3
price: 2450
difficulty: "Easy"
components:
  - "1x Jumper wires (generic)"
  - "90x Resistor 221 ohm"
  - "30x RGB Diffused Common Anode"
  - "12x Shift Register- Serial to Parallel"
  - "1x Arduino Nano R3"
  - "1x Solderless Breadboard Full Size"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://github.com/elcojacobs/ShiftPWM"
documentationLinks: []
passwordHash: "5d31cb2c102a19066066b08dfca0da79f82d22fd106f9aa91ec7b27d290e065a"
encryptedPayload: "U2FsdGVkX1910v8qhCsVw/dHiGyleMb4RZDodIuVP+ZcWutLhj1eNCewhQMfO6LfvemQ+M20LgUzEXrEl1xBkverKL/HVD3a3gccJeJYx4M="
seoDescription: "Control 30 RGB LEDs with 3 Pins and 4 Shift Registers [74HC595]. Arduino project #12 follow-up featuring common anode RGB LEDs."
videoLinks:
  - "https://www.youtube.com/embed/_Be6fo5NSzc"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/3-pins-30-rgb-leds-4-shift-registers-74hc595-a4cdb4_cover.jpg"
lang: "en"