NeoPixel (네오픽셀) 을 알아보자

by 하민정 | 2017-01-11 16:50
neopixel 네오픽셀 디지털아트 아두이노

재료

  • 네오픽셀 원형 1개
  • 점퍼와이어 1개
  • 아두이노 우노 1개

                                     

Q. 네오픽셀 LED 란 무엇일까요? 


- Adafruit 에서 만든 RGB LED 으로,

wire (줄), matrices (매트릭스), ring (링) , 형태 등으로 다양한 모양을 갖고 있습니다.  

- Adafruit 에서 제공하는 라이브러리를 통해 쉽게 LED 의 RGB 각각을 제어할 수 있습니다. 

- 보통 LED 를 한 개 켜기 위해서 1개의 전원 단자 (혹은 핀)이 필요하지만,

네오픽셀은 100개를 사용해도  '하나의 + 제어용 데이터 핀만으로'  

많은 LED 를 모두 제어할 수 있도록 설계할 수 있다는 차이점을 갖고 있습니다. 


Q. 네오픽셀 제어 원리는 무엇일까요? 


- 네오픽셀 자체는 총 3개의 핀 (5V, GND, DOUT) 으로 이루어져 있습니다. 

5V 와 GND의 경우 전원을 입력해주는 핀 단자이며, DOUT 를 통해 디지털 신호를 입력해 줍니다. 


만약 아두이노 우노를 통해 전원을 입력해 주는 경우, 

예를들어 110101101 과 같은 디지털 신호를 보내게 되면 

네오픽셀은 신호를 해석하여 색상, 밝기, ON, OFF 등의 명령을 수행하고, 

연결된 네오픽셀의 LED에 다음 신호를 보내게 됩니다. 


네오픽셀 1개에는 R, G, B (레드, 그린, 블루) 색상의 LED가 들어있으며, 

이를 제어하여 색상, 밝기 등을 조절할 수 있게 됩니다. 

또한 네오픽셀끼지 서로 연결하여 사용할 수도, 한개씩 잘라서 사용할 수도 있습니다. 


각각은 프로그래밍을 통해 개별 제어를 할 수 있게 됩니다. 


Q. 네오픽셀의 종류는 무엇이 있을까요? 




위와 같이 다양한 네오픽셀이 존재합니다. 

네오픽셀 1개로 구성된 개별타입, 

모양에 따른 링, 스트립, 매트릭스, 스틱 타입, 등 여러가지 타입의 네오픽셀이 존재합니다. 

원하는 목적에 맞게 선택해서 사용할 수 있습니다. 


Q. 아두이노를 통해 LED 사용하는 방법 ? 


네오픽셀을 사용하기 위해서는 프로그래밍이 필요합니다. 

마이크로컨트롤러를 사용해 주어야 하는데,

여기서는 아두이노 우노 보드를 통해 만들도록 하겠습니다. 


"아두이노로 네오픽셀 작동시켜보기" 


Step 1. 준비물 


                        


위와 같은 준비물을 준비합니다. 

- 아두이노 우노 

- 네오픽셀 원형 ( CJMCU-2812- 7 ) 

- 점퍼 와이어 ( Male - Female ) 

- 포트 


Step 2. 하드웨어 연결방법 


                          


1) GND 핀을 아두이노의 GND 핀에 연결합니다. 

2) VCC 핀을 아두이노의 5V 핀에 연결합니다. 

3) IN 핀을 아두이노의 6번 핀에 연결합니다. 

4) 포트를 노트북 USB 단자에 연결합니다. 


Step 3. 소프트웨어 연결방법 


1) 먼저 Adafruit NeoPixel library 를 다운받습니다. 다운은 링크를 통해서 해주세요. 

2) 다운받은 library zip 파일을 아두이노 라이브러리에 추가해 줍니다. 

3) 아두이노의 '툴/포트' 에서 현재 아두이노에서

지금 사용하고 있는 아두이노 보드의 포트로 연결해 줍니다. 


         



5) 다음 코드를 통해 NeoPixel 이 아두이노와 잘 연결이 되었는지 확인할 수 있습니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library
 
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif
 
// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN            6
 
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      7
 
// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
 
//wait time 
int delayval = 500; // delay for half a second
 
 
uint8_t r =0; 
uint8_t g = 0; 
uint8_t b = 0; 
 
void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  // End of trinket special code
 
  pixels.begin(); // This initializes the NeoPixel library.
  pixels.setBrightness(30);
 
  randomSeed(analogRead(0)); 
}
 
void loop() {
 
  r= random(0,255); 
  g = random(0,255); 
  b = random(0, 255); 
 
  // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.
 
  for(int i=0;i<NUMPIXELS;i++){
 
    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(r,g,b)); // Moderately bright green color.
 
    pixels.show(); // This sends the updated pixel color to the hardware.
 
    delay(delayval); // Delay for a period of time (in milliseconds).
  }
    pixels.clear();
 
}
cs


위의 코드를 아두이노 IDE 에 옮겨 적습니다. 


▶ 구체적으로 코드의 구석구석을 살펴보겠습니다. 


1
2
3
4
5
6
7
8
9
10
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif
// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN            6
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      7
 
cs


먼저, 이 프로그램은 Adafruit 에서 제공해 주는 라이브러리를 참조해야 하므로 

< Adafruit_NeoPixel.h >  라이브러리를 참조해 줍니다. 


우리가 연결한 네오픽셀 핀이 6번핀과 연결해 주었으므로, 위와 같이 PIN 을 6으로 선언해 주고, 

사용할 네오픽셀이 7개의 LED 를 사용하고 있는

원형 네오픽셀 이므로 NUMPIXELS 를 7로 선언합니다. 


< delayval > 을 통해 loop 에서 한번 수행된 코드가 그 다음 수행될 때까지의 대기시간을 

설정할 수 있습니다. 

여기서는 500 ms 로 설정해 주었습니다. 


1
2
3
4
5
6
7
8
9
10
11
void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  // End of trinket special code
  pixels.begin(); // This initializes the NeoPixel library.
  pixels.setBrightness(30);
  randomSeed(analogRead(0)); 
}
 
cs


< pixels.setBrightness(30) > 으로 설정해 주었습니다. 

이것은 네오픽셀의 밝기를 설정하는 것인데, 

최대 100까지의 밝기를 낼 수 있으며, 여기서는 사진 촬영을 위해 30으로 설정해 주었습니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
void loop() {
  r= random(0,255); 
  g = random(0,255); 
  b = random(0, 255); 
  // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.
  for(int i=0;i<NUMPIXELS;i++){
    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(r,g,b)); // Moderately bright green color.
    pixels.show(); // This sends the updated pixel color to the hardware.
    delay(delayval); // Delay for a period of time (in milliseconds).
  }
    pixels.clear();
cs


r,g,b 변수는 각각 0부터 255 사이의 값을 갖게 됩니다. 

loop 문에서 for 문을 통해 매번 수행 할 때마다 r,g,b 값이 임의의 값을 갖게 됩니다. 


< pixels.setPixel Color(i, pixels.Color(r,g,b))> 로 새로운 r,g,b 값에 의해

각 픽셀은 새로운 색깔을 갖게 됩니다. 

< pixel.show( ) >를 통해 네오픽셀로 이 색깔이 출력되게 됩니다. 

< pixel.clear( )> 를 해 주어 수행된 loop 문 이후에는 새로운 색깔로 수행될 수 있도록 합니다. 


Step 4. 수행결과 



댓글 0

MADE BY

음악에 맞추는 네오픽셀 램프를 만들어 보자 다음글 NeoPixel (네오픽셀) 을 알아보자 현재글