어쩌다보니 또 리모콘으로 돌아온 YC입니다. 대신 이번엔 훨씬 간단한 방법으로 만들어볼거에요.
포인투랩 회의실에는 5년쯤 된 Sony TV가 하나 있는데요, 리모콘이 없어 항상 손으로 TV를 켜고, 외부입력을 변경하고, 볼륨 조절을 하고 했드랬죠. 왜그랬을까요? 안그래도 버튼들이 뒤쪽 아래에 위치해있어서 불편했는데, 버튼 몇번만 누르면 되니 그냥 감수하고 썼었나봅니다. 지난번 아이언맨 피규어를 리모콘으로 만들어보자! 포스트에서는 기존에 있는 리모콘의 신호를 IR Receiver를 통해 받아서 패턴을 저장하여 사용하는 방법을 사용했는데요, 이번엔 단순하게 IRRemote 라이브러리를 이용하여 이미 알려져있는 Sony TV 리모콘 동작 코드를 넣어줄거에요. 원래는 전원버튼까지 버튼을 4개 장착하려 했는데, 하필 또 3개 밖에 보이지 않아서, 아두이노에 전원이 공급되면 1초 후 자동으로 TV를 켜도록 프로그래밍을 하였습니다.
준비물:
Arduino Nano x 1
IR LED x 1
푸시버튼 x 3
회로 기판 x 1
저항, 전선 등등
하드웨어 연결:
기판에 아두이노를 적당한 위치에 납땜해주구요.
저항과 전선들로 각 component들을 연결해줍니다.
아두이노 프로그래밍:
코드가 제대로 동작하기 위해서는 IRremote 라이브러리를 설치해주어야 합니다. 그리고 IRremote 라이브러리가 RobotIRRemote 라이브러리와 충돌이 있을 때가 있기 때문에, 기존 Arduino 폴더 안에 있는 RobotIRRemote가 필요없다면 다른 폴더 위치로 옮겨 버립니다. IRremote 라이브러리를 사용할 때에 IR LED는 꼭 3번 output에 연결해주어야 합니다.
#include <IRremote.h> #include <IRremoteInt.h> IRsend irsend; int IRledPin = 3; // LED connected to digital pin 3 int inputPin = 10; int volUpPin = 12; int volDownPin = 11; void setup() { // initialize the IR digital pin as an output: pinMode(IRledPin, OUTPUT); pinMode(inputPin, INPUT); pinMode(volUpPin, INPUT); pinMode(volDownPin, INPUT); Serial.begin(9600); Serial.println("Turn on TV"); delay(1000); for (int i = 0; i < 3; i++) { irsend.sendSony(0xa90, 12); // Sony TV power code delay(40); } Serial.println("Done"); delay(5000); } void loop() { digitalWrite(inputPin, HIGH); digitalWrite(volUpPin, HIGH); digitalWrite(volDownPin, HIGH); if ((digitalRead(inputPin) == 0) && (digitalRead(volUpPin) == 1) && (digitalRead(volDownPin) == 1)){ /* SelectInput(); */ Serial.println("Change Input"); for (int i = 0; i < 3; i++) { irsend.sendSony(0xA50, 12); delay(40); } delay(500); } else if((digitalRead(inputPin) == 1) && (digitalRead(volUpPin) == 0) && (digitalRead(volDownPin) == 1)){ /* VolumeUp(); */ Serial.println("Volume Up"); for (int i = 0; i < 3; i++) { irsend.sendSony(0x490, 12); delay(40); } delay(150); } else if ((digitalRead(inputPin) == 1) && (digitalRead(volUpPin) == 1) && (digitalRead(volDownPin) == 0)){ /* VolumeDown(); */ Serial.println("Volume Down"); for (int i = 0; i < 3; i++) { irsend.sendSony(0xC90, 12); delay(40); } delay(150); } else { Serial.println("no command received"); } }
Sony 리모콘에 사용되는 각종 코드는 인터넷 검색 중 이곳에서 발견했답니다. http://lirc.sourceforge.net/remotes/sony/RM-Y173
코드에서 볼 수 있듯이 아두이노에 전원을 연결하면 1초 후 Power On 코드를 날리고 5초 휴식 후 리모콘 모드가 발동이 됩니다. 원하는 동작에 맞게 0x490 (volume up), 0xC90 (volume down) 등등 여기저기 코드를 수정해주시면 되겠습니다.
마무리로 설명충처럼 열심히 설명을 써주었는데요, 글씨가 참… 좀 그렇네요. 일단 동작은 정말 잘 한답니다.
실제 동작 동영상은 담번에 업데이트 하도록 할게요.
크흐~ 추억의 납땜질!