LoginSignup
32
30

More than 5 years have passed since last update.

すまーときりたん (Google Homeときりたんが家電を制御するよ!)

Last updated at Posted at 2017-11-26

すまーときりたん紹介 youtube

 声で機器を制御して、声で応答してくれる音声ソリューション「すまーときりたん」を作りました。

このソリューションの「できること」

  • 照明・テレビ・エアコンを赤外線で制御
  • 室内の温度・湿度のセンサー計測とデータ読み上げ
  • twitterのタイムラインをチェックしてずん姉様緊急地震速報のツイートを読み上げ
  • 都バスの運行webサイトをチェックしてバス停へのバス接近情報を読み上げ

すまーときりたんの紹介動画です:

https://youtu.be/n8bh0X_IDh8
以下のデモが含まれています:
・声で温度計測を指示、きりたんが読み上げ
・声で照明のON/OFFを指示

すまーときりたんは、マスコットアプリ文化祭2017に参加しています。

https://mascot-apps-contest.azurewebsites.net/Works/302

システム構成要素の説明

自宅内およびPC内:

  • Google Home  - 音声入力(高性能マイクとして利用)と音声認識
  • VOICEROID+EX きりたん  - かわいくおはなしするよ
  • USBシリアルコンバーター(FT232H) + I2Cバス 温湿度気圧センサー(BME280)  - 室内を計測するセンサー
  • USB赤外線リモコンアドバンス  - 赤外線の送受信
  • えもふり  - きりたんのアニメーションデータを作成
  • すまーときりたん  - 管理アプリケーション

クラウド:

  • IFTTT  - Google Home の音声認識文字列を REST API でポスト
  • beebotte  - REST API でポストされたデータをMQTTのPub/Subで管理

動作の仕組み

20171121 すまーときりたん 動作フロー図.png

 Google Home に「ねぇgoogle聞いて、部屋の温度を教えて」と話しかける
   
 声を Google Home の音声認識で文字列化し、「聞いて」というキーワードに反応してIFTTTレシピを実行する
   
 IFTTTレシピの Webhook で、認識した文字列を beebotte にパブリッシュする
   
 beebotte をサブスクライブしている すまーときりたん が文字列を受け取る
   
 文字列を解析して、温度の問い合わせコマンドとして認識する
   
 PCに接続されているUSBのシリアルコンバーター(FT232H)を経由して温湿度気圧センサー(BME280)にアクセス
   
 得られた温湿度データからきりたんにしゃべってもらう文章を組み立てる
   
 すまーときりたん から VOICEROID+EX きりたん にしゃべってもらう
   
 同時にえもふりで出力したきりたんのアニメーションデータを すまーときりたん で再生する

技術的なポイント

beebotteの設定

https://beebotte.com/

 Channelを作って、Topicを作って、ChannelTokenと設定の
CredentialsSecretKeyを控えておきます。
 C#ではnugetでM2Mqttパッケージをインストールしておき、beebotteのSecretKeyを使ってサブスクライブします。

_mqttclient = new MqttClient("mqtt.beebotte.com");
var ret = _mqttclient.Connect(Guid.NewGuid().ToString(), "[secretkey]", "");
_mqttclient.Subscribe(new[] { "ifttt/kiritan" }, new[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });

 IFTTTではbeebotteのChannelTokenを使ってREST POSTします。
 beebotteのDashboards画面は、テストデータ投入などが簡単にできるので、デバッグで活用できます。

IFTTTの設定

https://ifttt.com/discover

 レシピを作ります。Google Assistantは、Google Homeで使っているアカウントに接続します。

this Google Assistant Say a Phrase with a text ingredient
What do you want to say? 聞いて $
that Webhook Make a web request
URL https://api.beebotte.com/v1/data/publish/[topic]/[resource]?token=[ChannelToken]
Method POST
ContentType application/json
Body {"data":" {{TextField}}"}

センサーの物理設計

20171122_FT232H_BM280.png

Adafruit FT232H
http://akizukidenshi.com/catalog/g/gM-08942/
https://learn.adafruit.com/adafruit-ft232h-breakout/overview
三端子レギュレーター 3.3V500mA TA48M033F
http://akizukidenshi.com/catalog/g/gI-00538/
BME280 温湿度・気圧センサモジュールキット
http://akizukidenshi.com/catalog/g/gK-09421

 ブレッドボードなどで、FT232HD0BME280SCLへ、D1D2BME280SDAに配線します。
 BME280は、I2Cモードになるようにジャンパを設定します。
 BME280VDDは、TA48M033F3.3Vを出して入力します。

センサーの使い方

libMPSSE with C#
http://www.chd.at/blog/electronic/FTDI-in-CS
BME280搭載 温湿度・気圧センサモジュールの使い方(スイッチサイエンス様)
http://trac.switch-science.com/wiki/BME280

 ありがたいことに、必要な情報はここに全てあります。
 arduino用のスケッチ(Cソース)があるので、C#に移植して使います。
 I2Cアクセス部分(Wireライブラリ)は、libMPSSEを使うように書き直します。

赤外線部分

USB赤外線リモコンアドバンス
http://bit-trade-one.co.jp/product/module/adir01p/

 ライブラリが提供されています。サンプルソースもあるので、読み書きで困ることはないでしょう。

public void Send(byte[] ircode)
{
  var irhandle = USBIR.openUSBIR(parentHandle);
    if ((irhandle != null)) {
      var len = ircode.Length / 4;
      USBIR.writeUSBIRData(irhandle, 38000, ircode, len);
      USBIR.closeUSBIR(irhandle);
  }
}

VOICEROID+EX きりたん

 VOICEROID+EXを制御するDLL
https://hgotoh.jp/wiki/doku.php/documents/voiceroid/voiceroid-001

 コマンドライン+パラメータを渡す的な方法で簡単におはなししてくれるととても助かるのですが、残念ながらそういう仕組みはないようです。
 VOICEROIDのウィンドウハンドルを捕まえて、エディタコントロールにクリップボード文字列をペースとして渡すという、激しい力押し対応。
 ぜひ、すまーとな仕組みが欲しいところ。

※実はすまーとな仕組みといえば、AITalk WebAPIというのがあるのですが、これは¥5,000/月かかるサービスなので、個人が趣味でやるにはお高い..

https://www.ai-j.jp/cloud/webapi/price/

FAQ

なぜGoogle Homeをマイクとして使ったの?

 USB接続の会議用マイクで集音して音声認識する仕組みも試作しましたが、環境音やテレビの音に影響されやすく、普段使いの音声ソリューションとしては使えないレベルでした。
 一方、Google Homeは圧倒的で「言葉を聞き取るハードウェア」としてはこれ以上にないパフォーマンスを発揮したからです。

なぜGoogle Homeをスピーカーとして使わないの?

 Google HomeはChromecastデバイスとして使えるので、きりたんの応答をmp3で保存して、その再生をGoogle Homeにキャストすることができます。ということで試作したのですが、この仕組みだと最終的に発声するまで結構時間がかかります..
 ということで、きりたんの応答は素直にPCで再生することにしました。

いくらかかった?

 参考価格を定価ベースで書いておきます:
 Google Home ¥15,120
 VOICEROID+EXきりたん ¥11,880
 adafruit FT232H ¥1,940
 TA48M033F ¥100
 BME280 ¥1,080
 USB赤外線リモコンアドバンス ¥4,100
 その他配線材等 ¥2,000
 合計 ¥37,000程度

32
30
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
32
30