본문 바로가기
개발 공부/프로젝트

적외선 리모컨 만들기

by momo'sdad 2023. 11. 23.

적외선 리모컨 만들기

 

1. 사용자가 스마트폰의 리모컨 앱에서 버튼 클릭

2. 리모컨 앱은 해당 버튼에 해당하는 블루투스 신호를 아두이노에 전송

3. 아두이노에서는 받은 신호 값에 따라 해당하는 적외선 신호를 출력

 

디자인은 일반적인 리모컨과 같고

아두이노의 소스코드는 기존에 올렸던 것과 완전히 동일하다. 적외선 신호값만 바꾸어 주면 잘 작동할 것이다.

 

#include <SoftwareSerial.h>
#include <IRremote.h>
IRsend irsend;
SoftwareSerial btSerial(4,5);

void setup() {
  btSerial.begin(9600);
  pinMode(13,OUTPUT);
}

void loop() {
  if (btSerial.available()){
    char bt = btSerial.read();
    // Turn on/off
    if(bt == 'p') {
      irsend.sendNEC(0x20DF10EF, 32);
      delay(500);
      irsend.sendNEC(0x122430CF, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    // volume up/down
    else if(bt == 'v') {
      irsend.sendNEC(0x1224C837, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    else if(bt == 'w') {
      irsend.sendNEC(0x122428D7, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    // channel up/down
    else if(bt == 'c') {
      irsend.sendNEC(0x1224E817, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    else if(bt == 'd') {
      irsend.sendNEC(0x122418E7, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    // channel
    else if(bt == '0') {
      irsend.sendNEC(0x122400FF, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    else if(bt == '1') {
      irsend.sendNEC(0x1224807F, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    else if(bt == '2') {
      irsend.sendNEC(0x122440BF, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    else if(bt == '3') {
      irsend.sendNEC(0x1224C03F, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    else if(bt == '4') {
      irsend.sendNEC(0x122420DF, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    else if(bt == '5') {
      irsend.sendNEC(0x1224A05F, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    else if(bt == '6') {
      irsend.sendNEC(0x1224609F, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    else if(bt == '7') {
      irsend.sendNEC(0x1224A659, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    else if(bt == '8') {
      irsend.sendNEC(0x122400FF, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
    else if(bt == '9') {
      irsend.sendNEC(0x1224906F, 32);
      delay(500);
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
    }
  }
}
반응형