Plus電子デバイス・電子工作用語集モータドライバ博士のQ&A読者よりいただいたお問い合わせを元に、ロボット製作者、エンジニアのみなさんに役に立つ技術解説を発信していきます。Plus電子デバイス・電子工作用語集モータドライバ博士のQ&A読者よりいただいたお問い合わせを元に、ロボット製作者、エンジニアのみなさんに役に立つ技術解説を発信していきます。独自のウェイクワードでお部屋をチェックするこんにちは、ヨシケンです!ラズパイでスマートホーム化の第二回です。前回はSnowboyというウェイクワードの仕組みを導入して、「スノーボーイ!」と呼び掛けると、ラズパイからLEDを光らせるようにしました。今回はそのウェイクワードを自分の声でカスタマイズし、独自の掛け声で部屋の状況(温湿度など)をチェックする仕組みを作ります。(USBで使える小型のこちらを使いました。(イヤフォン・ジャックで使えるアンプ付きのこちらを使っています。前回Snowboyというソフトウェアをラズパイにインストールして、音声から起動させる仕組みを作りました。このSnowboyは自分の声を吹き込んで、好きな言葉でウェイクワードを作る機能もあるので、自分のワードを登録してみましょう。Snowboyのサイトからアカウントを取得します。Tokenを取得する事ができます。ここに表示されるトークンをコピーしておきます。以下のモデル作成用サンプル・スクリプトtraining.pyをresourcesフォルダ下に作ります。このスクリプト中の黄色くハイライトした部分を、今回の設定に合わせて変更します。tokenの部分に上記でコピーしたトークンを貼りつけます。変えて、保存して下さい。[training.py]次に以下のコマンドから自分のワードを録音します。一つのウェイクワード・モデルを作るのに、同じ言葉を吹き込んだ3つのファイルが必要になリます。1.wavマイクの近くで「ねぇ、お部屋!」と言って録音してください。(この言葉はもちろん他の言葉でも構いません。お好きな呼びかけ易い言葉を選んで下さい。3.wavといったファイル名を付けて、三回繰り返します。三つのファイルができたら、training.pyと同じresources下に置き、モデルを作成します。モデル名はoheya.pmdlとしました。modelという意味だそうです。oheya.pmdl程なくするとoheya.pmdlファイルが出来上がります。それではこのウェイクワード・モデルを使って、デモプログラムや、前回作ったLEDを光らせるプログラムを流してみます。前回のSnowboyを起動させるプログラムの際、エラーが出た場合は以下のlibatlas-base-devというライブラリが足りないかもしれないので、インストールしておいて下さい。用意されているdemo2.pyというサンプルプログラムを改変して、2つのウェイクワードを使えるようなwake2_led.pyも作って試してみます。~/smart/snowboy/wake2_led.py前回同様に赤色LEDもつないでおきます。以下の黄色の部分を追加、変更する事により、snowboyという呼びかけと、今回作ったoheyaを同時に使う事ができます。[wake2_led.py]それでは2つのウェイクワードに対応したwake2_led.pyを流してみます。resources/oheya.pmdl実際に動かしている動画はこちらです。次に、ラズパイに温湿度センサをつないで、部屋の温度を測ってもらいましょう。今回の温湿度センサは、温度、湿度だけでなく気圧も測ることができ、I2Cという通信方式を使っています。以下コマンドから、ラズパイのI2Cを使用可能にしていきます。Options”を選び。この後、再起動が必要となる場合がありますので、再起動して続けていきます。実際の接続としては、写真のようにセンサのピンヘッダを半田付けして、小さいブレッドボードに挿してラズパイと使っています。後続の赤、緑LEDも合わせた接続図は以下のようになっています。接続の際の参考にして下さいね。センサとラズパイをつないだら、このセンサを操る為の幾つかのI2Cのライブラリをインストールします。その後、コマンドから接続したセンサが使用可能になっているか見てみましょう。Detectコマンドを流すと、以下のようにBME280のデフォルトアドレス0x76での通信が確認できます。何の表示もされない場合は、I2Cの設定がされていないか、接続が正しくない可能性があるので、チェックしてみて下さい。接続が確認できたら、このセンサを販売しているスイッチサイエンスから便利なサンプルスクリプトが出ているので、ダウンロードして使ってみましょう。今回使うプログラムを格納するsmartフォルダを作って、そこに置きます。BME280/Python27/bme280_sample.pyこのサンプル・プログラムを流すと、以下のように簡単に温度、湿度、気圧が取れました!3.お部屋の状況をしゃべって、光ってお知らせでは、取得した室温をラズパイからしゃべらせる為に、日本語読み上げで定番のAquesTalkをインストールしておきます。公式ページからラズパイ版AquesTalkを、以下のようにダウンロード、ラズパイ内に設置しておいてください。pi@raspi.localの部分はご自分のラズパイ名に合わせて転送して下さい。~/smart/aquestalkpi-20130827.tgz温湿度センサにプラスして、赤と緑のLEDをつなぎます。配線が多くなってしまいましたが、赤色LEDをGPIO17に、緑色LEDをGPIO18につないでいます。それでは、元のサンプル・プログラムをコピーして、室温などに応じてしゃべる内容を変えたり、LEDを光らせたりするプログラムを作ります。snowboy/bme.pyそれでは、以下の黄色の部分の追加、修正を行います。室温や湿度の区切り、しゃべらせるメッセージなどはお好きに設定して下さい。[bme.py]4.ウェイクワードとセンサ、LEDの連動それでは最後に、bme.pyとSnowboyの仕組みを連動させます。先ほどのwake2_led.pyを改造して、wake_temp.pyを作ります。~/smart/snowboy/wake_temp.py複数の呼びかけに対応しますので、元々の「スノーボーイ!」という掛け声は残して、「ねぇ、お部屋!」と言うと、室温などを測って読み上げてくれるものにします。以下の黄色の部分をwake2_led.pyに追加、修正します。[wake_temp.py]それでは部屋の好きなところに置いて、プログラムを流して、「ねぇ、お部屋!」と呼びかけてみましょう。resources/oheya.pmdlいかがでしょうか?プログラムは特定のウェイクワードを待ち続け、「ねぇ、お部屋!」と言うと、すかさず室温、湿度、気圧を読み上げてくれたのではないでしょうか。最初は部屋が乾燥し過ぎていて、「スーパードライ!」と赤いLEDで警告した後、室温、湿度が戻ると「快適ですね!」と緑LEDが点滅したかと思います。こちらは動いているところの動画です。参考にしてみて下さい。5.まとめ今回はラズパイでスマートホームの第二回、自分の声でウェイクワードを登録しました。その声から部屋の温湿度などを測って、しゃべってもらう事ができるようになりました。それに合わせてLEDを光らせて視覚的にも分かるようにもなりました。今回は簡単のため赤と緑のLEDを使いましたが、Wi-fi対応の電球Hueなどを持っていましたら、IFTTTを使って簡単に部屋の電気の色を変える事もできます。部屋の状況を声だけでチェックできる、スマートホームに近づいて来たのではないかと思います。次回は、リモコンなどと連動させて、更に便利なおうちにする機能を追加していきます。