WS2812 5 by 5 _ RGB LED
Arduino Mega 2560
Oscilloscope
앞서 WS2812 _ #1, #2 포스팅에서
동작 원리 및 간단한 예저에 대해 알아봤습니다.
픽셀 2개를 이용해서,
초록색 빛이 발광하도록 동작시켰었죠.
이번 포스팅에서는
밝기 조정 및 빨간색, 파란색 발광 동작을
구현해 보겠습니다.
WS2812 포스팅 #1, #2의 링크는 아래에 있으니,
아직 보지 않으신 분들은 간단히 보고 오세요~!!
https://jauroun.tistory.com/40
[Arduino] WS2812 5*5 (RGB LED) #1 동작 방법
WS2812B 5*5 Intellgent control LED light source 이번에는 RGB LED 를 한번 동작시켜볼까 합니다. LED...뭐 당연히 번쩍번쩍 불빛을 내며 동작할 겁니다. 근데 대체 어떻게 생겼고, 또 어떻게 사용하는 거야? 저
jauroun.tistory.com
https://jauroun.tistory.com/41
[Arduino] WS2812 5*5 (RGB LED) #2 example operation
WS2812 5 by 5 _ RGB LED Arduino Mega 2560 Oscilloscope 지난 포스팅에서, WS2812 동작 방법에 대해 알아봤습니다. 제가 가지고 있는 것은 WS2812가 아니라 WS2812B 였었죠! 아무튼 0 code 와 1 code 조합으로 한 개의 픽
jauroun.tistory.com
1. 예제 프로그램 (example)
이전에 WS2812_#2 포스팅에서 예제 프로그램에 대해
간략히 설명했었죠.
그 예제에서 약간 더 수정하여,
초록색 빛 밝기와 파란색, 빨간색 빛이 출력되도록
구현하였습니다.
소스는 다음과 같습니다.
for(int i=0; i<NUMPIXELS; i++)
{ // For each pixel...
pixels.setPixelColor(i, pixels.Color(0, 10, 0)); ///bright green color
pixels.show(); // Send the updated pixel colors to the hardware.
delay(DELAYVAL); // Pause before next pass through loop
pixels.setPixelColor(i, pixels.Color(0, 100, 0));
pixels.show();
delay(DELAYVAL);
pixels.setPixelColor(i, pixels.Color(0, 0, 50));
pixels.show();
delay(DELAYVAL);
pixels.setPixelColor(i, pixels.Color(50, 0, 0));
pixels.show();
delay(DELAYVAL);
}
void loop() 에 들어가는 for문 입니다.
이 부분만 수정해서, 수정부분만 올려놓았습니다.
전체를 보고싶다면 이전 포스팅을 참고해주세요.
(red, greed, blue) 순서라고 했었죠?
그렇기 때문에,
(0, 10, 0) : 약한 초록색 출력
(0, 100, 0) : 더 밝은 초록색 출력
(0, 0, 50) : 파란색 출력
(50, 0, 0) : 빨간색 출력
되도록 구현한 것입니다.
물론, 픽셀은 이전과 같이 2개의 픽셀만 사용하였구요!
2. LED 밝기 및 색깔 바꾸는 예제 동작 결과
동작부터 확인해보시죠!
이렇게 동작하고 있네요!
크, RGB LED가 좋긴 좋군요.
소자 한개로 원하는 색, 밝기 다 조정할 수 있으니!!!
참고로 LED off 하는 부분의 for()문은 위의 소스에는 빠져있으니,
이전 포스팅 참고하시기 바랍니다.
3. 파형 분석을 통한 결과 이해
자, 이제 파형을 살펴보죠.
* Top Left (좌측 상단 파형)
첫번째 픽셀 신호는 초록색 부분이
00001010 이네요. 이 값은 십진수로 10 입니다.
즉, 첫번재 픽셀이 약한 초록색 빛이 출력되고,
두번째 픽셀 신호는 모두 0 code 이므로 off 인 상태입니다.
* Top Right(우측 상단 파형)
첫번째 픽셀 신호는 초록색 부분이
01100100 이네요. 이 값은 십진수로 100 입니다.
즉, 첫번째 픽셀이 조금 더 밝은 초록색 빛이 출력되고,
두번째 픽셀 신호는 모두 0 code 이므로 off 인 상태입니다.
* Bottom Left (좌측 하단 파형)
첫번째 픽셀 신호는 빨간색 부분이
00110010 이네요. 이 값은 십진수로 50 입니다.
즉, 첫번째 픽셀은 빨간색 빛이 출력됩니다.
두번째 픽셀 신호는 파란색 부분이
00110010 이네요. 십진수로 50 입니다.
즉, 두번째 픽셀은 파란색 빛이 출력됩니다.
* Bottom Right (우측 하단 파형)
첫번째, 두번째 픽셀 신호 모두 빨간색 부분이
00110010 이네요. 십진수 50 입니다.
따라서, 두 픽셀 모두 빨간색 빛이 출력됩니다.
이제 좀 이해가 수월하게 되죠?
한 개의 픽셀 당 24개의 code로 구성되는데,
초록색(8개 code) + 빨간색(8개 code) + 파란색(8개 code) = 24 code
여기서,
어느 색깔쪽에 1 code를 추가하느냐에 따라 색깔이 바뀌고,
1 code를 추가하여 십진수 환산한 값 만큼 밝기가 바뀌는 것이죠.
그렇다면, 데이터시트에 나온 것처럼
초록+빨강+파랑 신호를 순차적으로 신호를 생성해서
LED를 각각 초록, 빨강, 파랑 출력했습니다.
그렇다면 그 외의 색깔은 어떻게 구현할까요?
네, 맞습니다.
예측하신대로, 초록, 빨강, 파랑을 적절히 섞어서(조합해서)
만들어 낼 수 있겠죠!
위의 예제에서 (빨강, 초록, 파랑) 에 각각
적절한 값을 입력해서, 구현하면 어렵지 않게 구현 할 수 있을 겁니다.
여기까지해서,
WS2812 RGB LED 동작 및 간단 구현,
밝기 및 색깔 조정 이해에 대한 포스팅을 마치겠습니다.
작성하다 보니 길어져서 #1, #2, #3 이렇게
세 편으로 포스팅을 하게 되었네요.
천천히 3개의 포스팅을 읽어보시면,
어렵지 않게 구현할 수 있으실 겁니다.
'전기 > Arduino' 카테고리의 다른 글
[Arduino] Cable _ USB A type, B type (0) | 2023.02.07 |
---|---|
[Arduino] Arduino Mega 2560 구성 및 회로도 (0) | 2023.01.29 |
[Arduino] WS2812 5*5 (RGB LED) #2 example operation (0) | 2023.01.28 |
[Arduino] WS2812 5*5 (RGB LED) #1 동작 방법 (1) | 2023.01.27 |
[Arduino] HC-SR501 (적외선 센서) #1 특징 및 동작 확인 (0) | 2023.01.26 |