[아두이노 공부] 9. 적외선(IR)센서 사용해보기 - 리모컨을 이용한 LED 조작
공부/아두이노, 전자·전기

[아두이노 공부] 9. 적외선(IR)센서 사용해보기 - 리모컨을 이용한 LED 조작

 

안녕하세요.

기계과 감성쟁이입니다.

 

오랜만에 아두이노 글이네요.

센서랑 배터리팩 같은걸 샀는데, 오랜만에 하는 겸

쉽게쉽게 원래 하던 적외선 센서 이용했습니다.

 

1. 적외선 값 받아오기


 

 

 

아두이노 적외선 리모컨/수신모듈/LED/점퍼선 포함 28/100 : 송파 메이커스페이스

아두이노 적외선 리모컨/수신모듈/LED/점퍼선 포함 28/100

smartstore.naver.com

 

리모컨은 이 모델을 구매 했습니다.

리모컨 각각에서 나오는 신호를 수정할 수는 없고,

 

신호는 생각보다 쌥니다.

송신모듈보다 훨씬 좋아요.

 

 

[아두이노 공부] 7. 적외선(IR) 센서 사용해보기 - 적외선 수신값 확인

안녕하세요. 기계과감성쟁이입니다. 오늘은 적외선 수신모듈을 활용한 적외선 수신값 확인을 공부했어요. 회로도 아두이노 회로도 그리는 프로그램 좋은 거 어디 없나... 무료로...... 전과 같이,

senti-mech.tistory.com

 

위 게시글에 맞춰서,

수신값을 확인해봅시다.

 

 

차례대로 1,2,3번을 눌렀을 때

적외선 수신값입니다.

 

2. switch case 문을 이용하여 LED 켜기


 

이렇게 구성되어 있구요

 

#include <IRremote.h>
int ir_recieve = 10; //입력핀의 설정
int led_a = 3;
int led_b = 5;
int led_c = 6;

IRrecv irrecv(ir_recieve); //IRrecv 객체생
decode_results signals;  //수신 데이터 저장 구조체

void setup()
{
    Serial.begin(9600);   //시리얼모니터
    irrecv.enableIRIn();   //수신시작
    pinMode(3, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);
}

void loop()

{

if (irrecv.decode(&signals)) {
     Serial.println(signals.value, HEX);
     Serial.println(signals.bits, DEC);
     irrecv.resume(); // 편의상 그냥 넣어둔 기능
        
  switch (signals.value) 
  
  {
        
    case 0xFFA25D:
      digitalWrite(3,1);
      break;
      
    case 0xFF629D:
      digitalWrite(5,1);
      break;
      
    case 0xFFE21D:
      digitalWrite(6,1);
      break;
      
  }
  
    irrecv.resume();
    
  
  }
}

 

switch, case 문은

 

switch (판단할 값) {

   case 데이터 :

      실행코드

      break;

 

   default  기본값 :

      실행코드

      break;

 

로 사용할 수 있고,

break 는 switch 문 밖으로 빠져나가는 것을 의미합니다.

 

 

#include <IRremote.h>
int ir_recieve = 10; //입력핀의 설정

IRrecv irrecv(ir_recieve); //IRrecv 객체생
decode_results signals;  //수신 데이터 저장 구조체

void setup()
{
    Serial.begin(9600);   //시리얼모니터
    irrecv.enableIRIn();   //수신시작
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);
    pinMode(9, OUTPUT);
}

void loop()

{

  if (irrecv.decode(&signals)) {
     Serial.println(signals.value, HEX);
     Serial.println(signals.bits, DEC);
     irrecv.resume();
        
    switch (signals.value) 
  
    {
        
    case 0xFFA25D:
      analogWrite(5,50);
      break;

    case 0xFF22DD:
      analogWrite(5,0);
      break;
      
    case 0xFF629D:
      analogWrite(6,50);
      break;

    case 0xFF02FD:
      analogWrite(6,0);
      break;
      
    case 0xFFE21D:
      analogWrite(9,50);
      break;

    case 0xFFC23D:
      analogWrite(9,0);
      break; 
      
  }
  
    irrecv.resume();

  }
}

 

digitalWrite로 했더니 눈이 너무 아프더라구요...

analogWrite로 바꾸고, 끄는 기능도 넣었습니다.

 

랜덤밝기 같은 경우 random() 함수로,

같은 버튼으로 끄고 켜기, 또는 밝기가 점점 변하게 하는 것은 analogRead() 함수로 가능합니다.

 

간단해서 따로 적지는 않을게요!

 

3. 결과물


 

 

잘 되는군여...

다행입니다.

 


 

서보모터 쓰려고 배터리팩을 샀는데

선이 생각했던 거랑 다르게 생겨서 일단 이거라도 올려봤읍니다...