2013年3月20日水曜日

HA-2基板量産(その1)


動作試験も兼ねて10枚ほど手マウントしました。
内訳は
HA-2/FC基板 Aircon制御用 4枚
HA-2/FC基板 床暖房用 1枚
HA-2/SW基板 電動窓用 2枚
HA-2/SW基板 シャッター用 3枚
です。

右端の上下2枚は先日作成した
HA-2/FC基板 試験用 1枚

HA-2/SW基板 試験用 1枚

です。

結構細かくて全部作るのに5時間くらいかかってしまいました。



AVRマイコンが載っているHA-2/FC基板の方はAVRのソフトのデバッグもあるので取り敢えず後回しにして、マイコンの載っていないHA-2/SW基板の方を各所に取り付けました。



サーバー側のソフトをHA-2/SW基板用に対応させなくてはならないので動作試験をしながらデバッグしています。

基本機能のopen/stop/closeがサーバーから制御できること(これは以前のHA-1基板でも出来ていた)、壁のスイッチを押されたことの検知(これが今回の新機能)、スイッチを押された順番と時間差から窓やシャッターが開いているのか閉まっているのかをサーバー内で記憶しておいてステータスとして表示する機能の動作確認です。

電動窓には以前からリードスイッチの開閉センサーをつけていたのですが、電動シャッターの方はセンサーの磁石をシャッター側にうまく付けられるところがなく開閉状態を知るすべがありませんでした。
開閉のコマンド発行時に覚えておくことも考えたのですが、壁のスイッチも結構使用するので内部状態と実際が食い違ってしまうため諦めていました。
今回は壁のスイッチを押されたことを検知するようにしたので、サーバー側で状態を監視出来るようになりました。

RaspberryPiのコントロールサーバーソフトにデバッグ用のメッセージを埋め込んで動作確認を順番にやっていきます。


2013年3月13日水曜日

RaspberryPiのケース

RaspberryPi+RP-1/CS基板のケースで丁度いいものがなかったので経木わっぱを加工してケースにしてみました。
基板のサイズが丁度直径120mmで収まるサイズなのでEtherとDC5Vコネクタの穴を開けて、スペーサーで基板を固定してみました。
高さを合わせるために20mmほどカットしていますが、加工するのに失敗して2つほど壊してしまいました。結構割れやすいです。



蓋をした状態です。
この状態でちゃんとIRリモコンの光が透過しています。
感度は若干落ちているようです。向きによってリモコンが効かなくなることがあります。
暫くこの状態で運用してみて厳しいようならLEDの前を少し削って薄くしてみます。

2013年3月10日日曜日

書き込みツール

RP-1基板とHA-2基板のXBeeとAVRの書き込み用に変換コネクタを幾つか作成しました。

1つめ、aitendoのAVR書き込みツールusbaspからRP-1,HA-2基板のdebugコネクタ用の変換です。
aitendoのusbaspは初期状態ではAtmega328pに大きめのhexファイルを書き込むと途中でエラーが出てしまいます。FWを最新版にupdateすることでちゃんと動くようになりました。
FWのupdateのためと、何が悪いか切り分けしたかったので結局AVRISP2も購入してしまいました。


2つめ、秋月通商のUSB-serial変換基板からRp-1,HA-2基板のdebugコネクタ用の変換です。
これはXBeeのFW書き込みや設定値の変更用です。コネクタを挿したらAVRマイコンにresetがかかりTXD/RXDのportを開放してXBeeと直接通信できるようにしています。


3つめ、HA-2基板の電源コネクタに2.1mmDC5Vジャックを繋ぎたかったので、変換コネクタです。

変な小物が増えてしまいました。



2013年3月9日土曜日

HA-2/SW基板

こちらもRasipberryPi+RP-1/CS基板のコントロールサーバーから制御されるモジュールです。
これはシャッタースイッチの制御と温度センサーなどのADCで読み取れる値、窓の開閉を検知するためのマグネットセンサー(リードスイッチ)を読み取るためのGPIOだけに絞ってAVRを不要にしているモジュールです。


これはコントロールサーバー側のソフトを変更すればすぐに動作確認できそうです。

HA-2/FC基板

ZigBee経由でRaspberryPi+RP-1/CS基板のコントロールサーバーから制御されるモジュールです。
これは壁のスイッチ部分やエアコンなどの機器の中に組み込むためFRISKケースサイズで作っています。

密集しているためにRP-1基板よりも部品をつけるのが大変です。
1枚作るのに1時間以上もかかってしまいました。

こちらはAVRのソフトがまだ出来上がってないので赤外線リモコン発光だけしか動作検証できていません。

RP-1/RIR基板

ZigBee経由でRaspberryPi+RP-1/CS基板のコントロールサーバーから制御されるIR-Bluster基板です。
ZigBee経由のコマンドをAVRマイコンで受けて赤外線LEDを発光させます。
コントロールサーバーのおいてある部屋以外の赤外線リモコン機器を制御するために使います。



サーバー側のSWができていないので、ちゃんと繋がっていませんがテストプログラムでサーバーからXBee経由でAVRマイコンにコマンドを投げてリモコンを発光するところまでは動作確認できました。

RP-1/IR基板


RaspberryPi用の赤外線リモコン送受信部+5VDCコネクタの基板です。
先日書いたRaspberryPiの赤外線リモコンのページのプログラムで学習と再生ができます。
 
RaspberryPiの基板はコントロールサーバー用と同じく8pinのピンヘッダーを載せる必要があります。

RaspberryPiと組み合わせたらこのようになります。





コネクタ側です。

赤外線LEDとリモコン受光部の側です。


ケースに穴あけをしてDCコネクタとEtherケーブルの口を開けました。
蓋を閉じた状態で赤外線送受信は使えています。

RP-1/CS基板

コントロールサーバーのRP-1/CS基板です。
RaspberryPiに載せて赤外線学習リモコン機能とZigBeeネットワークのサーバー機能の基板です。


赤外線LED、リモコン受光部、XBee、I2Cの外部センサー用コネクタ、ブザー、RaspberryPiとの接続コネクタ、5V給電用の2.1mmDCコネクタ(RaspberryPiへも給電します)を載せています。


接続するRaspberryPiにはPCM信号の接続用に26pinのGPIOピンヘッダーの下に8pinのピンヘッダーを追加しています。



RaspberryPiに載せた状態です。
寸法はピッタリです。


コネクタ側です。Ether,USBはRaspberryPi、DCコネクタだけRP-1基板です。



反対側、赤外線LED、リモコン受光部とXBeeのアンテナ側、下にRaspberryPiのSDカードが見えています。 


横から見た状態です。下の基盤がRaspberryPi、上の基板がRP-1基板です。I2C用のコネクタが見えています。

動作確認したらちゃんと赤外線リモコンの記録、再生ができていました。












基板が上がって来ました

P板.comに注文していた基板が上がって来ました。
今回はレジストを黒にしてみました。綺麗です。









とりあえず目的ごとに部品をマウントしていきます。
作る基板は右側のRP-1基板で3種類
RaspberryPiと組み合わせてコントロールサーバーにするためのRP-1/CS基板、リモート赤外線リモコンブラスターのRP-1/RIR基板、RaspberryPiに赤外線学習リモコン機能を追加するためのRP-1/IR基板
左のHA-2基板で2種類
HA端子制御機能+電動シャッタースイッチ制御機能+赤外線リモコンブラスター機能+センサー入力機能のHA-2/FC基板、電動シャッタースイッチ制御機能+センサー入力機能のみのHA-2/SW基板
です。

2013年3月6日水曜日

Raspberry Piの赤外線リモコン


もうすぐ基板が出来上がってくるので前準備です。
RaspberryPiに載せて赤外線リモコンを送受信するための回路とプログラムをまとめておきます。

■回路図

























GPIO4(GPIO_CLK0)で赤外線リモコンの出力時のPWMを作るために76KHz(38KHzの倍)のclkを出力します。
それをPCM_CLKに入力しサンプリングCLKとして使用します。
PCM_INに赤外線受光部の信号を入れてサンプリング、PCM_OUTからFETを通して赤外線LEDを制御します。


■RaspberryPiの環境
linuxはRaspbian wheezyを使用。X-Windowは重たいのでoff。基本的にsshでloginして制御しています。

iraccess.tgzを適当なdirectoryに展開するとirremote/以下にソースコードが展開されるので
irremoteに移動してmakeするとirremote/irremoteが作成されます。

/dev/memをとおしてPCM I/Fを操作するのでirremoteの実行は
# sudo irremote [record|send] <file>
とroot権限で実行して下さい。/dev/memの属性を666にしてもOKですが、危険なのでお勧めしません。
record時のファイル名は何でも大丈夫ですが、MAKER_CATEGORY_MODEL_COMMAND.rmcとしたほうが後々整理しやすくて良いかと思います。
例えばsonyのTV KDL-32EX720の1chのボタンの場合はSONY_TV_KDL-32EX720_1.rmcなどです。

記録するには
# sudo irremote record SONY_TV_KDL-32EX720_1.rmc
を実行し、リモコンの1chボタンを押すと少ししてファイルを作って終了します。

コマンドを発行するには
# sudo irremote send SONY_TV_KDL-32EX720_1.rmc
とすると赤外線リモコンコードを出力します。

動作原理
GPIO_CLK0をOSC CLKの19.2MHzから分周して76KHzを作り出力する設定にします。
これをHWでPCM_CLKに入力し、サンプリングCLKとして使用しています。
受信時はPCMを16bit x 2chでCH1 16bit, CH2 16bitと間を開けないモードに設定しサンプリングします。
これで76KHzで1bitずつsamplingされたデータがPCMのFIFOに入ってくるので、SWでFIFOからメモリに読み出しをします。
FIFOは32bitx64段あるので26.9ms以上task switchが回ってこないと取りこぼしますが、相当重たい処理を裏で実行してない限り大丈夫かと思います。FIFOを何段位使っているかを計測したところ通常は11段程度までしか使用されていませんでした。
メモリに読み込んだデータは、メモリ上でNEC/AEHA/SONY/Otherの解析をして、ファイルへ出力するデータを生成します。NEC/AEHA/SONY以外のフォーマットの場合はOtherになりますが、この場合はちょっとサイズが大きめになります。

送信時は受信時の逆で、ファイルからデータを読み込み、PCMで出せる形にメモリ上で展開します。
この時、受信時には赤外線受光部で搬送波が除かれた状態で出力されていますが、送信時は38KHzの搬送波に載せる必要があるので、Highの区間は偶数bitのみ1、奇数bitは0にします。サンプリング周波数が76KHzなのでこれで38KHzの搬送波になります。

基板ができてきました。-> RP-1/IR基板