Google Home, IRKit 및 Arduino로 홈 오토메이션

아래의 기사를 읽어 주시고, 우치는 IRKit로 홈 오토메이션을 하고 있으므로,
어쩌면 수요 있을지도 생각했기 때문에 써 보겠습니다.
Google Home에서 Smart가 아닌 가전 기기 이동
Google Home과 스마트하지 않은 가전 기기 연결

또, 이번은 전혀 스마트하지 않은 「벽 스위치 조명」의 컨트롤을 합니다.
Arduino와 서보 모터를 사용하여 이런 느낌의 고리 누르기입니다. 똑똑하지 않은 느낌입니다.

↓Youtube입니다
똑똑하지 않은 벽 스위치를 arduino, IRKit 및 Google Home에서 이동합니다.
スマートでない壁スイッチをarduinoとIRKitとGoogleHomeで動かす。

조명을 켜고 끌 수 있습니다.
Arduino에 적외선 수광기를 설치하고 적외선으로 제어합니다.

Arduino



이쪽의 기사가 참고가 되는 것 극히 드문 이었기 때문에, 참고(丸パクリ)로 했습니다.
정말 고마워요.
적외선 통신 실험 파트 2 (적외선 리모컨을 송신기로 사용하여 무언가를 움직입니다)

Sketch는 이런 느낌입니다.
#include <Servo.h>
//モーターを定義しておきます。
Servo servo1;
Servo servo2;

#define IR_PIN      11    // 赤外線受信モジュール接続ピン番号
#define DATA_POINT  3           // 受信したデータから読取る内容のデータ位置

// 初期化処理
void setup()
{
  Serial.begin(9600) ; // パソコン(ArduinoIDE)とシリアル通信の準備を行う
  pinMode(IR_PIN, INPUT) ; // 赤外線受信モジュールに接続ピンをデジタル入力に設定
}
// メインの処理
void loop()
{
  int ans ;

  ans = IRrecive() ;                      // 赤外線リモコンのデータを受信する
  if (ans != 0) Serial.println(ans, HEX) ; // リモコンからデータを受信したら表示する
  if (ans != 0) {
    switch (ans) {
      //caseで赤外線信号の値を指定してあげます。
      case 0x86: //ライトオン
        //ライトスイッチ
        servo1.attach(9);
        servo1.write(105);
        delay(500);
        servo1.write(90);
        delay(100);
        servo1.detach();
        //dim
        servo2.attach(5);
        servo2.write(0);
        delay(500);
        servo2.detach();
        break ;

      case 0x87: //ライトオフ
        //dim
        servo2.attach(5);
        servo2.write(180);
        delay(500);
        servo2.detach();
        delay(100);
        //ライトスイッチ
        servo1.attach(9);
        servo1.write(70);
        delay(500);
        servo1.write(90);
        delay(100);
        servo1.detach();
        break ;
    }
  }
}
// 赤外線リモコンのデータを受信する処理関数
int IRrecive()
{
  unsigned long t ;
  int i , j ;
  int cnt , ans ;
  char IRbit[64] ;

  ans = 0 ;
  t = 0 ;
  if (digitalRead(IR_PIN) == LOW) {
    // リーダ部のチェックを行う
    t = micros() ;                          // 現在の時刻(us)を得る
    while (digitalRead(IR_PIN) == LOW) ;  // HIGH(ON)になるまで待つ
    t = micros() - t ;          // LOW(OFF)の部分をはかる
  }
  // リーダ部有りなら処理する(3.4ms以上のLOWにて判断する)
  if (t >= 3400) {
    i = 0 ;
    while (digitalRead(IR_PIN) == HIGH) ; // ここまでがリーダ部(ON部分)読み飛ばす
    // データ部の読み込み
    while (1) {
      while (digitalRead(IR_PIN) == LOW) ; // OFF部分は読み飛ばす
      t = micros() ;
      cnt = 0 ;
      while (digitalRead(IR_PIN) == HIGH) { // LOW(OFF)になるまで待つ
        delayMicroseconds(10) ;
        cnt++ ;
        if (cnt >= 1200) break ;    // 12ms以上HIGHのままなら中断
      }
      t = micros() - t ;
      if (t >= 10000) break ;      // ストップデータ
      if (t >= 1000)  IRbit[i] = (char)0x31 ;  // ON部分が長い
      else            IRbit[i] = (char)0x30 ;  // ON部分が短い
      i++ ;
    }
    // データ有りなら指定位置のデータを取り出す
    if (i != 0) {
      i = (DATA_POINT - 1) * 8 ;
      for (j = 0 ; j < 8 ; j++) {
        if (IRbit[i + j] == 0x31) bitSet(ans, j) ;
      }
    }
  }
  return ( ans ) ;
}

IFTTT 측 설정



Google Home에 "전기 켜"라고 말하면 전기가 켜지기를 원합니다.
IFTTT를 통해 IRKit에 HTTP를 요청하면 가능합니다.

IRKit 공식 사이트 의 IRKit Device HTTP API 항목을 읽고,
Clienttoken/DeviceID를 획득하고 사용하는 적외선 신호를 사용해 봅시다.


IFTTT에 로그인하고 New Applet에서 먼저 This를 선택합니다.


Google Assistant를 선택합니다.


이번에는 "Say a simple phrase"를 사용합니다.
정해진 말에 대해 트리거해 주는 기능입니다.


"What do you want to say?"에 트리거하고 싶은 말을 넣습니다.
이번에는 "전기 켜"로합니다.
그 아래의 (optional)이라고 쓰여 있는 곳에는, 단어의 바리에이션을 지정할 수 있습니다.
"What do you want the Assistant to say in response"에는,
트리거가 걸리면 Google Home에 반환하고 싶은 말을 넣습니다.

마지막 Language는 일본어로 둡니다.


다음은 That입니다.


That에는 Webhooks를 지정합니다.


Make a Web request를 선택하고,


URL은 htps : // 아피. 껄끄러운 t. 코m/1/메사게 s
Method는 POST
Content Type은 application/x-www-form-urlencoded를 지정합니다.
마지막으로 Body에게,
clientkey=クライアントトークンを入れる&deviceid=デバイスIDを入れる&message={"format":"raw","freq":38,"data":[取得した赤外線信号の配列]}

넣고 Create action → Finish로 OK입니다.

이제 설정을 할 수 있었기 때문에 Google Home에 말을 걸어 봅시다!
"OK Google, 전기 켜기"
"죄송합니다, 도움이 되지 않습니다."
..... 참깨도 발음을 청소하지 않으면 네요.

그래서이 기사는 끝입니다.

좋은 웹페이지 즐겨찾기