2010-11-23
外出先から家電をコントロールするシステムの構築
- 朝晩が寒くて嫌な今日このごろ。朝目覚めたら、リビングのエアコンを寝室から操作できたらいいじゃなイカ。
- どうせなら外出先からもネット越しに操作できたら更に嬉しいじゃなイカ。
- 赤外線LEDをチカチカさせればリモコン対応家電を制御できる、というのは先人たちが実験済なので、これを応用してみようじゃなイカ。
実現する機能
- エアコン等の赤外線リモコン対応機器に、機器ごとに対応した赤外線信号を送信する。
- 各社の機器に対応できるよう、赤外線リモコン信号のパラメータを通信で設定する。
- 自宅サーバ上に赤外線送信を各マイコンに命令するシステムを組むことによって、外出先から制御する。
→ サーバは今後mbedに置き換えたい。HTTPの認証機能がなんとかなれば…。
まずは赤外線リモコンの解析
必要なもの
| 赤外線受信素子 | 1個 |
| 3.5Φのイヤホンジャック | 1個 |
| 5Vの電源 | 1個 |
回路図
赤外線受信素子の出力をPCのマイク端子に接続して、リモコン信号の電圧変化を「録音」して記録する。
44.1kHzとかの普通の音声として録音すればOK。
スピーカーを痛めるので再生はしないこと。
マイク端子などの極性によっては、ON/OFFの信号が上下反転していることがあるので、適宜読み換える。
いくつかの機種のリモコンで試したが、最初のオンの部分の長さ、次のオフの部分の長さ、信号ONの時間、OFFの時間、信号のデータ量、信号を送る回数、信号間の待ち時間
など、いろいろと微妙に違っていたので、それぞれパラメータとして渡せるようにする。
メーカーが同じで設定が同じでも信号の内容が違っていたりした。キリが無いので、解析は代表的な設定のみに留める。
マイコン側の実装
必要なもの
| マイコン AVR ATmega168 | 部屋数分 |
| 3.3V 電源 | 部屋数分 |
| XBee 通信モジュール | 部屋数分 |
| 適当な赤外線LEDと、適当なトランジスタと、適当な抵抗いくつか | 部屋数分 |
回路図
機能一覧
- Web-マイコン間のシリアル通信接続は、有線ではなくXBeeで行う。線這わせるのめんどい。
- このためXBeeはブロードキャストでシリアル通信するように設定しておく(今回は出荷時の状態にした)。
- マイコンは、XBeeからシリアル通信で受けとったデータを解釈して、必要に応じて赤外線LEDをチカチカさせる。
- XBeeにより、サーバ1対クライアントnの通信を行う。その関係上、機器IDを指定できるようなプロトコルにし、関係ない要求については応答はしないようにする。
Webサーバ側の実装
必要なもの
| PerlならDevice::SerialPort とか、Rubyならruby-serialportとかが動く、自宅Webサーバ | 1台 |
| XBee 通信モジュール | 1個 |
| AE-UM232R USBシリアル変換モジュール | 1個 |
回路図
機能一覧
- 他人にいたずらされないよう、Digest認証を設定する。
- 指定の信号情報をシリアルで通信して、実行した内容を管理機能に反映する。
- iPhoneとかAndroidにやさしいインターフェースは、Appleが提供しているサンプルを流用する。
- TODO: 家電の状態を管理して、それぞれの状態をWebページとして表示する。ただし、本来のリモコンで操作することもあるので、あくまで目安として表示する。
プロトコル
必要なパラメータが全部渡ればいいので、コンパクトにバイナリで話す。
データ化けが起きるか不明だが、チェックサムを付けておく。
LED点灯系は26uSec.の倍数、消灯系は1mSec.もしくは10mSec.単位で指定している。
(1B→1バイト、ビッグエンディアン)
サーバ→マイコンへの通信
| 'R' | ヘッダ | ||
| 'E' | ヘッダ | ||
| 'M' | ヘッダ | ||
| 'O' | ヘッダ | ||
| 'T' | ヘッダ | ||
| 'E' | ヘッダ | ||
| ${room id} | 部屋ID | 1Byte | |
| ${lead on} | リーダのON時間 | 26uSec | 1Byte |
| ${lead off} | リーダのOFF時間 | 10mSec | 1Byte |
| ${long} | 信号:長いOFF(信号:1を表す)の時間 | 1mSec | 2Bytes |
| ${short} | 信号:短いOFF(信号:0を表す)の時間 | 1mSec | 2Bytes |
| ${on} | 信号:ONの時間 | 26uSec | 1Byte |
| ${stop wait} | 信号間の時間 | 10mSec | 1Byte |
| ${signal repeat count} | 信号を繰り返す回数 | 1Byte | |
| ${signal bit length} | 信号のビット数(n) | 2Bytes | |
| ${signal's check sum} | 信号のバイト配列のチェックサム | 1Byte | |
| ${signal} | 信号のバイト配列 | ${int ceil(n/8.0)}Byte(s) |
マイコン→ホストへの通信
- ヘッダが正常で、部屋IDが一致し、チェックサムが一致している場合
signal sent.\n
- ヘッダが正常で、部屋IDが一致し、チェックサムが一致しない場合
send failed.\n
- 部屋IDが一致しない場合
応答しない。
- ヘッダがおかしい場合
応答しない。
ソフトウェア
2010-11-05
monotron部品表
monotronの回路図が公開されてたので、部品の値を一覧してみました。コピペミスあったらすいません。
回路図はこちら→ http://www.korg.co.jp/Support/Manual/download.php?id=512
NU: Not Use
R19,R31,R69,R71 NU
R41,R65,R83 0
R12 1
R2 820
R43,R48 47
R1,R21 100
R68 220
R62 330
R49 390
R29,R66 470
R7,R11,R17,R20,R26,R27,R30,R33,R34,R51 1K
R4,R14,R64,R67,R78 2.2K
R53 3.3K
R8,R32,R35,R72,R74 4.7K
R76 5.6K
R75 6.8K
R9,R15,R16,R23,R25,R36,R38,R40,R44,R45,R47,R52,R54,R55,R56,R59,R63,R70,R73 10K
R46 18K
R77 22K
R10,R57 27K
R37,R80 47K
R50,R79,R82 68K
R6 91K
R5,R13,R24,R39,R58,R61 100K
R18 150K
R28 220K
R81 270K
R42,R60 330K
R3 820K
R22 1M
VR1 100 B
VR2,VR3,VR4,VR5,VR6,VR7 10K B
C5,C12,C23 NU
C30,C32 100p
C8,C9,C10,C20,C26 0.01u
C11 0.01u 50V
C21,C22 3300p
C6,C7,C13,C16,C18,C27,C28 0.1u
C1,C4,C14,C17,C25,C29 1u
C15 10u 電解
C2,C19,C24 16V 10u 電解
C31,C33 6.3V 100u 電解
C3 6.3V 330uF 電解
L1 4.7uH
Q1 IMX9 (2SD2114K ×2)
Q3,Q5 2SA1774
Q2,Q4,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14 2SC4617
IC1 TPS61071
IC2,IC4 LM324
IC3 SN74AHC14
IC5 TPA6111A2DR
LED1
RIBBON 10KB
SW1
2010-10-14
ガイガーカウンターのカウント数をTwitterに投稿するアプリを作る
絶賛作成中。
実装済
- Google Chart APIを使って、時間単位のグラフを作成する。
- 周辺環境の放射線検出数をTwitterに定期ポストする。6時間おき(0時、6時、12時、18時)にポストしています。 hashtagは #radiationLog としています。
未実装
- 急激な値の変化(上昇)時に即時Tweetする。
不具合
- 停電などによるデータ抜けについての情報が、グラフに反映されない。
用意するもの
↑システム一式
http://strawberry-linux.com/catalog/items?code=53001
PSoCの2pinにカウンターからの信号が来ているので、それを使用できるようにする。
検出する線種はフィルターしていない。
- Arduino(左下)とPC(上)
ガイガーカウンターキットに5V電源を供給する。
カウントしてシリアルに値を出力する。
シリアルの値を読み、データをログファイルに出力する。
使ったモジュール:
Device::SerialPort, AnyEvent::Handle, Google::Chart, WWW::Shorten::Googl, Net::Twitter
2010-09-29
ヴァイオリンを鳴らそう
というタイトルで、社内勉強会の発表を行いました。
資料(といっても、スクリーンショットをPNGにして、PDFとして固めただけ)
を置いておきます。
http://dl.dropbox.com/u/3968074/violin.pdf (この内容の薄さで7.3MBもある)
Mac OS Xをキーボードのみで操作する設定・方法
Bluetoothマウスのバッテリーが切れたときなどに便利。
フルキーボードアクセス
すべてのコントロールに対して「Tab」が効くようになります。
対応していないアプリもあります。
Spotlightから「システム環境設定」を探し、「キーボード」をさらに検索します。
Control + F7を押します。
マウスキー
Spotlightから「システム環境設定」を探し、「ユニバーサルアクセス」をさらに検索します。
Tabで「マウス」に移動し、マウスキーを「入」に設定します。
ポインタの動きを速くしたりなど、快適になるよう適宜変更します。
ここの設定でマウスカーソルを大きくしとくと、大画面とかプレゼンの時にも見つけやすいです。
メニューバーへのアクセス
Control + fn + F2
「fnで直接F2が入力される」よう設定されてる場合、fnは不要です。
環境によっては「Control + shift + F2」 の場合もあるようです。
Dockへのアクセス
Control + fn + F3
「fnで直接F3が入力される」よう設定されてる場合、fnは不要です。
Safariのリンクをキーボードでアクセス
Tabで選択、Enterで辿れるようになります。
Safariに切り替えて、Command + 「,」で環境設定を表示
Tabで「詳細」へ移動します。
「Tabキーを押したときに Web ページ上の各項目を強調表示」をチェックします。
その他のアプリ
EclipseでCommand + 「3」押して機能検索すると、
大抵の場合にマウスを触らなくて済みます。





