Edited at

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

More than 1 year has passed since last update.

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


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


  • 照明・テレビ・エアコンを赤外線で制御

  • 室内の温度・湿度のセンサー計測とデータ読み上げ

  • 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で管理


動作の仕組み

 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}}"}


センサーの物理設計


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程度