IoTLabs

Nghiên cứu, Sáng tạo và Thử nghiệm

Series 37 Module Cảm Biến – Nguyên Lý 7-Color LED Tự Đổi Màu: IC Tích Hợp, Tần Số Dao Động Nội & Ứng Dụng Trang Trí

7-Color LED (hay Auto-Flash RGB LED) trông giống LED thông thường nhưng bên trong có IC điều khiển tự động chuyển màu. Không cần MCU quản lý PWM hay sequence — chỉ cần cấp nguồn là nó tự chạy. Bài này giải thích cơ chế IC tích hợp, sự khác biệt giữa loại trong suốt và mờ, và khi nào nên dùng loại này thay vì RGB LED thông thường.

Nguyên Lý Hoạt Động

1. Bên Trong Vỏ LED — IC CMOS Tích Hợp

Nhìn ngoài giống LED 5mm thông thường, nhưng bên trong có cấu trúc phức tạp hơn:

Vỏ trong suốt / mờ (epoxy)
┌─────────────────────────────────┐
│                                 │
│    [Die đỏ]                     │ ← LED đỏ (GaAsP/AlGaInP)
│    [Die xanh lá]                │ ← LED xanh (InGaN)
│    [Die xanh dương]             │ ← LED xanh dương (InGaN)
│                                 │
│    [IC Controller CMOS]         │ ← IC điều khiển tích hợp
│    (oscillator + state machine) │
│                                 │
└─────────────────────────────────┘
      │            │
   Anode(+)     Cathode(-)

IC controller bên trong là mạch CMOS đơn giản, gồm:

  • Ring oscillator (bộ dao động vòng): tạo xung clock từ nguồn điện
  • Counter/State machine: đếm và chuyển đổi giữa các trạng thái R, G, B
  • Switching transistors: bật từng LED theo thứ tự

2. Chuỗi Chuyển Màu Tự Động

IC controller chuyển đổi theo chu kỳ cố định (tùy nhà sản xuất, thường ~1-3 giây/màu):

Chuỗi phổ biến (7 bước — gọi là "7 color"):

[Đỏ] → [Xanh lá] → [Xanh dương] → [Vàng R+G] → [Cyan G+B] → [Tím R+B] → [Trắng R+G+B] → [lặp]

Một số loại bổ sung fade in/out giữa các màu:
[Đỏ đậm] → [Đỏ nhạt dần] → [Xanh lá nhạt dần lên] → [Xanh đậm] → ...

Tần số dao động nội: Phụ thuộc điện áp cấp và capacitance nội bộ. Ở 3V: ~1.5 giây/màu. Ở 5V: ~1 giây/màu (nhanh hơn). Không điều chỉnh được.

3. Loại Trong Suốt vs Loại Mờ (Diffused)

Trong suốt (Clear)Mờ (Diffused)
Nhìn vào LEDThấy 3 die riêng biệtToàn vỏ phát sáng đều
Khi trộn màuThấy 3 điểm sáng R, G, B riêngMàu trộn đều mượt mà
Hiệu ứng vàng/cyan/trắngThấy 2-3 điểm sáng riêngMàu thứ cấp đẹp hơn
Ứng dụngQuan sát kỹ thuậtTrang trí, mood light

Khuyến nghị: Dùng loại mờ cho trang trí — màu trộn đẹp hơn nhiều. Loại trong suốt cho demo/giáo dục.

4. So Sánh Với RGB LED Thông Thường

7-Color Auto LEDRGB LED Thông Thường
Điều khiểnKhông cần MCUCần 3 chân PWM
Tùy chỉnh màuKhông (IC quyết định)Hoàn toàn (16.7M màu)
Tốc độ đổi màuCố định (IC nội)Theo lập trình
Số chân2 (Anode + Cathode)4 (R, G, B, Common)
Ứng dụngTrang trí đơn giảnĐiều khiển màu chính xác
GiáNhư nhauNhư nhau

Thông Số Kỹ Thuật

Thông sốGiá trị
Điện áp hoạt động3V – 5V
Dòng tiêu thụ~20mA
Tần số chuyển màu~1-3 giây/màu (tùy điện áp)
Số màu7 (R, G, B, Y, C, M, W)
Loại package5mm LED thông thường
Điện áp thuận~2V – 3.5V
Chân2 (Anode dài hơn, Cathode ngắn hơn)

Sơ Đồ Chân (Pinout)

7-Color LED — Nhìn từ đáy:

  Anode (+)   Cathode (-)
     │              │
     ← Dài hơn      ← Ngắn hơn
     
Hoặc:
     ← Bên cạnh flat edge là Cathode

Phân biệt Anode/Cathode: Như LED thường — chân dài = Anode, chân ngắn = Cathode. Hoặc nhìn flat edge nhỏ bên vỏ — phía flat = Cathode.

Module KY-034 (trong kit 37 module)

┌──────────────────────────┐
│   [7-Color LED]          │
│   [Điện trở hạn dòng]    │
└──────────────────────────┘
  GND   VCC   (không có S)

Chỉ 2 chân VCC và GND — cấp nguồn là tự chạy.

Kết Nối Phần Cứng

KY-034 với ESP32 DevKit V1

ESP32 DevKit V1           KY-034 Module
─────────────────────     ─────────────────
GPIO5 (Output) ────────→  VCC  ← Cấp nguồn qua GPIO để bật/tắt
GND  ─────────────────→  GND

Cấp nguồn qua GPIO5: khi GPIO5 = HIGH → LED tự đổi màu; LOW → tắt. Module đã có điện trở hạn dòng nên không cần thêm.

Lưu ý: Module KY-034 dùng điện trở tính cho 5V. Ở 3.3V, LED vẫn sáng nhưng hơi tối hơn và tốc độ chuyển màu có thể chậm hơn.

KY-034 với Arduino Uno

Arduino Uno               KY-034 Module
─────────────────────     ─────────────────
Pin 9 (OUTPUT) ────────→  VCC
GND  ─────────────────→  GND

Hoặc nối thẳng 5V nếu không cần điều khiển:

5V  ────────────────────→  VCC  (luôn sáng, không điều khiển)
GND ────────────────────→  GND

Code Arduino IDE

Code Bật Tắt LED Đơn Giản — Arduino Uno

/*
 * 7-Color LED KY-034 — Bật tắt qua GPIO
 * Board: Arduino Uno
 * Kết nối: VCC→Pin9, GND→GND
 *
 * LED tự chuyển màu khi bật — không cần code điều khiển màu
 * Chỉ cần bật/tắt nguồn
 */

const int LED_PIN = 9;

void setup() {
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW); // Tắt ban đầu
  Serial.println("=== 7-Color LED KY-034 ===");
}

void loop() {
  // Bật LED — tự đổi màu 10 giây
  Serial.println("LED BẬT — tự đổi màu...");
  digitalWrite(LED_PIN, HIGH);
  delay(10000);

  // Tắt 2 giây
  Serial.println("LED TẮT");
  digitalWrite(LED_PIN, LOW);
  delay(2000);
}

Code Hiệu Ứng Blink — Arduino Uno

/*
 * 7-Color LED — Hiệu ứng blink với tốc độ thay đổi
 * Board: Arduino Uno
 * Kết nối: VCC→Pin9, GND→GND
 */

const int LED_PIN = 9;

void setup() {
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
}

// Blink N lần với khoảng cách onMs và offMs
void blink(int times, int onMs, int offMs) {
  for (int i = 0; i < times; i++) {
    digitalWrite(LED_PIN, HIGH);
    delay(onMs);
    digitalWrite(LED_PIN, LOW);
    delay(offMs);
  }
}

void loop() {
  // Bật liên tục 5 giây — xem màu chuyển
  digitalWrite(LED_PIN, HIGH);
  delay(5000);

  // Blink nhanh 10 lần (SOS style)
  blink(10, 100, 100);

  // Blink chậm 3 lần
  blink(3, 800, 400);

  delay(1000);
}

Code ESP32 — Non-Blocking Blink

/*
 * 7-Color LED KY-034 — ESP32, non-blocking blink
 * Board: ESP32 DevKit V1
 * Kết nối: VCC→GPIO5, GND→GND
 */

const int LED_PIN = 5;

unsigned long lastToggleTime = 0;
bool ledState = false;
int blinkInterval = 500; // ms — thay đổi để điều chỉnh tốc độ blink

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  Serial.println("=== 7-Color LED ESP32 Non-Blocking ===");
}

void loop() {
  unsigned long now = millis();

  // Blink không dùng delay()
  if (now - lastToggleTime >= blinkInterval) {
    lastToggleTime = now;
    ledState = !ledState;
    digitalWrite(LED_PIN, ledState ? HIGH : LOW);

    if (ledState) {
      Serial.println("LED BẬT (tự đổi màu)");
    } else {
      Serial.println("LED TẮT");
    }
  }

  // MCU vẫn xử lý được các task khác ở đây
  // Ví dụ: đọc sensor, WiFi, MQTT...
}

Kết Quả Mong Đợi

=== 7-Color LED ESP32 Non-Blocking ===
LED BẬT (tự đổi màu)     ← LED bắt đầu đỏ, sau ~1-2s chuyển xanh...
LED TẮT
LED BẬT (tự đổi màu)
LED TẮT

Ứng Dụng Thực Tế

Ứng dụngChi tiết
Đèn trang trí đơn giảnCắm vào nguồn 3-5V, không cần MCU
Chỉ thị nguồn điện chạyThay LED đơn sắc bằng 7-color cho đẹp hơn
Đèn cảnh báo màu sắc nổi bậtThu hút chú ý hơn LED một màu
Demo IoT kit cho học sinhThêm màu sắc sinh động mà không cần code phức tạp

Lưu Ý Khi Sử Dụng

1. Không điều chỉnh được màu hay tốc độ

IC bên trong là fixed program — không có cách thay đổi sequence hoặc tốc độ từ bên ngoài. Nếu cần điều khiển màu → dùng RGB LED thông thường (KY-016/Bài 16).

2. GPIO phải đủ dòng khi dùng cấp nguồn

LED tiêu thụ ~20mA. GPIO Arduino Uno chịu được 40mA — OK. GPIO ESP32 chịu được 12mA — không đủ! Với ESP32: dùng transistor NPN hoặc MOSFET khi cấp nguồn qua GPIO. Hoặc nối VCC thẳng vào 3V3/5V và không điều khiển bật tắt.

3. Tốc độ chuyển màu thay đổi theo điện áp

3V: chậm hơn, màu hơi tối. 5V: nhanh hơn, sáng hơn. Không ảnh hưởng đến số màu hay thứ tự màu.

4. Không phải 7 màu riêng biệt rõ ràng ở mọi loại

Một số loại LED kém chất lượng chỉ có 3 màu (R, G, B) không có màu trộn. Loại tốt có đủ 7 màu rõ ràng. Dùng loại mờ (diffused) để màu trộn đẹp hơn.

Bài tiếp theo: