1. RGB LED
요즘 도시 거리를 지나다 보면, LCD 모니터가 아닌, 아주 작은 LED 들을 밀집 시켜서 화면을 만드는 방법이 유행하고 있습니다. LED 들의 집적도에 따라 LCD 와 거의 비슷한 느낌을 가지게 하는 화면들이 늘었습니다.
아래 사진은, 지하철 승강장 기둥 네 면을 모두 LED 스크린으로 도배하여 광고하는 장면을 찍어 봤습니다.
가까히 가면 이렇게 보입니다. 조밀한 LED Cell 이 빛을 내고 있네요.
대놓고 확대해 보면 아래 그림입니다. 한개의 LED 가 3원색을 내고 있고, 표현하고 싶은 dot 의 색을 결정합니다. PWM 까지 가능하면, 아마 모든 가시광선은 표현 가능할 듯 하네요.
아... PWM 의 bit 수에 따라 정해지겠네요. 워낙 잘 만들어져 있어 Analog 라고 생각하게 할 정도로 잘 되어 있습니다. 결국, LED 성능 보다 controller 의 처리 bit 에 성능이 갈릴 것 같습니다.
2. AliExpress
예상은 하고 있습니다만, 그래도 하나 구입 해서 동작 원리를 살펴 보기로 합니다. 알리익스프레스로 고고.
* 3 Colour RGB SMD LED Module 5050 full color Pwm tri-color LED For Arduino MCU
- https://www.aliexpress.com/item/1005001571167551.html
제품 설명은 다음과 같습니다.
Product Description
---------------------------
1. using 5050 full color LED
2. RGB trichromatic limiting resistor to prevent burnout
3. through the PWM adjusting three primary colors can be mixed to obtain different colors
4. with a variety of single-chip interface
5. Size 31 * 37.5 (mm)
6. based on a simple test program
제품 소개에 올라와 있는 사진 입니다.
잊을 만 하면 도착 할 줄 알았지만, 타이밍이 좋았는지 1주일 만에 도착.
3. 제원
5050 LED 와 케이블이 동봉되어 있습니다. 케이블은 RGB 신호용과 GND 네요.
R 단자에는 471 (470 ohm), G 와 B 단자에는 271 (270 ohm) pull down 저항이 달려 있습니다.
5050 LED chip 자체의 확대 사진입니다. 아주 조그마한 R/ G/ B chip 이 삼각형 모양으로 구성되어 있네요.
4. 연결
자세한 제원에 대해서는 다음 링크에 자세하게 나와 있는 내용을 여기에 옮겨 봅니다.
* KY-009 RGB FULL COLOR LED SMD MODULE
- https://arduinomodules.info/ky-009-rgb-full-color-led-smd-module/
+-----------------------------------------------------------+
| Operating Voltage | 5V max |
| | Red 1.8V ~2.4V |
| | Green 2.8V ~ 3.6V |
| | Blue 2.8V ~ 3.6V |
+-----------------------------------------------------------+
| Forward Current | 20mA ~ 30mA |
+-----------------------------------------------------------+
| Operating Temperature | -25°C to 85°C [-13°F ~ 185°F] |
+-----------------------------------------------------------+
| Dimensions | 18.5mm x 15mm [0.728in x 0.591in] |
+-----------------------------------------------------------+
연결은 다음과 같이 연결됩니다.
Pin 연결은 너무나 간단.
+-------------------------+
| 5050 LED | Arduino Nano |
+-------------------------+
| R | D11 |
| B | D10 |
| G | D9 |
| GND | GND |
+-------------------------+
위 사이트에서 안내되어 있는 Arduino source 입니다. 0~256 까지 8 bit 로 컨트롤 합니다.
int redpin = 11; //select the pin for the red LED
int bluepin =10; // select the pin for the blue LED
int greenpin = 9;// select the pin for the green LED
int val;
void setup() {
pinMode(redpin, OUTPUT);
pinMode(bluepin, OUTPUT);
pinMode(greenpin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
for(val = 255; val > 0; val--)
{
analogWrite(redpin, val); //set PWM value for red
analogWrite(bluepin, 255 - val); //set PWM value for blue
analogWrite(greenpin, 128 - val); //set PWM value for green
Serial.println(val); //print current value
delay(1);
}
for(val = 0; val < 255; val++)
{
analogWrite(redpin, val);
analogWrite(bluepin, 255 - val);
analogWrite(greenpin, 128 - val);
Serial.println(val);
delay(1);
}
}
5. 실행
이 정도는 정말 일상에서 쉬어가는 취미.
동영상으로 확인. 소스를 보면 G 의 범위가 4 bit 로 짧아서 그런지 뭔가 살짝 부족한 소스.
6. 다른 소스
RGB 모든 값의 범위가 256 까지 커버하는 소스를 찾았습니다. 위의 소스에서 그냥 값을 바꿔도 됩니다만, 개념적으로 잘 정리되어 있는 소스라 공유 합니다.
* Wiring 3 Color RGB SMD Common Cathode LED
- https://www.14core.com/wiring-3-color-rgb-smd-common-cathode-led/
#define BLUE_LED_DIO 10 /* Select the DIO for driving the BLUE LED */
#define RED_LED_DIO 11 /* Select the DIO for driving the RED LED */
#define GREEN_LED_DIO 9 /* Select the DIO for driving the GREEN LED */
/* Initialise serial and DIO */
void setup()
{
/* Configure the DIO pins used by the analogWrite PWM function */
pinMode(BLUE_LED_DIO, OUTPUT);
pinMode(RED_LED_DIO, OUTPUT);
pinMode(GREEN_LED_DIO, OUTPUT);
}
/* Main program loop */
void loop()
{
int k;
/* Slowly reduce the red LED's intensity and at the same time
increase the green LED's intensity */
for (k = 0; k <=255; k++)
{
analogWrite(RED_LED_DIO,255 - k);
analogWrite(GREEN_LED_DIO, k);
delay(10);
}
/* Slowly reduce the green LED's intensity and at the same time
increase the blue LED's intensity */
for (k = 0; k <=255; k++)
{
analogWrite(GREEN_LED_DIO,255 - k);
analogWrite(BLUE_LED_DIO, k);
delay(10);
}
/* Slowly reduce the blue LED's intensity and at the same time
increase the red LED's intensity */
for (k = 0; k <=255; k++)
{
analogWrite(BLUE_LED_DIO,255 - k);
analogWrite(RED_LED_DIO, k);
delay(10);
}
}
동영상 입니다. 뭔가 훨씬 부드럽죠?
다음은, 컨트롤 시그널을 이용하여 LED chip 하나 하나를 컨트롤 하는 WS2812 에 대해서도 테스트 해보겠습니다.
FIN
댓글
댓글 쓰기