9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Home とIRKitとArduinoでホームオートメーション

Posted at

下記記事を読ませていただいて、ウチはIRKitでホームオートメーションをしているので、
もしかしたら需要あるかもと思ったので書いてみます。
Google Home からSmartでない家電を動かす
Google Homeとスマートでない家電を接続する

また、今回は全くスマートでない「壁スイッチ照明」のコントロールをします。
Arduinoとサーボモータを使用して、こんなかんじのゴリ押しです。スマートでない感極まります。

↓Youtubeです
スマートでない壁スイッチをarduinoとIRKitとGoogleHomeで動かす。
スマートでない壁スイッチを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を取得&つかう赤外線信号を取っておきましょう。

スクリーンショット 2017-11-18 18.24.20.png IFTTTにログインして、New Appletで、まずはThisを選択しましょう。 スクリーンショット 2017-11-18 18.24.46.png Google Assistantを選択します。 スクリーンショット 2017-11-18 18.26.40.png 今回は、"Say a simple phrase"をつかいます。 決まった言葉に対してトリガーしてくれる機能です。 スクリーンショット 2017-11-19 19.07.51.png "What do you want to say?"にトリガーにしたい言葉を入れます。 今回は「電気つけて」にします。 その下の(optional)と書いてあるところには、言葉のバリエーションを指定できます。 "What do you want the Assistant to say in response"には、 トリガーがかかったらGoogle Homeに返してほしい言葉を入れます。

最後のLanguageはJapaneseにしておきます。

スクリーンショット 2017-11-18 18.35.32.png 次はThatです。 スクリーンショット 2017-11-18 18.36.43.png ThatにはWebhooksを指定します。 スクリーンショット 2017-11-19 14.53.38.png Make a Web requestを選択して、、 スクリーンショット 2017-11-19 19.13.12.png URLには https://api.getirkit.com/1/messages を 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, 電気つけて」
「すみません、お役に立てそうにありません」
.....もごもご発音をきれいにしないとですね。

ということでこの記事は終わりです。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?