음성명령으로 TV 끄고 켜기

by Yong Hyoung | 2017-03-16 16:59
alexa arduino voice

재료

  • 범용 IR receiver (선택사항) 1개
  • Particle Photon 1개 (70000원)
  • 저항 1K옴 1개
  • NPN범용트랜지스터 1개
  • 적외선 LED 950nm 1개
  • Amazon Alexa Amazon Echo 1개 (200000원)
  • 저항 100옴 1개


개요

알렉사와 함께 TV를 켜고 끄려면 Photon에 IR LED를 연결하고 Alexa가 액세스 할 수있는 기능이 포함된 펌웨어를 작성 및 업로드하고 해당 Alexa 기술 및 람다 기능을 작성해야합니다.


IR 데이터 가져 오기

원시 신호를 보거나 리모컨에 적합한 코드 및 원격지로 보내는 방법과 함께 라이브러리 (AnalysisIR의 IRTRANSMITTER, 여기를 참조하거나 Ken Sheriff의 IRREMOTE)를 사용할 수 있습니다. 시작하려면 여기 또는 여기를 보세요.


IR 수신기와 로직 분석기 (저가의 Scanalogic-2 EDU KIT)를 사용하여 원격 제어의 원시 IR 신호를 기록하고 분석했습니다. 그런 다음 측정 된 신호와 여기에 제공된 원격 제어 데이터를 비교하여 측정 오류에서 데이터를 정리합니다. 로직 애널라이저 사용 방법을 보려면 여기를 클릭하십시오.


다음은 녹음 된 시퀀스의 이미지입니다.


https://hackster.imgix.net/uploads/attachments/264699/bildschirmfoto_2017-02-11_um_16_06_27_OzZFiDcqH9.png?auto=compress%2Cformat&w=680&h=510&fit=max


  여기 에서 내 삼성 리모트를 위한 시간 조합을 찾아 보았습니다. 

#define SAMSUNG_BITS          32 #define SAMSUNG_HDR_MARK    5000 #define SAMSUNG_HDR_SPACE   5000 #define SAMSUNG_BIT_MARK     560 #define SAMSUNG_ONE_SPACE   1600 #define SAMSUNG_ZERO_SPACE   560 #define SAMSUNG_RPT_SPACE   2250 

MARK는  HIGH를  그리고  SPACE는  LOW를 의미합니다. 하드 코딩을 했습니다 :

int send(String s) { 
pulse(5000);
delayMicroseconds(5000);
pulse(560);
delayMicroseconds(1600);
pulse(560);
delayMicroseconds(1600);
pulse(560);
delayMicroseconds(1600);
pulse(560);
delayMicroseconds(560);
....
delayMicroseconds(1600);
pulse(560);
return 1; }














 

IRRemote 을 사용해도 좋습니다만, 만약 포톤 라이브러리가 당신의 TV remote를 지원하지 않는다면   원래의 아두이노 코드를  여기 에서 활용하여 사용하면 됩니다.

나의 코드를 수정하여, 당신의 TV remote 에 맞도록 개선해 보세요. 



보드 설치

회로도에 따라 브레드 보드를 설치하십시오. 회로도는 트랜지스터의 베이스가 photon 핀 A4에 연결되는 간단한 LED 드라이버를 설명합니다. 이렇게하면 약 200mA의 충분한 전류가 흐르게됩니다. 200 mA가 LED를 발사합니다. 보드를 TV에 가까이 놓고 Photon에 전원을 공급하십시오.


LED에 직접 핀을 부착하는 것은 불충분한 전류 때문이라고 추정을 하는데, 작동에 실패, . 이걸 더 조사해 보아야 합니다.


photon 펌웨어

전송 될 IR 코드는 IR LED 및 지연을 이용한 핀에 신중하게 시간을 쓴 일련의 시퀀스입니다 . 나는 tritaris가 게시 한 코드를 사용했습니다.


이 코드는 이러한 함수를 출력하고,

intsend(String s); 

 CLI와 함께 그걸 호출할수 있도록 하기 위함이고,

$ particle call0123456789abcdef01234567 send

또는 이 API:

$ curl https://api.particle.io/v1/devices/0123456789abcdef01234567/send -d access_token=1234

AWS Lambda Code for Particle Photon 을 참조하세요.  (HTTP requests to the API from Alexa.)


Node.js 프로젝트 만들기

폴더를 만들고 람다 함수의 첨부 코드 (AWS Lambda Code 및 AWS Lambda Code for Particle Photon)를 작성한 폴더에 복사하십시오. AWS Lambda Code index.js와 AWS Lambda Code의 이름을 Particle Photon particle.js로 지정하십시오.

이걸로 프로젝트를 초기화 하세요

$ npm init 

파일 package.json 을 만드시고, 필요한 모듈을 인스톨하세요

$ npm install alexa-sdk request request-promise --save

  node_modules 라는 폴더를 만들고 그 폴더안에 파일들을 압축해 넣으세요 

 번역,수정 또는 언어스트링을 맞도록 확장하세요.


AWS 람다 함수

Alexa를 지원하는 지역에 람다 함수를 만듭니다. 자세한 내용은 시작하기를 참조하십시오. 핸들러의 이름을 index.handler로 지정하십시오. 이렇게하면 이벤트가 index.js로 라우트됩니다.

Blank Function 청사진과 Alexa Skill kit trigger를 선택하십시오.  람다 함수에서 생성한 zip 파일을 업로드하십시오.


해당 값과 함께 다음 환경 변수를 추가하십시오.

 APPID (알렉사 스킬의 앱 ID, 아래 참조)

 DEVICEID (귀하의 photon ID)

 USERNAME (API에 액세스하기위한 particle.io 사용자 이름)

 PASSWORD (API에 액세스하기위한 particle.io 비밀번호)

스킬을 생성 한 후 (아래 참조) ASK UI에서 스킬을 테스트 할 수 있습니다. 서비스 요구 (Service Request) 상자에서 json을 복사하여 전개 후 자동 테스트를 위한 람다 함수 (Lambda Function)의 테스트 이벤트 구성에 사용할 수 있습니다.


Alexa Skill

적절한 언어로 Alexa skill 키트를 사용하여 skill을 만드십시오. 자세한 내용은 시작하기를 참조하십시오.

  intent scheme 와  sample utterances를 스킬의 상호 작용 모델 섹션에 있는 해당 상자에 붙여 넣습니다. 그에 따라 sample utterances 를  적합하게 번역, 수정 또는 확장하십시오.

생성 한 람다 함수의 ARN을 스킬의 Configuration 섹션에 있는 상자에 붙여 넣으십시오. Lambda 서비스의 UI에서 ARN을 찾습니다.

  테스트 섹션에서 스킬을 테스트 할 수 있습니다. 서비스 요청 섹션에서 json을 복사하여 람다 함수에 대한 테스트 이벤트를 구성 할 수 있습니다. 작업 버튼을 참조하십시오.

시도해 보기

 "Alexa, start TV remote" 라고 말해 보고,

 "TV remote is ready."라고 알렉사가 말할 것입니다.

 "Switch the TV on." 라고 말해 보고,

 "I switch the TV on for you." 라고 알렉사는 말할 것입니다.

이렇게 해서 당신의 TV는 켜져야 정상입니다.




댓글 4

MADE BY

Yong Hyoung

디자인씽킹, 소셜 네트웍, 아두이노, 창업
음성명령으로 TV 끄고 켜기현재글