인투피온 강좌/아두이노 팁(Tip)

아두이노 매뉴얼 [소리감지 LED 키트] - 2

인투피온 2022. 7. 26. 11:49

(이미지 클릭시 구매할 수 있는 링크로 이동됩니다)

 

 

오늘은 소리감지 LED 키트인

Hear & Light 키트에 대해서 두번째로 알아보는 시간입니다.

 

 

 

우선 소리감지 LED 키트 1편을 보지 않으신 분들에겐

아래 링크를 통해 1편을 먼저 따라해주시길 바랍니다.

 

 

▼ ▼ ▼

 

https://intopionshop.tistory.com/506?category=1052256 

 

아두이노 매뉴얼 [소리감지 LED 키트] - 1

오늘은 소리감지 LED 키트인 Hear & Light 키트에 대해서 알아보도록 하겠습니다! MAX9814 마이크 증폭 모듈과 네오픽셀 WS2812B LED 모듈을 활용해 소리의 크기에 따라 LED 를 출력하는 키트입니다. 동영

intopionshop.tistory.com

 

 

 

 

Chapter 2. WS2912B LED 

 

 

먼저 아래 그림에 보이는 칩은 WS2812 으로

GND, VDC, Data In, Data Out 4개의 핀만 있으면 사용이 가능합니다.

 

이 칩은 daisy-chain 으로 Data In 과 Data Out 을 통해

여러 개의 칩을 연결할 수 있습니다.

 

 

WS2812

 

WS2812B NeoPixel

 

 

WS2812B LED 납땜하기

 

 

위 제품 사진을 보시면 연결하기 위한 핀이 없습니다.

그래서 함께 동봉되어있는 핀을 납땜 해주셔야 합니다!

 

 

 

3개 / 3개 끊어서 앞과 중간에 납땜해야 됩니다.

중간에는 핀을 뽑아서 납땜을 해주세요.

 

 

 

WS2812B LED 회로 연결

 

 

네오픽셀 모듈 아두이노 우노
GND GND
VDC VCC
DI D6

 

챕터 1에서 진행한 내용에 이어서 연결해주세요.

 

 

 

 

 

WS2812B LED 라이브러리

 

 

코딩하기에 앞서 먼저 라이브러리에 추가해를 해야합니다.

'Ctrl + Shift + I' 를 누른 후 'Adafruit_NeoPixel' 을 검색해 설치하면 됩니다.

 

아래 강의를 통해 확인 방법을 따라하고 함께 해주세요.

 

▼  ▼  ▼

 

https://intopionshop.tistory.com/240?category=1021753 

 

아두이노 WS2812B 네오픽셀 LED 모듈 코딩

안녕하세요~ 인투피온입니다. 오늘은 WS2812B 네오픽셀 모듈 사용법에 대해서 알아보겠습니다. ​ 먼저 아래 그림에 보이는 검은색 칩은 WS2812으로 GND, VDC, Data In, Data Out 4개의 핀 만 있으면 사

intopionshop.tistory.com

 

 

RGB 코드

 

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
#include <Adafruit_NeoPixel.h>
#define PIN 6  // DI 핀번호
#define N_LEDS 16 // 네오픽셀 LED 갯수
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);   
//NEO_GRB <= 네오픽셀 타입 ,  NEO_KHZ800 <= 클럭 주파수
 
void setup() {
  strip.setBrightness(100);   // 네오픽셀 밝기
  strip.begin();  // 네오픽셀 시작
}
 
void loop() {
  int R = 0;
  int G = 0;
  int B = 0;
 
  R = 255;
  G = 0;
  for (int B = 0; B < 256 ; B+=50) {
    chase(strip.Color(R, G, 0));
    R -= 50;
    G += 50;
  }
 
  G = 255;
  B = 0;
  for (int R = 0; R < 256 ; R+=50) {
    chase(strip.Color(0, G, B));
    G -= 50;
    B += 50;
  }
 
  B = 255;
  R = 0;
  for (int G = 0; G < 256 ; G+=50) {
    chase(strip.Color(R, 0, B));
    B -= 50;
    R += 50;
  } 
 
}
 
static void chase(uint32_t c) {
  for (uint16_t i = 0; i < strip.numPixels() + 4; i++) {
    strip.setPixelColor(i  , c); // i 번째 픽셀에 LED 색상 지정
    strip.setPixelColor(i-30); // i-3 픽셀에 색상 0을 지정하여 지움
    strip.show();
    delay(80);
 }
 

 

 


chase() 함수

 

1
2
3
4
5
6
7
static void chase(uint32_t c) {
  for (uint16_t i = 0; i < strip.numPixels() + 4; i++) {
    strip.setPixelColor(i  , c); // i 번째 픽셀에 LED 색상 지정
    strip.setPixelColor(i-30); // i-3 픽셀에 색상 0을 지정하여 지움
    strip.show();
    delay(80);
 }
 

 

 

ex) strip.setPixelColor(i-3, 0); 일 경우

 

LED 개수 설정

 

(0 - 3) , (1 - 3), (2 - 3) 은 모두 0보다 작기 때문에 i 위치 LED는 모두 켜집니다.

이후 i = 3 이 되면 3번 위치 LED는 켜지고

(3 - 3 = 0) 이 되어 0번 자리는 꺼지게 됩니다.

4개를 출력하고자 하면 ' i - 4 '를 해주시면 됩니다.

LED의 속도는 delay();를 통해 조절해 주세요.

 

 

RGB 영상

 

LED RGB 동작 영상

 

랜덤 위치 소스코드

 

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
#include <Adafruit_NeoPixel.h>
#define PIN 6  // DI 핀번호
#define N_LEDS 16 // 네오픽셀 LED 갯수
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);   
//NEO_GRB <= 네오픽셀 타입 ,  NEO_KHZ800 <= 클럭 주파수
 
void setup() {
  strip.setBrightness(100);   // 네오픽셀 밝기
  strip.begin();  // 네오픽셀 시작
}
 
void loop() {
  int R = 0;
  int G = 0;
  int B = 0;
 
  R = 255;
  G = 0;
  for (int B = 0; B < 256 ; B+=50) {
    chase(strip.Color(R, G, 0));
    R -= 50;
    G += 50;
  }
 
  G = 255;
  B = 0;
  for (int R = 0; R < 256 ; R+=50) {
    chase(strip.Color(0, G, B));
    G -= 50;
    B += 50;
  }
 
  B = 255;
  R = 0;
  for (int G = 0; G < 256 ; G+=50) {
    chase(strip.Color(R, 0, B));
    B -= 50;
    R += 50;
  } 
 
 
}
 
static void chase(uint32_t c) {
      uint16_t i=random(0,16);
      uint16_t j=random(0,16);
      strip.setPixelColor(i  , c); //i 번째 픽셀에 LED 색상 지정
      strip.setPixelColor(j  , 0); //j 번째 픽셀에 LED 색상 지정
      strip.show();
      delay(50);
}
 

 

 


chase() 함수

 

static void chase(uint32_t c) {
      uint16_t i=random(0,16);
      uint16_t j=random(0,16);
      strip.setPixelColor(i  , c); //i 번째 픽셀에 LED 색상 지정
      strip.setPixelColor(j  , 0); //j 번째 픽셀에 LED 색상 지정
      strip.show();
      delay(50);
}

 

변수 ' i ' 와 ' j '에 랜덤 위치를 각각 지정해 ' i '는 불을 켜고 ' j '는 불을 끄는 함수에요.

 

 

랜덤 위치 영상

 

LED 랜덤 위치 동작

 

 

다음 시간엔 챕터 3 로 소리 크기에 따라 달라지는 LED에 대한

강의를 이어나가도록 하겠습니다!

 

 

감사합니다.

 

 

 

 

 

전자부품 전문 쇼핑몰 인투피온입니다.
필요한 자재에 관한 문의는 홈페이지를 통한 견적 신청, 혹은 전화나 메일로 주시면 빠른 회신을 드릴 수 있도록 하겠습니다.

▶ 홈페이지: http://intopion.com/
▶ 전화: 02-2615-7278
▶ FAX : 02-6124-4242
▶ 메일: intopion@hanmail.net