먼저 포스트에서 아두이노를이용하여 다양한 리모콘의 신호를 해킹하는 방법을 알아 보았습니다.
https://diy-dev-design.tistory.com/65
그럼 이제 신호를 TV, 안드로이드 TV BOX, 블루투스 사운드바 에 각각 보내는 테스트를 해볼 차례 입니다.
앞선 포스트에서 확인이 가능하겠지만 제가 테스트를 통해 모은 신호는 아래와 같습니다.
* tv (NEC)
* power : 0x2DF10EF, 32
* input : 0x2DFD02F, 32
* chnnel up : 0x2DF00FF, 32
* chnnel dn : 0x2DF807F, 32
* volumn up : 0x2DF40BF, 32
* volumn dn : 0x2DFC03F, 32
* OK : 0x2DF22DD, 32
* sw up : 0x2DF02FD, 32
* sw dn : 0x2DF827D, 32
* sw left : 0x2DFE01F, 32
* sw right : 0x2DF609F, 32
*
* android tv (NEC)
* power : 0x807F02FD, 32
* sw up : 0x807F6897, 32
* sw dn : 0x807F58A7, 32
* sw left : 0x807F8A75, 32
* sw right : 0x807F0AF5, 32
* sw OK : 0x807FC837, 32
* back : 0x807F9867, 32
* volumn up : 0x807F18E7, 32
* volumn dn : 0x807F08F7, 32
*
*
* lonpoo speaker
* power : 0x40BF807F, 32
* volumn up : 0x40BF50AF, 32
* volumn dn : 0x40BFD02F, 32
* bt : 0x40BFA05F, 32
* bt esc : 0x40BF906F, 32
* opt : 0x40BF20DF, 32
*
*/
먼저 몇가지 확인이 쉬운 기능들을 테스트 할 예정입니다.
전원 ON/OFF 로 해보죠.
준비물은 아래와 같습니다.
- 아두이노 나노
- IR LED (송신용, 투명한 재질임)
- 10 k 정도 되는 저항, 저는 4.7k * 3 개
- push button 3개
간단하죠?
IR LED 는 전에 사 두었던 거리감지 쉴드에서 적출 하였습니다. 일정 거리 미만이 되면 신호를 보내는 쉴드 인데요. 마땅히 사용할 일이 없어 놀고 있던 보드에서 추출하였습니다.
버튼 역시 앞서 포스트에 등장했던 비디오 테이브 플레이어의 보드에서 적출 하였습니다. 다리 4개 짜리 버튼이 브래드보드에서 테스트 하기가 좋지 않기 때문에 뜯는 김에 버튼들도 추출을 진행하였습니다.
혹시 몰라 TR 도 하나 뜯어 보았는데 동작이 잘 안되면 연결해볼까 합니다.
일단 테스트 코드를 만들어 보겠습니다.
미리 준비하였던 신호들을 본인의 제품에 맞는 명령으로 보내면 되는데요. 일단 예제 중에 IRremote --> IRsendDemo 예제를 기본으로 시작을 하도록 하겠습니다.
해당 예제에 라이브러리를 추가(스케치--> 라이브러리 포함하기--> IRremote) 하고 아래와 같이 코딩을 합니다.
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
/*
* IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
* An IR LED must be connected to Arduino PWM pin 3.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/
/*
* tv (NEC)
* power : 0x2DF10EF, 32
* input : 0x2DFD02F, 32
* chnnel up : 0x2DF00FF, 32
* chnnel dn : 0x2DF807F, 32
* volumn up : 0x2DF40BF, 32
* volumn dn : 0x2DFC03F, 32
* OK : 0x2DF22DD, 32
* sw up : 0x2DF02FD, 32
* sw dn : 0x2DF827D, 32
* sw left : 0x2DFE01F, 32
* sw right : 0x2DF609F, 32
*
* android tv (NEC)
* power : 0x807F02FD, 32
* sw up : 0x807F6897, 32
* sw dn : 0x807F58A7, 32
* sw left : 0x807F8A75, 32
* sw right : 0x807F0AF5, 32
* sw OK : 0x807FC837, 32
* back : 0x807F9867, 32
* volumn up : 0x807F18E7, 32
* volumn dn : 0x807F08F7, 32
*
*
* lonpoo speaker
* power : 0x40BF807F, 32
* volumn up : 0x40BF50AF, 32
* volumn dn : 0x40BFD02F, 32
* bt : 0x40BFA05F, 32
* bt esc : 0x40BF906F, 32
* opt : 0x40BF20DF, 32
*
*/
#include <IRremote.h>
const int pw_tv = 4;
const int pw_and = 5;
const int pw_spk = 6;
IRsend irsend;
void setup()
{
pinMode(pw_tv, INPUT_PULLUP);
pinMode(pw_and, INPUT_PULLUP);
pinMode(pw_spk, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop() {
int s_pw_tv = digitalRead(pw_tv);
int s_pw_and = digitalRead(pw_and);
int s_pw_spk = digitalRead(pw_spk);
// tv 전원 역할 스위치 (평상시는 HIGH 입니다)
if (s_pw_tv == HIGH) {
digitalWrite(13, LOW);
}else{
digitalWrite(13, HIGH);
for (int i = 0; i < 3; i++) {
irsend.sendNEC(0x2DF10EF,32);
delay(40);
}
}
// 안드로이드 tv box 전원 역할 스위치 (평상시는 HIGH 입니다)
if (s_pw_and == HIGH) {
digitalWrite(13, LOW);
}else{
digitalWrite(13, HIGH);
for (int i = 0; i < 3; i++) {
irsend.sendNEC(0x807F02FD,32);
delay(40);
}
}
// 사운드 바 전원 역할 스위치 (평상시는 HIGH 입니다)
if (s_pw_spk == HIGH) {
digitalWrite(13, LOW);
}else{
digitalWrite(13, HIGH);
for (int i = 0; i < 3; i++) {
irsend.sendNEC(0x40BF807F,32);
delay(40);
}
}
delay(50); //5 second delay between each signal burst
}
3개의 버튼을 사용할 것이므로 3개의 입력핀을 설정한뒤 버튼이 눌렸을 때 LED (13번 핀, 아두이노 기본 LED) 를 켜주면서 3차례에 걸쳐 신호를 보내도록 코딩하였습니다.
저는 모든 신호의 제품이 NEC 로 확인 되었기 때문에 라이브러리의 sendNEC 라는 명령을 통해 신호를 보내 주었습니다.
보드는 아래와 같이 구성하였습니다.
코드를 보면 알겠지만 버튼은 모두 GND 에 연결하고 PULLUP 상태를 만들어 준 뒤 LOW 일때 동작하도록 하였습니다. 이렇게 하면 아두이노 내부 저항에 의해 별도의 외부 저항 없이 버튼 연결이 가능하게 됩니다.
IR LED 의 경우 방향이 정해져 있는데 어짜피 다이오드 이므로 신호가 나오는지 체크해서 신호가 안나오면 방향을 반대로 뒤집어 주면 됩니다.
신호가 나오는지는 핸드폰 카메라로 확인이 가능한데요, 신호가 나올때는 보라색으로 깜박깜박 합니다. 아래 영상을 참고하시면 됩니다.
해당 보드로 TV 와 안드로이드 TV box, 사운드바가 정상적으로 동작하는 것을 확인할 수 있습니다.
실제 LED 는 TR 없이 쇼파에서 문제 없이 동작하였으니 이제 실제 결과물을 만들어야 할 시간입니다.
동작할 기능은 많은데 모든 기능에 대하여 버튼을 만들어 넣을 수 는 없을 것 같으니 머리를 좀 써야 할 시간입니다. 이제부터 본격적인 개발이 시작된다고 할까요?
이거 뭐 껌이네요. 여러분도 한번 도전해 보시기 바랍니다.
자 대망의 만능 리모콘 만들기 3편은 다음 포스트에서 소개해 드리겠습니다.
그럼 이만~
2020/06/17 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘 만들기 3/3
2020/05/26 - [DIY/Arduino] - 0.96 inch OLED 디스플레이 구동하기
2019/06/27 - [DIY/Arduino] - 아두이노를 이용한 간단한 화분 자동 물주기 시스템
2022.03.26 - [DIY] - [DIY]무민양품 USB 데스크팬 수리하기
만능 리모컨 만들기 최종 완성본은 아래에서 확인하세요~
2022.08.16 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘 만들기 (최종)
'DIY > Arduino' 카테고리의 다른 글
0.96 inch OLED 디스플레이 구동하기 (0) | 2020.05.26 |
---|---|
Arduino(아두이노) 무작정 시작하기 (0) | 2020.03.23 |
[DIY] 아두이노로 만능 (통합) 리모콘 만들기 1/3 (4) | 2019.11.10 |
[DIY] 아두이노를 이용한 수경재배 시스템 (10) | 2019.10.29 |
아두이노를 이용한 간단한 화분 자동 물주기 시스템 (15) | 2019.06.27 |