dotstar
adafruit에서 만든 led strip 하드웨어와 라이브러리. neopixel과 마찬가지로 strip 형태의 제품을 원하는 곳에서 끊어 사용할 수 있다. SPI 통신 프로토콜을 사용하며 기존의 neopixel에 비해 빠르기 때문에 POV (잔상효과) 디스플레이 만들기에 더 적합하다.
dotstar vs neopixel
dotstar | noepixel |
---|---|
데이터 전송과 깜빡이는 속도(19.2Khz)가 빠르기 때문에 POV display에 적합. | 데이터 전송속도가 800khz로 고정됨. 긴 strip의 경우 데이터 정체 발생함. |
깜빡이는 속도가 400hz로 POV 에 부적합. | |
아두이노의 서보 라이브러리, tone()명령, 인터럽트 사용 가능 | 인터럽트 사용불가 |
좀 더 비쌈 | 좀 더 저렴함 |
제품 구성이 제한적임 | 매우 다양한 제품군(원형,선형 등등) |
4핀 터미널(파워+-/데이터/클럭) | 3핀 터미널(파워+-/데이터) |
dotstar 사용지 주의점
- dotstar 는 5V에서 작동한다. rsapberry pi 등 3.3v 시스템을 사용하는 경우 레벨시프터를 사용해 3.3v 신호를 5v로 변환해주어야 한다. (레벨시프터, 국내 메카솔루션 레벨컨버터)
- led 1개당 최대60mA를 소비한다. 갯수에 따라 충분한 전력을 공급토록 한다. 아마도 아두이노의 내부전원(500mA) 만으로는 부족할 것이다. (예를들어 30개 led의 dotstar를 사용한다면 60mA * 30개 = 1800mA, 즉 약 2A 전원장치를 사용하는 것이 좋다.)
- led가 동시에 모두 켜져있는 것이 아니라면 최소20mA로 계산토록하자.
Arduino 코드
Adafruit DotStar 라이브러리 인스톨
샘플 코드
#include <Adafruit_DotStar.h>
#include <SPI.h>
Adafruit_DotStar strip = Adafruit_DotStar(100, 4, 5, DOTSTAR_GRB);
// led 100개, 데이터핀 4, 클럭핀 5, 데이터 순서 Green-Red-Blue
void setup(){
strip.begin();
strip.show(); // led 초기화. 모두 끔.
}
void loop(){
strip.setPixelColor(30, 0xFF0000); //31번째 led, 빨강색
strip.show();
delay(20);
}
Adafruit_DotStar(int howManyLeds, int DATA, int CLK, 컬러타입)
데이터핀과 클럭핀은 임의의 디지털 핀으로(하드웨어 연결한대로) 지정해 주면된다. 컬러타입은 dotstar 제품마다 고유하게 정해져있다. 생산시기에 따라 BRG를 사용하기도, GRB를 사용하기도 한다. 구매한 하드웨어의 스펙시트를 살펴보자.-
Adafruit_DotStar(howManyLeds, 컬러타입)
하드웨어 SPI를 사용하고자 하는 경우에는 (조금 더 빠르다) 사용할 수 있는 핀이 보드 종류마다 정해져있으므로 특별히 써주지 않아도 된다. (물론 하드웨어는 그에 알맞게 연결되어있어야 한다. Arduino uno의 경우 data-11, clk-13) -
strip.begin()
으로 ledstrip 과 통신을 시작한다. -
strip.setPixelColor(ledNumber, 컬러)
ledNumber 는 0부터 카운트한다. 컬러는 16진수로 RGB를 표기한다. -
컬러를 설정한 후에는
strip.show()
를 해주어야만 실제 적용된다.
adafruit_dotstar.h 함수 목록
public:
Adafruit_DotStar(uint16_t n, uint8_t o=DOTSTAR_BRG);
Adafruit_DotStar(uint16_t n, uint8_t d, uint8_t c, uint8_t o=DOTSTAR_BRG);
~Adafruit_DotStar(void);
void
begin(void), // Prime pins/SPI for output
clear(), // Set all pixel data to zero
setBrightness(uint8_t), // Set global brightness 0-255
setPixelColor(uint16_t n, uint32_t c),
setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b),
show(void), // Issue color data to strip
updatePins(void), // Change pin assignments (HW)
updatePins(uint8_t d, uint8_t c), // Change pin assignments (SW)
updateLength(uint16_t n); // Change length
uint32_t
Color(uint8_t r, uint8_t g, uint8_t b), // R,G,B to 32-bit color
getPixelColor(uint16_t n) const; // Return 32-bit pixel color
uint16_t
numPixels(void); // Return number of pixels
uint8_t
getBrightness(void) const, // Return global brightness
*getPixels(void) const, // Return pixel data pointer
sine8(uint8_t) const,
gamma8(uint8_t) const;
fastLed 라이브러리
fastled 라이브러리를 사용하면 더 다양한 시각효과를 더 정교하게 조작할 수 있다고 한다. 시도해보자. https://github.com/FastLED/FastLED/wiki/Overview
참고
adafruit 제품 소개: https://learn.adafruit.com/adafruit-dotstar-leds/overview