Professional Documents
Culture Documents
Bai11 RGB Led
Bai11 RGB Led
1. Mục đích
Biết cách ứng dụng xung PWM trong việc phát xung điều khiển led RGB
Giới thiệu về led RGB:
Khác với LED bình thường, led RGB có 4 chân, trong đó có 1 chân dương chung và 3
chân âm riêng cho từng màu (R - red - đỏ, G - Green - Xanh lá, B - Blue - Xanh dương). LED
RGB thực chất là 3 con diode led bình thường dính chụm thành 1 khối mà thôi (vì độ sáng
của LED RGB khá sáng cộng với hiệu ứng lưu ảnh của mắt người mà mình thấy được các
màu sắc khác nhau). Để thay màu sắc của LED RGB, ta chỉ việc thay đổi độ sáng của từng
con diode (led) trong con led rgb. Để thay đổi độ sáng của một con LED ta chỉ việc điều
chỉnh điện áp xuất ra con LED, mà để điều chỉnh điện áp xuất ra con LED ta sẽ dùng xung
PWM.
2. Sơ đồ nguyên lí
Để cho các bạn dễ hiểu, trong phần sơ đồ nguyên lí mình sẽ sử dụng 3 LED thay cho
LED RGB, về bản chất thì chúng giống nhau.
Hình 2: Sơ đồ nguyên lí
3. Sơ đồ lắp ráp
Hình 3: LED RGB
{
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
}
void loop()
{
// Gọi hàm displayAllBasicColors để thể hiện toàn bộ các màu
cơ bản !
displayAllBasicColors();
// Gọi hàm showSpectrum để chạy hiệu ứng cầu vồng.
showSpectrum();
}
delay(DELAY_TIME);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
delay(DELAY_TIME);
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
delay(DELAY_TIME);
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
delay(DELAY_TIME);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
delay(DELAY_TIME);
// Xanh lam (Cyan) bằng cách bật led xanh lá và xanh dương
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
delay(DELAY_TIME);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
delay(DELAY_TIME);
// Màu trắng (tất cả các led)
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
delay(DELAY_TIME);
}
void showSpectrum()
{
// gồm có 4 mốc
// 0 = đỏ chét (đỏ 100%)
// 255 = xanh lục 100%
// 511 = xanh dương (100%)
// 767 = lại là đỏ chét
// Những con số nằm giữa các màu sẽ được tính toán theo công thức
bên dưới (đọc dễ hiểu mà) để ra được các màu cần thiết
void showRGB(int color)
{
int redPWM;
int greenPWM;
int bluePWM;
analogWrite(RED_PIN, redPWM);
analogWrite(BLUE_PIN, bluePWM);
analogWrite(GREEN_PIN, greenPWM);
}
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
delay(DELAY_TIME);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
delay(DELAY_TIME);
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
delay(DELAY_TIME);
// Chỉ bật led xanh dương
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
delay(DELAY_TIME);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
delay(DELAY_TIME);
// Xanh lam (Cyan) bằng cách bật led xanh lá và xanh dương
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
delay(DELAY_TIME);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
delay(DELAY_TIME);
// Màu trắng (tất cả các led)
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
delay(DELAY_TIME);
}
LED RGB có một ứng dụng được rất nhiều người yêu thích đó là sử dụng để tạo hiệu ứng
LED cầu vòng, ở đây tôi sẽ sử dụng hàm showSpectrum(); để tạo hiệu ứng LED cầu vòng cơ
bản bằng việc điều khiển xung PWM và hiệu ứng trộn màu để tạo ra được nhiều màu sắc
khác nhau:
void showSpectrum()
{
Chúng ta sẽ cài đặt hàm showRGB( int color) để mỗi khi nhận một giá trị từ 0-767 nó sẽ
chuyển dần dần các màu của led RGB thành dỏ - cam – vàng – lục – lam – chàm – tím, chúng
ta sẽ chia nó thành 3 phân vùng để tiện cho các bạn hiểu:
void showRGB(int color)
{
int redPWM;
int greenPWM;
int bluePWM;
analogWrite(RED_PIN, redPWM);
analogWrite(BLUE_PIN, bluePWM);
analogWrite(GREEN_PIN, greenPWM);
}