声で家電を制御する:その6(完成報告)
目的
声で家電を制御する。ただし安価に。
完成報告
こんなシステムが 3,393円 でつくれました。
- PC に指示を出す(呼びかけ+指示:「ぐらどす」「あっぷ」)
- PC が「ぐらどす」で待受状態になり、「あっぷ」の声を認識し、万能リモコン(arduino)に指示を出す
- 万能リモコンに届いた信号に合わせて、赤外線送信する(任意のコマンドを実行する)
- テレビの音量が上がる
※但し期待しすぎるとアレなので初めに書いときますが、誤認識がけっこうあります。
人のせいにするようで申し訳ないですが、OpenHRI の julius をそのまま用いているため
です。
「呼びかけの利用」「単語の選定」で誤認識はかなり抑えられるので、
要チューニングなシステムということでご了承ください。
物理環境
- PC
NEC Express5800/S70 タイプSR(メモリ8GB)
- 万能リモコン部
Arduino duemilanove
- 無指向性マイク×2
iBUFFALO マイクロフォン スタンダード ホワイト BSHSM06WH
USB カメラについてきた、100均レベルのマイク・ヘッドホン
ソフトウェアなど
- 本体
Ubuntu 10.04
Arduino 1.0.1(統合開発環境。arduinoへの書き込みに必要)
A Multi-Protocol Infrared Remote Library for the Arduino*1
- 音声認識部
OpenHRI
OpenRTM-aist
Eclipse(RT System Editorをインストール、統合開発環境。動作に必須ではない)
価格
今回はコストパフォーマンス重視だったので付録で細かく記載します。
必須な金額としては「万能リモコン部/マイク+赤外線解析のため」の費用で、¥3,393 です。
マイク付きで iRemocon より 21,408円 安価です。(2012/11/25現在の価格より)
※赤外線信号登録などの手間を2万と考えれば、iRemocon の値段も妥当だと思います。
しかも今回エアコンのリモコンは赤外線信号がうまく解析できず、
電源ON/OFFをリレーでという強硬手段でした。
システム仕様(ハードウェア)
このハードウェアの売りとしては、センサ・スイッチを拡張できるところです。
- 温度センサ、人感知センサを追加し連動も可能(自分は要らないので未実装、動作は確認)
- 赤外線リモコン以外でもリレーを挟んでスイッチONが可能(スタンドライトなど)
Fig. 万能リモコン、ブレッドボード配置図*2
配置は同じブレッドボードがレイアウトになかったため、上記写真と違うので注意です。
電界効果トランジスタはもっと小型ですし、リレーのピン配置もちょっと違いますので実際に作る際はリレーのデータシートを見てください。
※arduino の 5V には 800mA 程の電流が流れますが、arduino 5V・トランジスタ 2SK2962 の許容電流が 1A 、流れるのはパルス電流なので大丈夫のはずです。
※制限事項は6畳位の部屋しかカバーできないことです。それに加え受信機の性能によっては近くに置くなり、工夫が必要と考えられます。
また、外部電源を用いることで出力アップ自体は行えます。
システム仕様(ソフトウェア:音声認識部)
Fig. 音声認識コンポーネント群(RT System Editorのキャプチャ)
そのまま OpenHRI のシステムを用いているのでOpenHRIを見てください。
追加部分としては下記で、どちらも OS にコマンド投げてるだけですが、プログラムを見やすくするために分けてます。
SerialOut;arduino へのシリアル送信部
Execute :任意のコマンド実行部(shutdown 、天気読ませる、等)
認識させたい単語の登録は srgseditor test.xml 、
認識した単語とコマンド実行の登録は seateditor test.seatml 、
で編集すると便利です。(リアルタイム文法チェックしてくれます)
ありものでここまでできるとは…、良い世の中です。
システム仕様(ソフトウェア:arduino)
書き込んだプログラムは、中略してますが以下のような形式を並べただけなので、簡単に改変し使うことができます。
注意としては、Sony形式の送信では2,3コマンド送信しないといけないこと、音量を2つ上げたい時はシリアルで "bb" と送信するだけで良い、等です。
※リモコンの赤外線信号は別途調べる必要があります。
声で家電を制御する。ただし安価に:その1(赤外線送信) - heyheytower
2〜3年前の機器ならIndex of /remotesに記載があるかもです。
#include
//ref. http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.htmlIRsend irsend;
void setup()
{
// initialize serial baud rate
Serial.begin(9600);
// initialize the relay pin as an output:
pinMode(12, OUTPUT);
}int incomingByte = 0; // 受信データ用
void loop() {
if (Serial.available() > 0) { // 受信したデータが存在する
incomingByte = Serial.read(); // 受信データを読み込むSerial.print("I received: "); // 受信データを送りかえす
Serial.println(incomingByte, DEC);
}
if (incomingByte == 97) {
// echo "a" > /dev/ttyUSB0
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xA81, 12); // Sony compo power on
delay(100);
}
incomingByte = 0;
}if (incomingByte == 98) {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0x481, 12); // Sony compo volume up
delay(100);
}
incomingByte = 0;
}
///////////////////////////////中略///////////////////////////////////
if (incomingByte == 110) {
irsend.sendNEC(0x594212ED, 32); // light on
delay(100);
incomingByte = 0;
}
if (incomingByte == 111) {
irsend.sendNEC(0x594211EE, 32); // mini light on
delay(100);
incomingByte = 0;
}
///////////////////////////////中略///////////////////////////////////
if (incomingByte == 79) {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0x1AB5B, 20); // PS3 L2
delay(10);
}
incomingByte = 0;
}
if (incomingByte == 80) {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0x8AB5B, 20); // PS3 L3
delay(10);
}
incomingByte = 0;
}
if (incomingByte == 81) {
// air controller on/off
// ref. http://yutakalife.net/article/134256657.html
// echo "Q" > /dev/ttyUSB0
digitalWrite(12, HIGH);// リレーオン
delay(500); // 500ミリ秒待つ
digitalWrite(12, LOW);
incomingByte = 0;
}
}
ソースコード配布など
OpenHRI をそのまま使っただけですし、環境構築のスクリプトをまとめるのも芸がないので、同じようなシステム作りたい場合は過去の記事を参照ください。
パソコン詳しい人なら1週間、パソコン詳しくない人でも2週間位で同じような環境が作れると思います。(平日夜+休日の作業)
作製手順としてはこれくらいです。
付録
- 万能リモコン部/マイク
製品 | 型番 | 単価(円) | 個数 | 価格(円) |
---|---|---|---|---|
Arduino | duemilanove | 2520(Uno の値段) | 1 | 2520 |
小型リレー | 941H-2C-5D | 100 | 1 | 100 |
高輝度赤外線LED | OSI5FU5111C-40 | 20 | 9 | 180 |
電界効果トランジスタ | 2SK2962 | 88 | 1 | 88 |
スイッチング・ダイオード | 1N4148 | 2 | 1 | 2 |
カーボン抵抗 | 1/4W 4.7Ω | 1 | 3 | 3 |
マイク | iBUFFALO BSHSM06WH | 450 | 1 | 450 |
3343 |
- 赤外線解析のため
製品 | 型番 | 単価(円) | 個数 | 価格(円) |
---|---|---|---|---|
赤外線リモコン受光モジュール | PL-IRM-2161-C4382 | 50 | 1 | 50 |
50 |
購入先は以下。
arduino 参考書籍
参考にしつつ、自分が想像力を掻き立てられた本を一冊。
センサ制御も、無線も、電子回路もひと通りレシピがあるのでとても便利です。
最後に
今回の音声認識システム完成は、下記の方々の先行作品があってのことでした。
参考にさせていただきました。
どうもありがとうございます。今後もチェックしますのでよろしくお願いします。
rti7743 さん
http://d.hatena.ne.jp/rti7743/20120104/1325668680
hecomi さん
http://d.hatena.ne.jp/hecomi/20120116/1326726831
yhira さん
http://netakiri.net/diary/archives/431.html
rti7743 さん・hecomi さんは音声認識を機械学習などで完成度の高いものに仕上げており、今後参考にしたいところです。
yhira さんはリモート制御できる製品全般に詳しい方でしたので、そういった点を参考にさせてもらいました。
自分は Glamo 製の iRemocon を用いず、arduino で万能リモコンを作ったということで住み分けができたかなと考えています。
以上。