エアコンをネットから操作するデバイスを作ってみた
冷房が効いた部屋に入るときの涼しさのために、エアコンをネットから操作するデバイスを作ってみた。まあもう気付いたら秋になってしまったのですが。とりあえず完成したので、公開してみます。
動画はこちら
参考サイトやプログラム
- AVR-Ethernet - スイッチサイエンス
- tuxgraphics.org: Introduction to the tuxgraphics TCP/IP stack, 3rd generation
- RemoteIR
- ELM - 赤外線リモコンの通信フォーマット概要
- PSP IR wave viewer
AVR-Ethernetのページにのっている回路を参考に赤外線LEDを追加したものです
コードはtuxgraphics.orgのeth_tcp_client_server-4.3をベースにRemoteIRを追加したような感じになっています。
webから操作
iPhoneなどから操作出来るようになっています。これで外出先からでもエアコンのon/offが可能。
ダイキンのエアコンに対応させる
自室で使っているエアコンはダイキン製で当然RemoteIRは対応していません
テレビのリモコンのフォーマットはすでにいろんなサイトで情報が載っていますが、エアコンのリモコンはテレビとは違うもフォーマットなので、いくら調べても情報が出てきません。
そこでまずリモコンから出ている信号の解析から始めました。ロジックアナライザがあれば簡単に解析できそうですがロジックアナライザは持ってないので、他に解析する方法はないか調べたらPSP-1000で動作するPSP IR wave viewerを発見。これを使ってリモコンの信号の解析をしました。
これをPCに取り込んで信号を解析してみると、テレビのリモコンのフォーマットに似ていた。フォーマットは似ていたのでRemoteIRをちょっと改造してリモコンがら出ているデータと同じ信号がでるようにしてやるとうまくエアコンが動いてくれました。これで赤外線系は完成。メーカーによってフォーマットが全然違うから他のエアコンに対応させるのはちょっと大変だ。
ソースコードはGithubにUPしてみました。
https://github.com/strobo/eth_air_controller
ちなみに開発環境はFedora15 avr-gccのバージョンは4.5.3
あとMake: Tokyo Meeting 07行きたい
sparkfunのBluetoothモジュールBluetooth Mateのメモ
大阪の日本橋に行ってきたときに衝動買いしたBluetooth MateをUbuntu11.04と接続してみる。忘れないようにメモしておく。
参考サイト
- sparkfunのBluetooth Mateのページ下のDocuments
- Ubuntu/Bluetoothシリアルポート - DebugIto's
- SparkFunのBluetoothモジュールのコマンドモードへの接続手順です。 | dietposter's blog
BluetoothMateはデフォルトでSPPスレーブとして動作します。
ubuntu11.04で接続した時のメモ
rfcomm bind 1
このコマンドでBluetoothMateと接続
- /dev/rfcomm1を使って通信できます
- 電源投入後60秒間コマンドモード移行待ち状態でその間にペアリングして"$$$"と送信してやるとコマンドモードに入り設定の変更ができます。コマンドはRN-41 AT Command Set(PDF)を参照。
- 60秒過ぎると"$$$"でコマンドモードには入れなくなる。
- コマンドモードから抜けるには"---
" - ビットレートはデフォルトで115200
- UART経由でも"$$$"でコマンドモードに入れる。こっちはいつでも"$$$"でコマンドモードに入れるみたい。ただしbluetoothでどことも接続していない時のみ。
screen /dev/rfcomm1 115200
この方法では接続できなかった。参考サイトの「Ubuntu/Bluetoothシリアルポート」のように、minicomを使えばうまく接続することができた
LEDライトなどを考えてた
わりとどうでもいい話です。chanさんのサイトでタッチセンサの実験というページを見つけて何か面白いもの作れないかなと思い、気づいたらGoogleSketchUpでこんなLEDライトをモデリングしてた。
操作方法(上から見たときの図)
USBから電源を取ってリチウムイオンバッテリーに充電し、3つのLEDを点灯させる。
タッチセンサとフィルムまでの間に薄い板があってもちゃんと反応するのかはテストしてみないとわからないなあ
このライトをAmazon.co.jp: JOBY ゴリラポッド GP1: 家電・カメラに取り付ければ意外といい作業用LEDライトになったりして
mbedとRJ45ジャックをつなぐ
スイッチサイエンスさんで買ったイーサネット用RJ45ジャック(トランス入り)とRJ45ピッチ変換基板を使ってmbedでethernet通信をしようとしていた。
RJ45ジャックのピンアサインがわからない?
スイッチサイエンスさんのRJ-45ジャックは秋月で売っているRJ-45ジャックとは少し違う物のようで、型番も分からずピンアサインも分からなかった。
で、いろいろ調べたらmbedのサイトにピンアサインが書いてあった
このページの一番下の図がスイッチサイエンスさんで取り扱っているRJ45ジャックのようです
これでRJ45ジャックのピンアサインがわかりました
mbedとつなぐ
+-----------+ | | | mbed | | | | RD-*--------+ | RD+*------+ | | TD-*----+ | | | TD+*--+ | | | | | | | | | ~~~~省略~~~~~ | | | | | | | | +-----------+ | | | | | TD+*--+ | | | | TD-*----+ | | | RJ-45 *-NC | | | *-NC | | | *-NC | | | *-NC | | | RD+*------+ | | RD-*--------+ +-----------+
mbedとRJ45変換基板とはこのように接続
あとはmbedのサイトにあるhttpサーバーのサンプルを書きこむだけでmbedがhttpサーバーになっちゃいました。ホント簡単ですねmbed
mbedを使ってみた
何かと話題のmbedをいまさらながら買ってみた
これひとつでI2C,SPI,USB,Ethernet,A/D,D/A,PWMやらが使えるすごいやつ
早速サインアップしてHelloWorld_LPC1768.binをダウンロード。mbedドライブにコピー後
mbedのリセットスイッチを押せばmbedのLEDが点滅する。簡単!
早速wiiヌンチャクと接続してみる
wiiヌンチャクのデータを読めるライブラリ*1があったのでこれでwiiヌンチャクのデータをPCに表示するコードを書いてみた。
こんな感じでmbedと接続して
コード書いて
#include "mbed.h" #include "WiiNunchuck.h" Serial pc(USBTX, USBRX); // tx, rx WiiNunchuck wii(p9, p10); int main() { pc.printf("WiiNunchuck Test\n"); while(1) { char jx = wii.joyx(); char jy = wii.joyy(); int ax = wii.accx(); int ay = wii.accy(); int az = wii.accz(); printf("joy(%d,%d) accel(%d,%d,%d)", jx, jy, ax, ay, az); if( wii.buttonc() ) { printf(" C:true"); }else{ printf(" C:false"); } if( wii.buttonz() ) { printf(" Z:true\n"); }else{ printf(" Z:false\n"); } wait_ms(50); } }
するとコンソールにヌンチャクの状態が表示される
joy(135,123) accel(677,523,513) C:false Z:false
初mbedプログラミングなのでエラーでるだろうなと思っていたら一発で動いてびっくり。mbed恐るべし
mbedドライブについて
mbedはバイナリの書き込み方法がちょっと特殊。そしていろいろ操作してたらtouchコマンドでバイナリの切り替えが出来ることを発見しtwitterでつぶやく。
@_strobo: mbedドライブにいくつかバイナリを保存しといて、実行したいバイナリに対してtouchしてやればリセット後実行するバイナリの切り替えができるみたいだ
とつぶやいたら結構RTされてたので。意外と知られていないことなのかなと思い一応メモ
*1:http://mbed.org/users/knaka/libraries/WiiNunchuck/ljkynp/docs/