下記記事を読ませていただいて、ウチはIRKitでホームオートメーションをしているので、
もしかしたら需要あるかもと思ったので書いてみます。
Google Home からSmartでない家電を動かす
Google Homeとスマートでない家電を接続する
また、今回は全くスマートでない「壁スイッチ照明」のコントロールをします。
Arduinoとサーボモータを使用して、こんなかんじのゴリ押しです。スマートでない感極まります。
↓Youtubeです
スマートでない壁スイッチを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を取得&つかう赤外線信号を取っておきましょう。
最後のLanguageはJapaneseにしておきます。
次はThatです。 ThatにはWebhooksを指定します。 Make a Web requestを選択して、、 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, 電気つけて」
「すみません、お役に立てそうにありません」
.....もごもご発音をきれいにしないとですね。
ということでこの記事は終わりです。