[버섯][부품] RGB BAR ( WS2812 , WS2812B , WS2813 ) 정리 - Adafruit Neopixel RGB 스트립 & 최저가 정보 - Ver 1.4초반의 도움이 될 만한 부분은 최대한 넣기는 했지만 본문 글자 제한으로 후반 부의 내용이 잘려서 없으니 가급적 원본 글도 참고하시기 바랍니다.
Created Date: 2016.09.30 Modified Date: 2016.10.04 revision 1.4 [변경 내역] 2016-10-01 내용 추가 및 신규 최저가 정보 일부 반영 & 구매 정보를 WS2813, WS2812 제품과 일반 제품으로 분리 2016-10-01 Neopixel 정보 추가, 소스 관련 강좌 링크 추가, 주의사항 추가 및 내용 보완 중 2016-10-03 Datasheet 추가 및 WS2813 정보외 WS2811 설명 보완 2016-10-04 WS2812, WS2812B 내용 보완 및 1차 작성 완료 2016-10-04 모듈이름->모듈 크기로 정정, SMD 5050 RGB 데이터 시트 추가 키워드 : WS2811, WS2812, WS2812B, WS2813, Neopixel, RGB, RGB Bar, RGB Strip, HTTP 안녕하세요 버섯돌이 유재성입니다. 작년에 막Toy의 LED 제어에 사용했었던 WS2812B RGB BAR입니다. http://blog.naver.com/dev4unet/220406584344
사용해보니 너무 좋아서 작년부터 구매하려고 생각은 했었는데 가격이 너무 비싸져서 계속 지켜보다가... 이번에 아이들과 함께 장난감을 만들다 보니 많이 필요할 것 같기에 며칠간 찾아 봤는데 가격이 조금 떨어졌네요.*^^* 몇 달째 장바구니도 포화 상태고 저렴한 제품 정보도 정리하면서 시간 될 때 내용도 정리하려고 틀만 잡아 놓습니다. 정보를 공유하지만 주 목적은 제가 사용할 목적이 커서 틀린 내용이 있을 수 있으니 참고만 하시기 바라며, 혹시라도 잘 못된 내용은 알려주시면 반영하도록 하겠습니다.^^
가격 정보는 구매 시기의 영향을 받는 데다 상대적으로 중요하지 않고 구매할 때 위치 찾는 게 귀찮아서 마지막에 넣었습니다. WS2812B나 WS2813 제품을 구매하시면 되리라 봅니다.
[Neopixel] Neopixel이 뭔지부터 알아야겠지요? 시중에 WS2812 제품이 많습니다만 제가 처음 접한 제품은 Adafruit의 Neopixel(이하 네오픽셀)입니다. 네오픽셀에 대한 자세한 내용은 아래 링크를 참고하시기 바랍니다. https://www.adafruit.com/categories/168
위 사이트를 방문하면 네오픽셀에 대한 간단한 소개와 현란한 썸네일 영상들이 기다리고 있으니... 네오픽셀 제품군과 기능을 이해하기 위해서는 잠깐이라도 위 사이트를 방문해보는 게 가장 빠릅니다.^^ 저처럼 영어를 몰라도 대충 영상들만 봐도 우와~하고 감이 올 것입니다. 저처럼 만사가 귀찮은 분들은 아래 영상 몇 개를 보시면 이해가 되리라 봅니다. 제품군과 함께 네오픽셀에 대한 간단한 소개 영상입니다. Introducing NeoPixels by Adafruit! 출처 : https://youtu.be/HO6xQMR8naw
일반적으로 의류나 신발 및 킥 보드 등에 많이들 장착하는데 신발에 장착하는 영상입니다. Firewalker LED Sneakers
[외형] 네오픽셀은 용도에 따라 rings, strips, boards and sticks 등의 다양한 형태가 존재합니다. 이미지 출처 : 네오픽셀 페이지의 이미지들 편집
저는 흔히 RGB BAR라고 부르는 아래 사진처럼 릴에 감겨있는 스트립 형태하고 링 형태의 제품만 사용해 봤습니다.^^ 참고로, 네오픽셀 스트립의 경우 1미터에 약 $25정도 합니다.^^ Adafruit NeoPixel Digital RGB LED Strip - White 60 LED - WHITE 일반적으로 WS2812B가 사용된 스트립 제품들은 이렇게 미터 단위로 판매합니다. 제품은 1미터당 몇 개의 LED를 사용했는지와 방수 형태에 따라 제품군이 나뉩니다. 보통 1미터당 30 / 60 / 90 / 144개의 LED 제품이 판매되며 방수 형태는 IP30 / IP60 / IP65이 가장 많습니다. 미터당 사용된 LED 수가 많을수록 간격이 촘촘하겠죠? (144개짜리 제품은 거의 붙어있습니다.) IP30: Non- waterproof IP65: Waterproof in Silicon Coating IP67: Waterproof in SiliconTube
또한, 스트립의 경우 절단 표시 부위를 잘라서 원하는 길이만큼 잘라서 사용해도 됩니다.
전용 커넥터를 이용해서 손쉽게 연결도 가능합니다.
[용도 및 개념] 사진에서 가로*세로 5mm의 하얀색 사각형이 WS2812B입니다. 잘 안보이겠지만 모듈 안을 자세히 보면 작은 IC 칩이 하나 보입니다. 그 칩이 바로 주인공인 WS2811로 불리는 LED를 제어하는 LED 드라이버 칩입니다. (세부 내용은 첨부된 데이터 시트를 보세요.) WS2812B는 이렇게 5mm의 사각형 안에 LED를 제어하기 위한 WS2811 LED 제어 칩과 RGB 칩이 모두 들어가 있습니다.
WS2811 데이터 시트를 보면 다음처럼 표현하고 있습니다. Signal line 256 Gray level 3 channal Constant current LED drive IC
제 전공이 아니라 무슨 의미인지 모르겠지만 256 단계의 그레이 레벨과 3채널 정전류 LED 드라이버 IC라는 것 같군요.-_-;;
그리고 몇 가지 중요하다 싶은 내용도 옮겨 봅니다. (영어라 의미는 알아서~) - Gray level 256 can be adjusted and scan freque ncy not less than 400Hz/s. - Built in stabilivolt, Only add a resistance to IC VDD feet when under 24V power supply.
데이터 시트에 있는 WS2811의 핀 구성과 기능 설명입니다. 영어도 안되고 전공도 아니고~ 그렇다면..? 머리가 나쁘면 몸이 고생해야겠죠*^^* WS2811은 어떤 IC라고 했죠? Signal line 256 Gray level 3 channal Constant current LED drive IC
자~ 그럼 이제부터 몸이 고생하기 위해 주어진 정보를 기반으로 초등학교 상식으로 대충 때려 맞춰봅니다~ RGB 모듈의 경우 컬러를 제어하기 위해 RGB(Red/Green/Blue)라는 빛의 3원색을 이용합니다. 예를 들어, Red가 100%면 빨간색이 되는 것입니다. 따라서, RGB LED를 제어하려면 Red/Green/Blue 각각에 전기의 On/Off 신호를 줘야겠지요?
그런데 위 표에서 RGB LED를 제어하기 위한 출력인 OUTR/OUTG/OUTB를 보면 PWM control이라고 되어있네요~ PWM.... 펄스폭 변조라고 하죠? 뭔지 모르겠지만... 값이 단순하게 0과 1이 아니라 그냥 뭔가 값을 여러 개로 조각냈다~라고 생각하죠^^
그리고 아두이노 홈페이지의 아날로그 핀 설명을 보면 "Provide 8-bit PWM output" 어쩌고가 있죠? 8비트면 2^8 승이라서 256입니다. 뭔지 모르겠지만 핀 하나에 0부터 255까지 256의 값을 지정할 수 있습니다.
어라... 256이라... 256 Gray level이 갑자기 눈에 들어오네요.. 그레이 레벨은 보통 한 점의 컬러 대신 흑백의 명암을 단계별로 지정하며, 1바이트에 총 256개의 밝기를 지정합니다. 어라~? 갑자기 256과 PWM의 쿵짝이 맞으면서 빛의 밝기를 256 단계로 표현하는 것 같네요.
그런데 이런 게 3 채널이나 있다? OUTR/OUTG/OUTB도 3개인데? 에잇~ 모르겠다~!!! 다 때려 맞춰서 컬러 색상으로 우겨보면... Red의 밝기를 256 단계로 표현하고, Green도 256 단계로 표현하고, Blue도 256 단계로 표현 할 수 있다? 그렇다면 표현 가능한 색상은 256*256*256=16,777,216 컬러가 됩니다. 네... 예전에는 엄청 광고했었는데 컴퓨터를 접하면서 16.8M(1,600 백만) 트루 컬러라는 말을 들어 봤는지 모르겠네요.^^ 보통 엄청난 것처럼 보이기 위해 24비트 16,777,216 컬러라고 많이 홍보했었죠..^^;; 사람이 볼 수 있는 모든 색이라는 의미에서 트루 컬러(True Color)라고 하며 풀 컬러(Full Color) 라고도 합니다.^^
다시 처음으로 돌아가면 Red만 예로 든다면, 단순히 0과 1이 아니라 PWM이므로 밝기를 256 단계로 쪼갰다고 생각하세요. 그래서 빨간색이 아주 어두운 값부터 시작해서 아주 밝은 값으로 서서히 밝아집니다.
빛의 3원색으로 인해 Red/Green/Blue각각의 밝기(0~255)에 따라 다양한 색상이 표현되겠죠^^ 아님 말고~~~^^;; 저도 모르니 책임은 못 져요!!! 뭐..WS2812B를 이용해서 제어하니 당장은 WS2811이 중요한 것은 아니니까요..
DOUT을 보면 Data signal cascade output이라고 되어있네요. Din에서 입력으로 받은 값을 계속 전달한다는 의미로 보시면 됩니다.
예전에 허큘렉스 모터 매뉴얼을 보니 이쪽에서는 이런 구조를 데이지 체인이라고 표현하는 것 같던데.. 아래 사진처럼 WS2812B LED를 연속으로 쭈우우욱~ 이어 붙일 수 있다는 정도로만 생각하시면~ 즉, 좌측 첫 번째 WS2812B의 Din으로 들어온 D1의 값이 Do를 통해서 다시 D2의 Din으로 들어가서 Do로 나오고~~~ 뭐.. 머리 아프게 복잡하게 생각할 필요가 있나요.. 그냥 LED를 제어하는 WS2811이라는 IC가 들어있다~ 라고 생각하면 되겠죠*^^*V 그런데 왜 이렇게 머리 아픈 WS2811을 얘기한 거야!!! 라면서 버럭! 하고 화를 내셔도.....^^;;; 일반적으로 RGB를 제어하려면 공통핀 1개와 R/G/B 핀이 각각 1개가 있어서 1개의 RGB에 총 4개의 핀이 필요합니다. 공통핀은 공용으로 사용하더라도 R/G/B 각각은 아두이노에 직접 연결되어야 합니다. 만약, 제어하고 싶은 RGB LED가 하나가 아니라 여려 개라면..? 아두이노 하나에 여러 개의 RGB LED를 연결하려면 몇 개 연결 못 하고 아두이노 핀이 너무 부족할 것입니다. 또한 여러 개의 LED 중 원하는 형태로 제어까지 하려면 필요한 핀과 IC가 점점 늘어나겠죠.ㅠㅠ 저처럼 전자 지식과 담을 쌓고 사는 일반인들은 요구되는 엄청난(?) 회로 지식과 함께 멘붕을 경험해야 합니다. 이런 불편함을 한방에 없애고 아티스트들도 화려한 퍼포먼스를 구현할 수 있도록 만들어진 제품이 바로 네오픽셀입니다. 네오픽셀은 아두이노에서 손쉽게 제어가 가능하도록 아예 제어용 컨트롤러인 WS2811을 RGB 모듈에 내장했습니다. (정확하게는 WORLDSEMI사의 WS2811이 내장된 WS2812 제품을 이용해서 네오픽셀 제품을 만든 것이겠죠^^) 그리고 WS2811은 위에서 Din의 입력 값을 Dout으로 Cascade 하면서 전달할 수 있다고 했습니다. 그래서 WS2812B는 RGB 모듈 하나를 제어하든 수 십 개를 제어하든 전원만 충분하면 핀 3개로 모든 게 끝입니다.*^^* 이렇게, 핀 두 개는 GND와 5V로 전원 핀이고, RGB 모듈을 제어하기 위한 제어핀(Din) 하나면 모든 게 끝입니다.^^ 참 쉽죠잉~? 가운데의 Din을 이용해서 여러 개의 RGB 모듈을 주소(Address) 형태로 원하는 LED를 지정하고 색도 지정할 수 있습니다. 이것을 가능하게 하는데 큰 몫을 하는 칩이 바로 WS2811입니다.^^ 네오픽셀 제품이 WS2811을 사용하기 때문에 WS2811 칩을 사용한 제품들은 동일한 라이브러리를 이용할 수 있습니다.^^ 그래서 WS2811이 사용된 WS2812B 제품을 보통 네오픽셀이라고 부르는 분들도 계십니다.^^ 정확하게는 Adafruit의 네오픽셀과 WS2812B 제품은 다른 제품입니다. 세부적인 제어 방법은 첨부된 데이터 시트와 구글링해서 적어 놓은 참고 정보 들을 참고하시기 바랍니다. WS2812의 데이터 시트를 보면 핀 구성과 기능이 아래처럼 나와있습니다. WS2812는 이렇게 5050안에 LED 제어 칩인 WS2811 드라이버 칩이 들어가 있습니다.
하지만, 쇼핑몰을 보면 WS2812에서 좀 더 개선된 WS2812B 제품이 판매되고 있습니다. 아마 지금은 구매하는 제품들이 특별한 경우를 제외하고는 WS2812B라고 생각됩니다.^^ WS2812B의 핀 구성과 기능 설명입니다. WS2812B는 기존의 WS2812에서 핀 구성도 바뀌었고 데이터 시트에서 가장 큰 차이점은 아래 두 가지 정도인 것 같습니다. - Intelligent reverse connect protection, the power supply reverse connection does not damage the IC. - The control circuit and the LED share the only power source. 최종 사용할 모듈은 WS2812B이고 스트립 타입이 아니라 직접 모듈만 이용하는 경우도 있으니... 지금은 이해를 못 해도 향후를 대비해서 주의 사항 및 동작 방식을 참고하기 위해 데이터 시트를 최대한 옮겨 봅니다. Absolute Maximum Ratings는 다음과 같습니다. 입력 전원 전압은 3.5~5.3v가 최대군요. RGB IC characteristic parameter는 다음과 같습니다. Data transfer time( TH+TL=1.25μs±600ns)입니다. Sequence chart입니다. Cascade method입니다. 픽셀과 픽셀(WS2812B)은 서로 Din과 Dout으로 데이터가 전달된다고 했었죠? 위 그림은 대충 아래와 같이 3개의 WS2812B가 연결되었다고 보면 됩니다. 처음 들어온 D1 신호가 Dout을 통해서 D2로~ 같은 원리로 D3로 계속 전달됩니다.^^ Data transmission method입니다. D1은 최초 입력되는 곳이니 아두이노 등의 MCU에서 전송한 값이고 D2, D3, D4는 Cascade에 의해 내부적으로 값이 전달됩니다. 전달되는 RGB 색상의 24비트 데이터 구성입니다. 색상 값은 좌측부터 1바이트(8비트)씩 Green/Red/Blue 순서군요. Adafruit의 NeoPixel 라이브러리를 보면 setPixelColor()함수를 이용해서 특정 위치의 LED 색상을 지정하도록 되어있습니다. 첫 번째 인자는 2바이트 정수로서 설정하고 싶은 LED의 번호입니다. 즉, WS2812가 3개 있다면 3개 중 어떤 녀석인지 지정하는 것입니다. 그리고, unit8_t 타입이니 1바이트 타입으로 Red/Green/Blue값을 차례대로 입력받습니다. 하지만, WS2812B는 Green/Red/Blue 순서로 전송해야 하기 때문에 Red/Green/Blue값을 Green/Red/Blue 순서로 저장합니다. 색상 지정이 끝났으면 show() 함수를 이용해서 네오픽셀(WS2812B)로 전달하면 네오픽셀에 반영됩니다. 잠깐, Adafruit_NeoPixel 라이브러리에서 제공되는 simple 예제를 살펴보면 대략 다음과 같습니다. Adafruit_NeoPixel 라이브러리를 사용하기 전에 네오픽셀의 특성을 지정합니다. Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); NUMPIXELS은 사용할 LED 수로서 1미터에 60개짜리 스트립 제품이라면 NUMPIXELS은 60이 되겠죠^^ PIN은 네오픽셀의 Data 핀이 연결된 아두이노의 핀 빈호입니다. WS2812B는 위처럼 색상이 RGB가 아닌 Green/Red/Blue순이므로 NEO_GRB를 사용하면 됩니다. 그리고 마지막의 값은 WS2811은 400KHZ, WS2812B는 800KHZ입니다. 3번째 인자는 특별한 경우를 제외하고는 WS2812B 제품은 "NEO_GRB + NEO_KHZ800" 고정입니다. 그리고 위에서 살펴본 것처럼 특정 LED의 색상을 지정합니다. 제일 첫 번째 LED의 색상을 Green의 150 정도로 설정하고 싶다면 아래처럼 합니다. pixels.setPixelColor(i, pixels.Color(0,150,0)); // 함수는 Red/Green/Blue 순서로 지정 다섯 번째 LED의 색상을 지정하려면 이렇게 되겠죠? pixels.setPixelColor(i, pixels.Color(4,150,0)); // 함수는 Red/Green/Blue 순서로 지정 하지만, 네오픽셀 가이드 문서와 위의 분석한 소스를 보면 색상은 아래처럼 RGB 값을 곧바로 지정해도 됩니다. pixels.setPixelColor(4, 0, 150, 0); 색상 값은 처음처럼 32비트 형태로 지정하거나 RGB 값을 개별로 지정할 수 있으니 편한 방식을 이용하면 됩니다. 그리고 반대로 getPixelColor()을 이용해서 특정 LED의 색상 값을 조회할 수 도 있습니다. uint32_t color = pixels.getPixelColor(4); 색상 지정이 끝났으면 show()를 호출해서 해당 WS2812B에 전송해야 LED에 색상이 반영됩니다. pixels.show(); 당연히, show()를 호출하지 않으면 메모리에만 반영되겠죠^^;; 그리고, for() 문에서 지금까지의 코드를 활용하면 차례대로 LED에 색상이 반영될 것입니다.^^
세부적인 내용은 참고 자료나 온라인 강좌를 참고하세요. 대충 훑어보니 FAQ가 있어서 Adafruit의 강좌를 먼저 살펴보시면 좋을 것 같네요. WS2812B 여러 개를 사용하는 일반적인 회로 구성은 다음과 같습니다. WS2812B의 각 입력 전원인 VDD에는 5v가 공급되고 전원과 GND 사이에는 104(0.1㎌) 콘덴서를 연결하네요. 스트립 타입 제품을 보면 위처럼 WS2812B 모듈 우측의 5v와 GND 사이에 C1이라고 표기된 콘덴서가 있습니다. 회로도처럼 WS2812B의 DOUT 값을 다음 WS2812B의 DIN에 전달합니다. WS2812B 모듈을 연결하는 방식이 참 쉽죠? WS2812와 WS2812B의 실제 생김새 비교 이미지입니다.^^ (좌측은 WS2812인데 오타 같습니다.)
혹시나 싶어서 5050과 3528의 차이점이 궁금해서 찾아 봤습니다. 5050 vs 3528 LED Strip Differences High Quality by SIRS-E 여기서 5050이나 3528은 WS2812B 같은 저희가 찾는 IC 칩이 아니라 단순히 SMD 타입의 RGB 모듈 크기입니다. 영어라 못 알아듣기 때문에 대충 영상을 보면 5050하고 3528의 가장 큰 차이점은 RGB 모듈의 크기입니다. 모듈의 가로*세로 크기 차이라서 1미터당 들어갈 수 있는 RGB 모듈의 최대 개 수에서도 차이가 나는군요. 얼핏 들었을 때 두 모듈의 색상은 동일하다는 것 같네요. 저 정보를 찾아본 이유가 릴 형태의 저렴한 WS2812 제품을 찾는데 쇼핑몰에 릴 제품은 5050과 3528처럼 여러 제품이 있더군요. 특히나 3528 제품은 크기가 작아서 미터당 LED 수도 많고 가격이 더 저렴한데 제 전공이 아니라서... 5050이 아닌 3528도 제가 찾고자 하는 WS2812 제품인데 단순히 LED 크기만 작은 제품인지 확실하지 않더군요.^^;; 즉, 3528이라는 명칭 안에 무조건 WS2812처럼 제어 모듈이 포함된 건지 확인하려고 찾은 정보입니다. 참고로, 아래는 스트립 형태의 SMD LED Chip별 크기 정보를 확인하기 좋은 것 같아서 첨부합니다. 이미지 출처 : https://www.flexfireleds.com/pages/Comparison-between-3528-LEDs-and-5050-LEDs.html 그리고, 찾았던 3528 제품의 아래 사진만 봐서는 RGB 연결 부위가 각각 보이는군요. 당연하겠지만 5050이나 3528 같은 이름은 단순히 RGB 모듈 이름입니다. WS2812B의 존재 여부 확인 없이 단순히 릴 형태가 비슷하다고 무조건 구매했다가는 피 볼 수 있겠네요.^^;;; 구매하려는 제품에 WS2812B가 사용되었는지를 확인해야 할 것 같습니다. 참고로, WS2812의 데이터 시트에는 아래처럼 설명되어있습니다. Control circuit and RGB chip are integrated in a package of 5050 components, form a complete control of pixel point. 처음에는 기존의 5050 RGB SMD 칩안에 WS2811 제어 모듈을 심어 놓은 제품이 WS2812B인 줄 알았었는데.... 영어 및 이쪽 분야 지식이 부족해서 제어 5050 컴포넌트가 5050 RGB 모듈을 의미하는지 정확하게 와 닿지는 않네요.ㅜㅜ;; 제어 회로 외에 RGB 칩도 함께 적혀있으니 살짝 혼동이 오네요... 5050 모듈 안에 RGB 칩이 있으니 맞는 것 같기도 하지만.. 5050 패키지가 제가 생각하는 5050 RGB SMD가 아닐지도 모르겠다는 생각이...^^;;; (참고로, 외국 강좌 중에는 명확하게 WS2812B는 5050 RGB SMD 안에 WS2811을 넣었다고 나온 내용이 있기는 합니다.) "WS2812B (essentially an improved WS2811 LED driver integrated directly into a 5050 RGB LED)" 즉, 저는 WS2812B는 3528이 아니라 5050 RGB 모듈에만 사용된다... 라고 하고 싶었는데.. 제 지식과 영어가 짧아서 위문장만으로는 명확하지 않기에..^^;;; 3528 RGB 모듈을 사용하는 WS2812B 제품이 있는지 구글링해보니 3528 모듈에 WS2812B 릴 제품이 하나 있네요.-_-;;; 그리고 올해 4월에 WS2812B의 업그레이드 모듈인 WS2813이 새로 나왔습니다. 이미지 출처 : WS2813 데이터 시트 특징으로는 Dual-signal wires version과 Signal break-point continuous transmission이라고 합니다. WS2812B는 데이터 핀이 하나였는데 WS2813은 2개로 늘어나면서 SMD는 사진처럼 4핀에서 6핀이 되었습니다. 핀의 명칭및 기능은 아래와 같습니다. 6번의 BIN이라는 백업 데이터 입력 핀이 추가되었군요.^^ WS2813 스트립 타입도 백업 데이터 핀이 하나 더 추가되면서 전체 3핀에서 4핀으로 늘었습니다. 자세한 내용은 나중에 찾아 봐야 할 듯싶지만 아래 사진이 WS2813의 특징을 이해하는데 도움이 될 듯싶습니다. WS2812B는 LED와 LED 사이에 파손된 LED가 생기면 파손된 LED와 연결된 LED 이후의 모든 LED가 동작하지 않았으나.. WS2813은 신호가 끊어진 LED와 연결된 LED들도 문제가 발생한 LED를 제외하고 모두 동작하는 것 같군요. 그림에서 HTTP 부분은 데이터 시트에는 없는 내용인데 확인해 봐야겠지만 왠지 솔깃하네요^^;; 본문 길이 제한으로 내용이 더 이상 추가되지 않고 내용이 짤리네요^^;;; WS2812B 사용시 주의 사항을 비롯하여 데이터 시트나 사용버및 최저가 정보 등의 구매 가이드를 비롯한 내용은 원본 글을 참고하시기 바랍니다.
|
최신댓글