声で家電を制御する。ただし安価に:その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円前後)
概要
- PC(ubuntu10.04)に指示を出す(声:あっぷ)
- PC が「あっぷ」の声を認識し、万能リモコン(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 通りにファイル群を配置し、テストプログラムでコンポのリモコン信号を拾うことができました。
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;}
}
}
結果
とりあえず動くものはできたので、後は
- 精度の向上
- 制御できるものを増やす(リレーを用い、電源ON・OFFを)
が当面の作業になります。
制作費は 3,000円以下ですし目的達成です。
赤外線リモコン受光モジュール:PL-IRM-2161-C438(100円位)
赤外線発光ダイオード:OSI5FU5111C-40(TL110相当品)(50円位)
Arduino:
※始めはミスで、音声が無限に上がっていったりとびっくりしましたが…