heyheytower

日々のメモです。誰かのお役に立てれば幸いです。

声で家電を制御する。ただし安価に:その1(赤外線送信)

目的

声で家電を制御する。ただし安価に。

※下記サイトに触発されて、純 linux な環境で作りたくなったのです。
 「引越ししたので未来なお部屋を作ってみた。」
 http://d.hatena.ne.jp/rti7743/20120104/1325668680


※あとiOS連動とか、赤外線周りのパーツを使っただけなのに馬鹿高い製品に
 うんざりなので。(apple周りの開発の閉鎖的なとこも嫌)
 iRemocon:¥24,801 (2012年11月5日0時55分現在のAmazon
 L5 remote:無料(アダプタは有料/実売6,300円前後)


概要


  1. PC(ubuntu10.04)に指示を出す(声:あっぷ)
  2. PC が「あっぷ」の声を認識し、万能リモコン(arduino)に指示を出す
  3. 万能リモコンに届いた信号に合わせて、赤外線送信する
  4. テレビの音量が上がる

方法


  1. 音声認識は Julius*1が行い(左上の模式図参照)、語句リストと照らし合わせる
  2. 語句リストとマッチしたら(左上)、シリアル送信のスクリプト実行と、日本語音声合成ソフト OpenJTlalk で実行内容報告(右側のプログラム)
  3. シリアルで指示を受けた arduino(左下)は赤外線送信を実行する

音声認識

費用対効果を第一とする自分なので、を使わせていただきました。

OpenHRIは、音声認識音声合成・対話制御など、ロボットのコミュニケーション機能の実現に必要な各要素を実現するコンポーネント群です。 フリーで利用できる各オープンソースソフトウェアを使い易いコンポーネントとしてまとめました。

上記コンポーネントのインストールと、eclipse の整備を行う。
(必須プラグインなど)

sudo apt-add-repository ppa:openhri/ppa
sudo apt-get update
sudo apt-get install openhriaudio openhrivoice seatsat
sudo apt-get install eclipse
cd ~/Downloads
wget http://www.eclipse.org/downloads/download.php?file=/modeling/emf/emf/downloads/drops/2.2.4/R200710030400/emf-sdo-runtime-2.2.4.zip
wget http://www.eclipse.org/downloads/download.php?file=/modeling/emf/emf/downloads/drops/2.2.4/R200710030400/xsd-runtime-2.2.4.zip
unzip *.zip
sudo mv eclipse/plugins/* /usr/lib/eclipse/plugins/

#install on eclipse => https://hudson.eclipse.org/hudson/job/gef-master/lastSuccessfulBuild/artifact/update-site/

その後、OpenHRI のチュートリアル通りに進み、「Step4: 対話システムを作ろう」までテスト終了。
視覚的にプログラムを作っていけるのが楽しいですね。



そして以下では、赤外線送信実装テストとして、とりあえず
「コンポの音量アップ&ダウン」をさせることにしました。


赤外線送信(arduino

まずはリモコンの信号を解析し、その後送信する必要がありますが、Ken さんが作られた arduino の素晴らしいライブラリがありました。
http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
ありがとうございます、使わせてもらいます。


そのサイトの回路通りにセンサをブレッドボードと arduino に配線・配置する。

赤外線リモコン受光モジュール:PL-IRM-2161-C438(100円位)
赤外線発光ダイオード:OSI5FU5111C-40(TL110相当品)(50円位)

赤外線信号解析

wget https://github.com/shirriff/Arduino-IRremote/archive/master.tar.gz

readme 通りにファイル群を配置し、テストプログラムでコンポのリモコン信号を拾うことができました。


赤外線送信

IRemoteライブラリのサンプルを流用し、さらに先日作った赤外線検知回路で、赤外線送信できていることを確認した。


OpenHRIとarduinoの連動

Julius で認識した後は、シリアル通信で arduino に指示を出します。*2,*3

↑の ConsoleOut のとこで下記のいずれかの判定を auduino に送ってます。
echo "1" > /dev/ttyUSB1
echo "2" > /dev/ttyUSB1

そして arduino は loop で待ち受けて判定を行なっています。

void loop() {
if (Serial.available() > 0) { // 受信したデータが存在する
incomingByte = Serial.read(); // 受信データを読み込む

Serial.print("I received: "); // 受信データを送りかえす
Serial.println(incomingByte, DEC);
}
if (incomingByte == 49) {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0x481, 12); // Sony compo volume up
delay(40);
incomingByte = 0;
}
}
if (incomingByte == 50) {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xC81, 12); // Sony compo volume down
delay(40);
incomingByte = 0;

}
}
}

アスキーコード表に従って、"1"は"49"に、"2"は"50"にという点が注意です*4

結果

とりあえず動くものはできたので、後は

  • 精度の向上
  • 制御できるものを増やす(リレーを用い、電源ON・OFFを)

が当面の作業になります。

制作費は 3,000円以下ですし目的達成です。
赤外線リモコン受光モジュール:PL-IRM-2161-C438(100円位)
赤外線発光ダイオード:OSI5FU5111C-40(TL110相当品)(50円位)
Arduino

※始めはミスで、音声が無限に上がっていったりとびっくりしましたが…


おまけ(PS3の制御)

PS3Bluetooth を利用しているというのが厄介ですが、
安価にということで今回は以下の製品を使う。*5

PS2用DVDリモコン(SONY SCPH-10150 + 受光部SCPH-10160セット)

※小岩のお店で299円、安い。

これで PS3 も声で制御できますね。



以上。