エアコンをネットから操作するデバイスを作ってみた

冷房が効いた部屋に入るときの涼しさのために、エアコンをネットから操作するデバイスを作ってみた。まあもう気付いたら秋になってしまったのですが。とりあえず完成したので、公開してみます。

動画はこちら

参考サイトやプログラム

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と接続してみる。忘れないようにメモしておく。

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のサイトにピンアサインが書いてあった

Ethernet RJ45

このページの一番下の図がスイッチサイエンスさんで取り扱っている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でつぶやく。


とつぶやいたら結構RTされてたので。意外と知られていないことなのかなと思い一応メモ

*1:http://mbed.org/users/knaka/libraries/WiiNunchuck/ljkynp/docs/

安定化電源を自作しようとしてる

回路図や部品の定数は適当なので、参考程度にしてくださいね
とりあえず一番新しい回路図とパターン図を


で現時点のメモ

  • 電流計測用抵抗に何も考えずに10mΩ買っちゃったからLMV358では電流計測が出来なさそう
  • プリント基板うまく作れるかな
  • メインチップのR8C29が無いので、R8C26へ変更しないといけない
  • R8C26になったので、LCD制御用のPICが不要になる

と、こんな感じですか

HIDaspx速攻で壊れる


やっぱり配線チェックはちゃんとしないとね

テストプログラムが完成したのでUSBケーブルをPCにつないでいざ書き込み!
ってときにケースから煙が……
光の早さでUSBケーブルを抜いたけど、時すでに遅し
うかつだった。+-を逆に配線してしまうとは…

壊れたのが3.3Vレギュレータだけでよかった。AVRやPCのUSBポートまで壊れたらどうなっていたことやら
というわけで配線チェックはちゃんとやろうということでした