이 프로젝트는 안드로이드 모바일로 TV, 위성 수신기, 오디오 시스템을 제어하는 방법을 보여줍니다.
기본적으로 이 기술은 리모컨으로 작동하는 모든 기기에 적용 가능합니다. 각 기기의 리모컨 대신 휴대폰 하나로 집 안의 모든 기기를 제어할 수 있으면 좋겠다고 생각했습니다.
이제 휴대폰의 단 1개 애플리케이션으로 원하는 만큼 많은 집 안 리모컨 기기를 제어할 수 있습니다!
첫째, 구글 플레이 스토어에서 안드로이드 애플리케이션을 다운로드해야 합니다. 애플리케이션
둘째, 리모컨 디코딩을 해야 합니다.
리모컨 손전등의 송신기는 사용자가 손전등의 버튼을 누를 때 적외선 펄스 스트림을 보냅니다. 송신기는 주로 리모컨 손전등의 앞쪽에 내장된 발광 다이오드(LED)입니다. 적외선 펄스는 해당 버튼 고유의 패턴을 형성합니다. 기기의 수신기는 이 패턴을 인식하고 기기가 해당 동작을 수행하도록 합니다(위키피디아).
따라서 각 버튼의 고유 패턴을 알아야 합니다.
간단히 아두이노용 IR 라이브러리를 다운로드하세요.
그 라이브러리의 예제에서 IRrecvDump 예제를 찾을 수 있습니다(세 번째 이미지 참조). 이 코드는 리모컨에서 데이터를 인코딩하는 데 사용됩니다.
IR 수신기를 배선해야 합니다. 그림과 같이:
1- 그라운드
2- 5V
3- 핀 11
이 코드를 아두이노에 업로드한 후 시리얼 모니터를 열고 TV 리모컨의 아무 버튼이나 누르면 다섯 번째 이미지 같은 결과를 볼 수 있습니다.
네 번째 이미지에서 볼 수 있듯이, 리모컨 각 버튼을 가리키는 16진수 코드를 찾을 수 있습니다. 이 16진수 숫자를 해당 기능에 맞춰 적어두세요 (예: 20DFC03F, 32는 전원 버튼).
참고, "unknown encoding"이 뜨면 버튼을 다시 누르세요.
이제 장치에 명령을 전송하는 코드를 업로드해야 합니다. 코드는 있지만 리모컨에 따라 작은 수정이 필요합니다.
여기서 해야 할 일은 16진수 값을 (0x20DF10EF)처럼 전원 버튼, 볼륨 업/다운 버튼 등 원하는 버튼에서 얻은 값으로 교체하는 것입니다.
1Sheeld 모바일 애플리케이션에 리모컨 인터페이스가 없어 키패드 실드를 리모컨 컨트롤러로 사용했습니다. 더 많은 기기를 위해 키보드 실드를 선택할 수도 있습니다.
테스트
마지막으로, 아두이노 핀 3에 IR LED를 연결하고 장치 앞에 놓으세요.
이제 1Sheeld 모바일 애플리케이션을 열고 실드와 연결한 후 키패드 실드를 선택하세요. 이 모든 과정이 비디오에 나와 있습니다.
이제 휴대폰에서 버튼을 누르면 전원 켜기, 볼륨 업/다운 등 해당 작업이 수행됩니다.
코드
리모컨 제어 코드 (C/C++)
키패드 실드의 여러 버튼을 사용하여 TV 켜기/끄기, 위성 수신기 채널 변경, 오디오 제어.
#include
#include
IRsend irsend;
void setup() {
OneSheeld.begin();
}
void loop() {
if (Keypad.isRowPressed(0) && Keypad.isColumnPressed(0)) {
irsend.sendNEC(0x20DF10EF, 32);
} else if (Keypad.isRowPressed(0) && Keypad.isColumnPressed(1)) {
irsend.sendNEC(0x20DFC03F, 32);
} else if (Keypad.isRowPressed(0) && Keypad.isColumnPressed(2)) {
irsend.sendNEC(0x20DF40BF, 32);
} else if (Keypad.isRowPressed(1) && Keypad.isColumnPressed(1)) {
irsend.sendNEC(0x41048B7, 32);
} else if (Keypad.isRowPressed(1) && Keypad.isColumnPressed(0)) {
irsend.sendNEC(0x410C837, 32);
} else if (Keypad.isRowPressed(2) && Keypad.isColumnPressed(0)) {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa81, 12); // 소니 TV 전원 코드
delay(40);
}
}
}