본문 바로가기
전기/Arduino

[Arduino] WS2812 5*5 (RGB LED) #3 example operation_2

by 자유로운 생활 2023. 1. 29.
728x90
반응형

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개의 포스팅을 읽어보시면,

어렵지 않게 구현할 수 있으실 겁니다.

 

728x90
반응형