산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

와이파이 지원 IR 리플리케이터: 원격으로 기기 제어하기

부품 및 소모품

앱 및 온라인 서비스

프로젝트 소개

얼마 전 에어컨 적외선 리모컨을 디코딩하여 와이파이로 에어컨을 제어하려는 목적으로 이 작업을 시작했습니다.

그 과정에서 많은 것을 배웠고, 그 지식을 여러분과 공유하여 향후 프로젝트에 도움이 되길 바랍니다(미래의 저도 포함). 파티클 포톤을 사용했지만, 이 프로젝트에서 사용하는 Ken Shirriff의 IRremote 아두이노 라이브러리는 다른 MCU도 많이 지원합니다. 공식 페이지도 참고하세요.

그 페이지에 많은 정보가 있으니, 적외선 신호가 어떻게 작동하는지 깊이 이해하려면 꼭 읽어보세요. 하지만 중요한 점들은 다음 섹션에서 정리하겠습니다.

IR 코드에 대한 배경 지식

다음은 작성자의 원본 글을 옮긴 것입니다:

IR 리모컨은 LED를 특정 패턴으로 켜고 끄는 방식으로 작동합니다. 그러나 햇빛이나 조명 같은 IR 소스로부터 간섭을 방지하기 위해 LED를 꾸준히 켜는 대신 변조 주파수(일반적으로 36, 38, 또는 40kHz)로 켜고 끕니다. 변조 신호가 전송되는 시간을 '마크(mark)', LED가 꺼진 시간을 '스페이스(space)'라고 부릅니다.

리모컨의 각 키에는 특정 코드(일반적으로 12~32비트)가 연결되어 있으며, 키를 누르면 이 코드를 브로드캐스트합니다. 키를 누르고 있으면 리모컨은 보통 키 코드를 반복 전송합니다. NEC 리모컨의 경우 키를 누르고 있으면 코드를 반복 전송하는 대신 특수한 반복 코드를 전송합니다. 필립스 RC5 또는 RC6 리모컨의 경우 키를 누를 때마다 코드의 한 비트가 토글되며, 수신기는 이 토글 비트를 사용하여 키가 두 번째로 눌렸는지 판단합니다.

수신 측에서 IR 검출기는 이 신호를 복조하여 신호 수신 여부를 나타내는 로직 레벨 신호를 출력합니다. IR 검출기는 송신기의 주파수와 일치할 때 가장 잘 작동하지만, 실제로는 크게 중요하지 않습니다.

이제 다음 단계로 넘어갈 준비가 되었습니다...

IR 수신 회로 구성하기

적외선 신호를 디코딩하려면 적외선 수신 다이오드가 필요합니다:

와이파이 지원 IR 리플리케이터: 원격으로 기기 제어하기

라이브러리에 명시된 대로 수신 회로를 구성합니다:

와이파이 지원 IR 리플리케이터: 원격으로 기기 제어하기

핀아웃은 다음과 같습니다:

와이파이 지원 IR 리플리케이터: 원격으로 기기 제어하기

제 브레드보드는 이렇게 되었습니다:

와이파이 지원 IR 리플리케이터: 원격으로 기기 제어하기

지금은 수신 다이오드(검은색)에만 집중하고 송신기(투명한 것)는 나중에 다루겠습니다.

IR 신호 디코딩하기

프로젝트가 수신된 코드를 시리얼 라인으로 덤프하므로 컴퓨터에 연결해야 합니다. USB 케이블로 포톤에 전원을 공급하고 컴퓨터의 USB 포트에 연결합니다. 지금이 첨부된 펌웨어를 플래싱하기 좋은 시점입니다.

콘솔이나 터미널을 열고 파티클 CLI로 USB 포트를 모니터링하세요.

참고: 파티클 CLI가 설치되어 있지 않다면 여기 문서를 따라 설치하세요.

우분투 리눅스에서 포톤의 시리얼 포트를 모니터링하기 위해 입력한 명령어:

$ sudo chmod 666 /dev/ttyACM0
$ particle serial monitor

컴퓨터와 운영체제에 따라 포트 이름이 다를 수 있고 chmod가 필요 없을 수도 있습니다.

참고: 컴퓨터의 USB 시리얼 포트에서 데이터를 수신하는 다른 소프트웨어를 사용해도 됩니다.

준비가 되면 디코딩하려는 리모컨을 IR 수신 다이오드(검은색 LED 같은 부품)에 대고 버튼을 누르세요. 콘솔에 출력되는 내용을 확인하세요.

모든 게 잘 되면 이런 출력이 나옵니다:

1FEA05F 29168950,8500,4050,500,1500,550,500,550,450,550,500,500,1550,500,500,550,500,500,500,550,500,500,500,550,450,550,500,550,1500,500,500,550,500,500,500,550,500,500,550,500,1500,550,1500,550,450,550,1500,550,500,500,1500,550,500,550,450,550,500,500,500,550,END 3,3,2,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,END

첫 번째 디코딩된 IR 명령어

수신된 IR 명령어에 대해 이야기해 보겠습니다:

29168950,8500,4050,500,1500,550,500,550,450,550,500,500,1550,500,500,550,500,500,500,550,500,500,500,550,450,550,500,550,1500,500,500,550,500,500,500,550,500,500,550,500,1500,550,1500,550,450,550,1500,550,500,500,1500,550,500,550,450,550,500,500,500,550,END

첫 번째 값 29168950은 IR 라이브러리에 따르면 "수신 버퍼가 첫 번째 마크 앞의 갭 스페이스 지속 시간으로 시작한다"고 하므로 무시할 수 있습니다. 이는 테스트 간 경과 시간이나 리모컨 버튼을 누르는 데 걸린 시간입니다.

따라서 수신된 출력에서 정말 흥미롭고 IR 명령어를 형성하는 것은 다음과 같습니다:

8500,4050,500,1500,550,500,550,450,550,500,500,1550,500,500,550,500,500,500,550,500,500,500,550,450,550,500,550,1500,500,500,550,500,500,500,550,500,500,550,500,1500,550,1500,550,450,550,1500,550,500,500,1500,550,500,550,450,550,500,500,500,550,END

이 숫자들은 마이크로초 단위의 적외선 펄스 지속 시간을 나타냅니다. 원한다면 다음 코드로 이 명령어를 전송할 수 있습니다:

function sendIt() {
  unsigned int ircommand[59]={8550,4000,550,1500,550,450,550,500,500,550,500,1550,500,500,500,500,550,500,500,500,550,500,500,500,550,500,500,1500,550,500,500,500,550,500,500,500,550,450,550,1500,550,1500,550,500,500,1500,550,500,550,1500,500,500,550,500,500,500,550,450,550};
  irsend.sendRaw(ircommand,59,38);
}

하지만 그러려면 송신 회로가 필요합니다. 다음에 만들겠습니다.

IR 송신 회로 구성하기

가장 간단한 회로는 다음과 같습니다:

와이파이 지원 IR 리플리케이터: 원격으로 기기 제어하기

하지만 이 회로는 1미터 미만의 범위만 제공합니다.

가능하다면 아래 회로처럼 배선하여 범위를 개선하세요(약 10미터):

와이파이 지원 IR 리플리케이터: 원격으로 기기 제어하기

제 회로의 송신 측은 이렇게 생겼습니다:

와이파이 지원 IR 리플리케이터: 원격으로 기기 제어하기

IR 송신 회로 테스트하기

펌웨어에 삼성 TV 볼륨을 제어하는 함수 두 개를 추가했습니다. 주변에 삼성 TV가 있다면 송신 회로가 작동하는지 테스트할 수 있습니다.

송신 LED를 TV에 대고 sendSamsungVolumeUp()과 sendSamsungVolumeDown() 함수를 실행하세요.

참고: 휴대폰 카메라로 IR LED가 송신 중인지 확인할 수 있습니다. 카메라에서 IR이 보이기 때문입니다:

와이파이 지원 IR 리플리케이터: 원격으로 기기 제어하기

IR 명령어를 더 읽기 쉽게 만들기

500μs 근처 값을 0, 1500μs 근처 값을 1로, 5000μs 이상을 3, 4000μs 근처를 2로 임의로 매핑하면 다음과 같은 표현이 됩니다:

3,3,2,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,END

이 임의 인코딩에서:

왜 숫자로 인코딩하냐고요? 명령어를 시각화하고 비교하기 쉽기 때문입니다. 이렇게 하면 다른 명령어 간에 변하는 펄스와 변하지 않는 펄스를 비교하기 쉽습니다.

예: 에어컨 리모컨에서 온도를 18도와 19도로 설정하는 명령어의 차이를 비교하고 싶다면? 0과 1로 되어 있으면 훨씬 쉽습니다.

이 형식을 펌웨어 코드에 IR 명령어를 저장하는 데도 좋아합니다. 전송 직전에 convertToPulseDuration() 함수를 호출하여 펄스 지속 시간으로 변환하는 것만 기억하세요.

참고 자료

이 주제를 이해하기 위해 여러 사이트를 읽었습니다. 그중 일부:

결론

약간의 작업과 MCU, 몇 가지 부품만 있으면 집 주변의 많은 리모컨을 디코딩하고 복제할 수 있습니다. 몇 가지 제약이 있지만, 이를 통해 휴대폰, 태블릿, 노트북, 컴퓨터로 그 모든 기기를 제어하고 간단한 자동화도 만들 수 있습니다. 멋지지 않나요?

와이파이 지원 IR 리플리케이터: 원격으로 기기 제어하기

이제 블링크(Blynk) 추가, 아이오닉 프레임워크로 앱 만들기, 구글 나우나 알렉사와 연동, 포터(Porter)로 제어하는 것 등을 생각해 볼 수 있습니다.

이 지식을 집 안의 몇 가지 기기 제어에 적용할 계획이고, 향후 더 많은 글을 쓸 수 있길 바랍니다. 기대해 주세요!

2018년 2월 5일 업데이트:

이 프로젝트의 구현체 중 하나: 인터넷으로 제어하는 적외선 벽난로.

도움이 필요하신가요?

프로젝트에 전문적인 도움이 필요하면 gusgonnet@gmail.com으로 요구 사항을 적어 보내주세요. 감사합니다!

소스 코드

infraredReplicator

소스 코드: https://github.com/gusgonnet/infraredReplicator

회로도

와이파이 지원 IR 리플리케이터: 원격으로 기기 제어하기

제조공정

  1. 화물차가 보쉬 상태 모니터링 시스템으로 지능형 IoT 자산이 되는 방법
  2. 기업 경계 허물기: 커넥티드 플랫폼으로 원활한 협업 실현
  3. 스마트 홈 보안: IoT 사이버보안에 생체인식이 필수적인 이유
  4. 사물인터넷: 연결된 세상을 엮다
  5. 교육 혁신: IoT 활용해 학습과 교수법 향상
  6. 리프 모션 제어 레이저 탱크 만들기 – 아두이노, 라즈베리 파이, RGB LED
  7. UnifiedWater v1 - 아두이노 MKR GSM 1400 기반 완전 수질 모니터링 센서 키트
  8. 라즈베리 파이와 아두이노로 만드는 와이파이 인터넷 라디오: 전 세계 방송 청취
  9. 커넥티드 에어 컴프레서가 이끄는 인더스트리 4.0과 IoT
  10. 에피소드 7: IoT & 인더스트리 4.0 - 스마트 커넥티드 컴프레서 해설 (Vlog)