Arduino đèn LED RGB

Trong bài hướng dẫn này, chúng ta sẽ học:

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×RGB LED
1×(Hoặc) RGB LED Module
1×breadboard
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về LED RGB

Đèn LED RGB có thể phát ra bất kỳ màu sắc nào bằng cách pha trộn 3 màu cơ bản là đỏ, xanh lá cây và xanh dương. Thực tế, nó gồm 3 đèn LED riêng biệt có màu đỏ, xanh lá cây và xanh dương được ghép lại trong một vỏ duy nhất.

Bản đồ chân

Đèn LED RGB có bốn chân:

  • Chân chung (Cathode-): cần được kết nối với GND (0V)
  • R (đỏ): chân được dùng để điều khiển màu đỏ
  • G (xanh lá): chân được dùng để điều khiển màu xanh lá
  • B (xanh dương): chân được dùng để điều khiển màu xanh dương
sơ đồ chân LED rgb

Để kết nối đèn LED RGB với Arduino, chúng ta cần sử dụng các điện trở hạn dòng. Việc này có thể làm cho việc đi dây trở nên phức tạp. May mắn thay, chúng ta có thể sử dụng mô-đun LED RGB, vốn đã có sẵn các điện trở hạn dòng được tích hợp.

Mô-đun LED RGB cũng bao gồm bốn chân:

  • Chân chung (Cathode-): cần được kết nối với GND (0V)
  • R (đỏ): chân được dùng để điều khiển màu đỏ
  • G (xanh lá): chân được dùng để điều khiển màu xanh lá
  • B (xanh dương): chân được dùng để điều khiển màu xanh
sơ đồ chân của mô-đun LED rgb

※ Lưu ý:

Chân chung có thể là âm cực hoặc dương cực, tùy thuộc vào loại LED RGB. Hướng dẫn này sử dụng một LED RGB có cực âm chung.

Cách hoạt động

Trong lĩnh vực vật lý, một màu được tạo thành từ ba giá trị màu: Đỏ (R), Xanh lục (G) và Xanh lam (B). Mỗi giá trị màu nằm trong khoảng từ 0 đến 255.

Sự pha trộn của ba giá trị tạo ra tổng cộng 256 × 256 × 256 màu.

Nếu chúng ta cấp tín hiệu PWM (với chu kỳ làm việc từ 0 đến 255) cho các chân R, G, B, chúng ta có thể khiến đèn LED RGB hiển thị bất kỳ màu nào mà chúng ta muốn.

Tỷ lệ đóng/mở của tín hiệu PWM đến các chân R, G và B tương ứng với các giá trị màu của Đỏ (R), Xanh lục (G) và Xanh dương (B).

Sơ đồ đấu dây

  • Sơ đồ đấu nối giữa Arduino và LED RGB
sơ đồ nối dây LED rgb Arduino

This image is created using Fritzing. Click to enlarge image

  • Sơ đồ nối giữa Arduino và mô-đun LED RGB
sơ đồ nối dây của mô-đun LED rgb Arduino

This image is created using Fritzing. Click to enlarge image

Cách điều khiển LED RGB

Hãy học cách điều khiển LED GRB từng bước để có được bất kỳ màu sắc nào, ví dụ #00979D:

  • Xác định màu bạn muốn hiển thị và lấy mã màu của nó. Gợi ý:
    • Bạn có thể lấy mã màu bạn muốn từ bộ chọn màu
    • Nếu bạn muốn dùng màu trong một hình ảnh, hãy dùng công cụ trực tuyến Colors From Image
  • Chuyển đổi mã màu sang các giá trị R, G, B bằng công cụ từ W3Schools. Ghi chú các giá trị này. Trong trường hợp này: R = 0, G = 151, B = 157
bộ chọn màu LED rgb
  • Xác định các chân Arduino kết nối với các chân R, G và B. Ví dụ:
const int PIN_RED = 5; const int PIN_GREEN = 6; const int PIN_BLUE = 9;
  • Cấu hình các chân Arduino này ở chế độ đầu ra
pinMode(PIN_RED, OUTPUT); pinMode(PIN_GREEN, OUTPUT); pinMode(PIN_BLUE, OUTPUT);
  • Điều khiển LED phát ra màu đó (#00979D → R = 0, G = 151, B = 157)
analogWrite(PIN_RED, 0); analogWrite(PIN_GREEN, 151); analogWrite(PIN_BLUE, 157);

Arduino - Mã ví dụ LED RGB

Đoạn mã dưới đây thay đổi màu LED theo trình tự các màu sau:

  • #00C9CC (Đỏ = 0, Xanh lá = 201, Xanh lam = 204)
  • #F7788A (Đỏ = 247, Xanh lá = 120, Xanh lam = 138)
  • #34A853 (Đỏ = 52, Xanh lá = 168, Xanh lam = 83)
/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-rgb-led */ const int PIN_RED = 5; const int PIN_GREEN = 6; const int PIN_BLUE = 9; void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_GREEN, OUTPUT); pinMode(PIN_BLUE, OUTPUT); } void loop() { // color code #00C9CC (R = 0, G = 201, B = 204) analogWrite(PIN_RED, 0); analogWrite(PIN_GREEN, 201); analogWrite(PIN_BLUE, 204); delay(1000); // keep the color 1 second // color code #F7788A (R = 247, G = 120, B = 138) analogWrite(PIN_RED, 247); analogWrite(PIN_GREEN, 120); analogWrite(PIN_BLUE, 138); delay(1000); // keep the color 1 second // color code #34A853 (R = 52, G = 168, B = 83) analogWrite(PIN_RED, 52); analogWrite(PIN_GREEN, 168); analogWrite(PIN_BLUE, 83); delay(1000); // keep the color 1 second }

Khi sử dụng nhiều màu sắc, chúng ta có thể rút ngắn mã bằng cách tạo một hàm:

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-rgb-led */ const int PIN_RED = 5; const int PIN_GREEN = 6; const int PIN_BLUE = 9; void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_GREEN, OUTPUT); pinMode(PIN_BLUE, OUTPUT); } void loop() { // color code #00C9CC (R = 0, G = 201, B = 204) setColor(0, 201, 204); delay(1000); // keep the color 1 second // color code #F7788A (R = 247, G = 120, B = 138) setColor(247, 120, 138); delay(1000); // keep the color 1 second // color code #34A853 (R = 52, G = 168, B = 83) setColor(52, 168, 83); delay(1000); // keep the color 1 second } void setColor(int R, int G, int B) { analogWrite(PIN_RED, R); analogWrite(PIN_GREEN, G); analogWrite(PIN_BLUE, B); }

Kiến thức bổ sung

  • Đối với đèn LED RGB có cực dương chung (Anode), bạn cần:
    • Kết nối chân chung với 3.3V của Arduino.
    • Thay đổi các giá trị R, G và B trong hàm analogWrite() thành 255 - R, 255 - G và 255 - B, tương ứng.
  • Một chuỗi các đèn LED RGB được kết nối với nhau tạo thành dải LED RGB. Dải LED có thể được phân loại thành dải LED có thể điều khiển theo địa chỉ và dải LED không thể điều khiển theo địa chỉ. Chúng ta sẽ làm các bài hướng dẫn cho từng loại dải LED.

※ Lưu ý:

Tránh dùng một điện trở duy nhất ở chân chung của LED RGB thay vì ba điện trở ở các chân còn lại.

Như chúng ta đã biết, ba LED trong một gói RGB duy nhất được nối song song. Trong điều kiện lý tưởng, việc sử dụng một điện trở ở chân chung là được. Tuy nhiên, trong thực tế, không nên làm vậy. Đó là bởi vì LED ngoài đời thực không có đặc tính giống nhau. Ba LED trong gói RGB không giống hệt nhau; các điện trở của các LED khác nhau; dòng điện được phân phối không đều cho từng LED; độ sáng không đồng đều và điều này có thể làm hỏng một LED, và sau đó làm hỏng các LED khác.