ArduinoとRaspberryPiでスマホから家のエアコンの暖房をつけてみた。

きっかけ

毎年,冬になると家に帰っても寒くて布団に入りたくなってしまう。 そこで学校からの帰りの電車の中や信号待ちの時に,さっとスマホを取り出して家のエアコンを付けることができたら,家に帰るのが楽しくなりそう・・・っていうのがきっかけ


できること

Raspberry Piが手元にあるので,なんとかこれを使いたかった。外から家の中のRaspberry Piを制御するとなるとセキュリティ対策をしっかりRaspberry Piに施してから外部に公開するのが普通かと思ったけど,ポート変換やsshの設定,DDNSの設定などセキュリティ対策はかなり大変。僕の知識ではネットで調べて対策したところで不安が残るのが目に見えているので違う方法を考える。

考えた末Twitterを利用。 スマホから「エアコン 起動」とかツイートすると,タイムラインを監視していたRaspberry PiArduinoにシリアル通信で命令を送って,Arduinoから赤外線LEDにエアコンの制御信号を送り暖房をつけるという流れ。

これなら,Raspberry Piを外部に公開する必要がないため、面倒な設定やセキュリティ対策として最低限必要なところも少ないハズ!


システム構成

f:id:nwpct1:20131017232308p:plain

オマケ機能

  • 起床時のアラームに英語のラジオを流す(英語勉強中なので...)
  • Googleカレンダーから今日の予定を取得し,ゆっくり(音声合成ソフト)に読み上げさせる
  • その日の天気を取得して,ゆっくりが読み上げ
  • Arduinoにつないだ温度センサから室温を読み取って,外からでも寒いかどうか確認できるようにする

センサや赤外線LEDなどの素子は全てArduinoから制御。TwitterのプログラムはPythonで作成し,RaspberryPi上で動かしています。


なにをやったか

まずはPythonでツイートしたり,タイムラインを見張れるようになる

これについては↓の記事にまとめてます。簡単にTwitterの投稿やタイムラインの監視ができました。

PythonからTwitterを利用する

Arduinoでエアコンを制御する。

Arduinoプログラムに関しては,C言語をやっていればサンプルコードを見るだけで使えるようになります。 色々な方がコードを公開してくれているので,参考にさせていただいたページを↓の記事にまとめました。

Raspberry Piarduinoでシリアル通信

シリアル通信はつまづきましたが,なんとか原因を見つけることが出来ました。 これについては,↓のページにまとめています。

正規表現を勉強して,天気予報のサイトから必要な情報を取り出す。

ゆっくり(音声合成ソフト)の利用

音声合成ソフトについてはこちら↓にまとめました。

AquesTalkPiをRaspberry Piにインストールします。 Pythonから呼び出すときはこちらを参考にすればいけます。osモジュールをインポートする必要があるので注意!

iPhoneで外からエアコンを付ける

Raspberry Pi,Arduino側の準備は整ったので,次はiPhoneから「エアコン 起動」とツイートさせるのをより簡単にしたい。いちいちツイートするのも面倒くさいので,ボタンをタップするだけで定型文をツイートをしてくれるようなスマホアプリを作りたい。

試しにiPhoneアプリの勉強をしてみて,作成した見たのですが,結論から言うとTwitterアプリをとりあえず作ったのですが,実機で動かすには年間10000円ぐらい払ってAppleDevelopersProgramに加入する必要があるのでとりあえずやめた。 今は定型文をツイートできるTwitisというアプリを利用中。

詳しくはこちら↓

f:id:nwpct1:20161210234748p:plain


今後の目標

外からエアコンを操作できるようになって,かなり寒くなってくるとかなり重宝しそうなのですが,今はまだそれほど寒くないので,案外利用していない。なんだかんだエアコンを操作するためにツイートしたりする必要があるので,家にいる間は普通にエアコンのリモコンを使うほうが早い。

そこでJuliusという音声認識ソフトをRaspberry Piにインストールして利用する。Juliusはデフォルトのままでは精度がそれほど良くないらしいので,ソースを書き換えて調整する。 すると,家の中では「エアコン起動」と声をだすだけで,エアコンが付けれるという未来的な部屋になるはず!


あともうひとつ...

今のところArduinoのアナログ端子には温度センサをつないでいるだけなのですが,昨年の冬は部屋の乾燥で喉を苦しめられたので,Arduinoに湿度センサを載せるつもりです。 Amazonで調べると赤外線のリモコンで操作できる加湿器もあるようなので,部屋の湿度をArduinoで監視しながら加湿器を制御しようと思っています。

追記

ブコメをいただきました。ありがとうございます。

簡易セキュリティ対策としてTwitterを使うのは面白い。LIRC使えばArduinoは省略できるかも。http://goo.gl/TeH2ZJ

LIRCを使ってArduino省略というのも考えた事があるのですが,こちらのサイトによるとRaspberry Piにはアナログ入力がないそうなのでArduino Unoを利用しています。

貴重なご意見ありがとうございました。


Arduinoをはじめようキット

Arduinoをはじめようキット