더 나은 세상은 가능하다, 이정환닷컴!

회전식 볼륨 리모컨 만들기.

Written by leejeonghwan

August 20, 2022

애플 리모컨을 대신할 만한 회전식 볼륨을 만들고 싶었다. 그러니까 손으로 돌려서 소리를 키우거나 줄일 수 있는 리모컨이 필요했다. 유선으로 연결해도 좋지만 여러 가지 사정으로 무선이면 더 좋겠다 싶었고 지금 쓰고 있는 버튼식 리모컨을 그대로 활용하면서 물리적인 볼륨 조절이 가능하면 좋겠다는 생각을 했다.

놀고 있던 아두이노를 꺼내서 이것저것 해봤는데 공개돼 있는 코드가 제대로 작동하는 게 없다. 보통 TV나 오디오 등 가전 제품에 쓰는 리모컨이 대부분 IR(적외선) 방식인데 장점은 전력 소모가 적고 가격도 싸다는 거지만 도달 거리가 1미터도 채 되지 않고 직선으로 쏴야 한다는 게 한계다. 하지만 별 수 없이 IR 방식의 리모컨을 만들기로 했다.

아날로그 기기에서는 볼륨을 키우거나 줄일 때 회전식 가변 저항을 썼는데 (오른쪽으로 돌리면 저항 값이 줄어들어 볼륨이 커지는 효과) 디지털에서는 전위 차이를 확인해서 왼쪽으로 돌고 있는지 오른쪽으로 돌고 있는지 구분하고 볼륨 값을 높이거나 낮춰준다. 그걸 로터리 인코더라고 한다. 결국 그래서

– 필요한 건 로터리 인코더에서 회전 방향을 읽어서 신호를 만들고 그 신호를 IR 송신 모듈로 내보내는 것.
– 깃허브에 공개돼 있는 코드를 합쳐서 손 봤고 (라이브러리가 업데이트되면서 옛날 코드가 작동이 안 됐던 것을 해결.)
– 애플 리모컨 전송 코드를 확인했고(IR 수신 모듈을 먼저 설치해서 버튼 값을 읽어냈다.)
– 로터리 인코더와 IR 송신 모듈을 연결해서 간단히 해결.

– 코드를 좀 볼 줄 아는 사람들은 금방 이해하겠지만 로터리 인코더는 CLK를 6번 핀에 DT를 7번 핀에, IR 모듈은 DATA를 3번 핀에 연결하면 된다.
– 여전히 단점은 도달거리가 매우 짧다는 것, 막대기형 리모컨이 여전히 편리한 점도 있다. 조준해 놓고 고정된 위치에 두고 쓰는 것도 방법.

– 로터리 인코더에 누름 버튼도 아직 비어 있으니 여기에 몇 가지 기능을 더 심거나, IR 신호를 더 키우는 방법을 찾거나, 등등 몇 가지 가능성이 더 있다.
– 건전지 문제를 해결하고 케이스만 적당한 거 골라주면 꽤 쓸만할 듯. (동전 전지는 전류가 부족해서 금방 아웃되는 듯. 전력 소모를 줄이는 방법도 고민해야 하고.)

일단 참고 삼아, 애플 리모컨의 신호 값(value)은 다음과 같다. (사실 IR 리모컨이면 뭐든 신호 값만 알면 커스터마이제이션 할 수 있다. 에어컨 온도도 볼륨 다이얼로 조절할 수 있다.)

왼쪽 버튼 : 77E190BF.
오른쪽 버튼 : 77E160BF.
위쪽 버튼 : 77E150BF.
아래쪽 버튼 : 77E130BF.
가운데 버튼 : 77E13ABF.
메뉴 버튼 : 77E1C0BF.
플레이 버튼 : 77E1FABF.

전체 코드는 다음과 같다.

//https://leejeonghwan.com/

#include
IRsend irsend;

#define volumeUp 17
#define volumeDown 18

int val;
int encoder0PinA = 6;
int encoder0PinB = 7;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;

static int cero=0;
long unsigned int irCode;

int cmdReceived;

void setup(){
IrSender.begin(3, ENABLE_LED_FEEDBACK);
Serial.begin(9600);
pinMode (encoder0PinA, INPUT);
pinMode (encoder0PinB, INPUT);
}

void loop(){
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
encoder0Pos–;
IrSender.sendNEC(0x77E130BF,32);
delay(40);
Serial.println (“volume down”);
} else {
IrSender.sendNEC(0x77E150BF,32);
delay(40);
Serial.println (“volume up”);
encoder0Pos++;
}
Serial.println (encoder0Pos);
}
encoder0PinALast = n;
}

 

깃허브에도 공개. https://github.com/leejeonghwan/ir_volume_control/

 

—–

2009년에 나온 애플 리모컨 2세대는 정말 신기한 물건이다. (13년이 지난 지금도 팔리는 제품이다.) 손이 베일 듯 얄상하고 가벼운데 직관적이다. 눈을 감고도 버튼을 찾을 수 있을 정도. 알루미늄을 통으로 절삭해서 만들었는데(통짜 쇳덩어리) 분해도 안 되고 이음매 조차도 없다. 구멍 보다 더 큰 부품들이 안에 들어가 있는데, 핀셋으로 병 안에 배를 만드는 것과 같은 공정으로 만든다고.
“The Apple TV’s remote control represents more incredible mechanical engineering from Apple. The remote appears to machined from a solid piece of aluminum. Because of this, the electronics of the device must be slid in through small holes on the side, similar to putting a ship in a bottle. It’s a clever and a detail-oriented piece of design that makes the remote very pricey and very unique to Apple.”

.

www.leejeonghwan.com
leejeonghwan.com audio
Voiced by Amazon Polly

Related Articles

Related

절벽에서 뛰어내리면서 비행기를 조립한다는 것.

절벽에서 뛰어내리면서 비행기를 조립한다는 것.

오늘 아침 주주총회를 끝으로 미디어오늘에서 제 역할은 끝났습니다. 오후에는 자유언론실천재단에서 “ChatGPT와 저널리즘의 책임”을 주제로 특강이 있는데 이게 제가 미디어오늘 대표로 나서는 마지막 대외 행사가 되겠네요. 끝나고 선배들 저녁 식사 대접을 하기로 했습니다. 다음 주부터 몇 가지 계획이 있는데요. 1. 4월부터 슬로우뉴스 대표를 맡기로 했습니다. 유한회사 슬로우뉴스를 주식회사로 전환하고 제가 100% 지분을 인수하기로 했습니다. 기자들도 뽑고 콘텐츠도...

라즈베리 파이 오디오 만들기.

라즈베리 파이 오디오 만들기.

시간 날 때마다 만들었던 라즈베리파이 오디오. 드디어 완성. 사실 별 거 없는데 여기저기서 부품 조달하고 거기에 맞춰 도면 만드는 게 힘들었습니다. build log는 영어로. This is my new network audio system. All in one Integrated Amplifier. 1. Raspberry Pi 4B. 2. Hifiberry DAC+DSP. 3. 7 inch touch screen for raspberry pi. 4. Chromecast...

미디어오늘을 떠납니다.

미디어오늘을 떠납니다.

미디어오늘에 경력 기자로 입사해 편집국장으로 3년, 사장으로 6년을 지냈습니다. 다행히 월급날을 한 번도 밀리지 않았고요. 열심히 벌어서 금융 부채를 모두 정리했고 만성적인 자본잠식에서 벗어났습니다. 언론사 경영이라는 게 날마다 전쟁 같았지만 한 번도 원칙과 정도를 벗어나지 않았다고 자신할 수 있습니다. 제가 지속가능한 미디어오늘을 위한 성장 엔진을 만드는 데 기여했다면 지난 15년이 헛되지 않았다고 생각할 수 있을 것 같습니다. 미디어오늘 지면에 대해서는 자부심과 아쉬움이...

더 나은 세상은 가능하다, 이정환닷컴!

Join

Subscribe For Updates.

이정환닷컴 뉴스레터를 구독하세요.

.

www.leejeonghwan.com