아두이노

아두이노 IR신호를 이용해서 네오픽셀 LED제어하기(Neopixel led)

난쏘공돌이 2021. 9. 2. 00:51

내방을 리모컨을 사용해 RGB 감성으로 꾸며보자! (1/2)

※최종코드는 다음 포스팅에 있습니다!

2021.09.02 - [분류 전체보기] - 내방을 리모컨을 사용해 RGB 감성으로 꾸며보자! (2/2)

 

방청소를 하면서 책상을 좀 꾸며볼까 하는 생각을 하게 되었다.

 

이전에

2021.01.05 - [라즈베리파이 프로젝트] - 라즈베리파이로 네오픽셀 led제어하기 (WS2812B)

 

라즈베리파이로 네오픽셀 led제어하기 (WS2812B)

이번포스팅은 라즈베리파이에서 네오픽셀 led스트립을 제어하는 방법을 써보려고 한다. 일단 네오픽셀 led스트립은 이렇게 생겼으며, 이를 제어하기 위해서는 아두이노던, 라즈베리파이던 간에

nan-sso-gong.tistory.com

라즈베리파이로 한번 led를 제어하는 것을 포스팅한적이 있었는데 그때 사용했던 라즈베리파이를

다른 프로젝트에 사용하게 되어 이번에는 아두이노를 사용해서 책상을 꾸며보기로 했다.

 

또한 라즈베리파이는 원격접속을통해 여러가지 패턴의 led출력을 조절할수 있었는데, 아두이노는 그렇지 못하기에

이번 작업에서는 리모컨을 사용한 IR신호를 통해 패턴을 제어하려고 한다!


1. 프로젝트 준비물.

이번에 사용할 부품은 아래와 같다.

점프선 , IR수신기 , 아두이노 우노 , 집에 굴러다니는 리모컨

https://mechasolution.com/shop/goods/goods_view.php?&goodsno=539670 

IR수신기센서는 링크에 있는 제품인 Gravity 디지털 적외선 수신부 를 사용했다.

 

전자부품 전문 쇼핑몰 메카솔루션입니다.

국내 최대 전자부품 쇼핑몰, 아두이노 키트, 라즈베리파이 등 당일발송, 예제 제공, 쇼핑 그 이상을 제공합니다.

mechasolution.com

이번에 사용할 아두이노의 라이브러리는 2개이다

#include <Adafruit_NeoPixel.h> 
#include <IRremote.h>

두개 다 아두이노IDE의 라이브러리 관리에서 검색해서 설치할수 있는 라이브러리들이다.

 

설치를 했다면 다음 단계로 넘어가도록 하자.

 

2. 리모컨 신호 확인

우리는 앞서 이런 리모컨을 사용해 아두이노를 제어하기로 했다.

여러분은 다른 리모컨이어도 무방하다! 필자는 집에있는 라디오 리모컨을 사용했다

 

먼저 리모컨 신호를 수신하여 그것을 매핑할수 있어야하는데 아두이노 IR센서를 먼저 연결하여 확인해보자.

#include <IRremote.h>
 
#define IRRECV_PIN 2 // IR 수신 핀 할당
 
// IR 수신 클래스 객체 생성
IRrecv irrecv(IRRECV_PIN);
// IR 수신하여 복조된 데이터 클래서 객체 생성(수신된 데이터의 저장소)
decode_results results;
// decodeType 출력을 편하게 하기위한 문자열 배열
String decodeType[19] = {
                          "UNKNOWN", // decodeType : -1
                          "UNUSED", // decodeType : 0
                          "RC5",
                          "RC6",
                          "NEC",
                          "SONY",
                          "PANASONIC",
                          "JVC",
                          "SAMSUNG",
                          "WHYNTER",
                          "AIWA_RC_T501",
                          "LG",
                          "SANYO",
                          "MITSUBISHI",
                          "DISH",
                          "SHARP",
                          "DENON",
                          "PRONTO",
                          "LEGO_PF",
                      };
 
void setup()
{
    Serial.begin(9600);
    delay(3000);
    Serial.println(F("IR Recv Program Start..."));
    irrecv.enableIRIn(); // IR 리시버 동작 시작
    //irrecv.blink13(true);
}
 
void loop() {
    // irrecv.decode(&results) 수신된 IR 데이터 처리가 문제 없는 경우 1(TRUE)을 반환
    if (irrecv.decode(&results)) {
        // DecodeType, Data, Bit 수를 출력
        Serial.println(F("========================================"));
        Serial.print(F("Decode Type        : "));
        Serial.println(decodeType[results.decode_type+1]);
        Serial.print(F("Received Data      : 0x"));
        Serial.println(results.value, HEX);
        Serial.print(F("Received Data Bits : "));
        Serial.println(results.bits);
        irrecv.resume(); // 다음신호를 받을 수 있도록 준비
    }
    delay(100);
}

소스코드는 다음과 같으며, 아두이노와 센서의 배선은

https://blog.naver.com/roboholic84/221923009066  이처럼 작성했다.

다만 해당 센서는 3.3v전압에서도 작동을 잘하는것을 확인하였기 때문에 3.3v전압을 인가해도된다. 

 

위의 코드와 아래처럼 배선을 완료했다면 구동을 시켜보도록하자

구동을 시키게 되면 아래와 같이 신호를 확인할수 있다

이 값들을 버튼과 값을 매칭해서 따로 적어두도록 하자.

이 값들은 다음 포스팅에서 제어용도로 사용되게 될 것이다!