« 2009年8月 | トップページ | 2009年10月 »

2009年9月の4件の記事

2009年9月29日 (火)

無線モジュールXbeeで(に)遊んでいる(遊ばれている)

 前の記事をアップした直後に、Olimexから例の一語メール「shipped」(発送したよ)を貰った。あれから10日以上経ったが、まだ基板は届いていない。ワイヤレス電力ロガーの通信手段となるXbeeシステムの本格的な開発は、基板が届いてからと思っていたのだが、待ちきれずバラックながら色々試している。Xbeeは思ったより手強い相手だ。

Xbeeのファームウエアを飛ばし肝を冷やす(9/21/09)
 どうもおかしい。ウェブでみんなが実験しているXbeeの機能と、マニュアルの記述やX-CTU(Xbeeの設定ユーティリティ)の設定内容とが一致しない。Xbeeのファームウエアのバージョンの差で機能に大きな差があるようだ。マニュアルの記述の何を信じて進めていけば良いのかわからなくなった。

 今度のワイヤレス電力ロガーでは、センサー側(子機)の構成は必要最小限に抑えるため、ADコンバーターはXbee内蔵のものを使うことにしている。ところがウェブサイトには、このADコンバーターを使っている例が少ない。殆どが、Xbeeを単なるUARTインタフェースの代わりに使っており、たまに見つかってもArduinoというAVRを使った今流行の開発モジュールのシールド(付加基板)の内部コマンドや、企業の開発キットの中で使われていて、具体的な設定方法が公開されていない。

 こうなるとマニュアルに頼るしかないのだが、肝心のADCやI/Oピンの設定コマンドは、マニュアル(v1.xCx版  2008/9/4)によれば、コマンド一覧表の中のXbeeProのみでしか出来ないところにある。無印のXbeeはどうするのだろう。実際にもX-CTUで該当するATコマンドを入れると、そんなコマンドは知らないとERRORが返ってくる。ええーそんな。無印のXbeeでは、このへんのピンは使えないの?まさか。ウェブサイトには無印Xbeeで、このADCピンを使った温度センサーの実験報告がある。どうやって設定したのだろう。

 バージョンの記述がまた混乱させる。マニュアルにはv1.x80とか、v1.xC1とあるが、手持ちのXbeeのX-CTUで出てくるファームウエアバージョン番号は、1084である。どう換算するんだろう。先の記事のリモートATコマンドもX-CTUでテストできると良いのだけれど、このプログラムのリモートコンフィギュレーション画面の中にはそれらしいものはない。X-CTUは最新のバージョンなのだが。

 先人のブログをさらに読み込む。うーむ、リモートATコマンド機能は、ずいぶん最近になって可能になった機能らしい。ファームウエアのアップグレードで出来るようになるらしいが、手持ちの無印Xbeeがその対象であるかどうかはわからない。

 やっぱり、Xbeeは販売元の開発キット(数万円する)を買って全体のバージョンを揃えてから動かすのが本筋のようだ。ばら売りされたXbeeチップだけを買って動かすことを想定していない。しかし、こちらはアマチュアである。とてもそんな余裕はない。

 これはどうも、設計に取り掛かる前に最新のファームウエアにしてみるのがまず先決のようだ。それから何が出来るか考えよう。hamayanさんのページを参考に、ファームウエアのアップデートを試みる。販売元のサイトから、最新ファームをダウンロードする。無印Xbeeの最新バージョンは10C8だった。そうか、わかったぞ。マニュアルのv1.xABというのは、10ABなのだ。Xbee

 指示通り、ファームウエアを更新した。基板が来ないのでジャンパーの空中配線でリセットしたりするのは結構神経を遣う。2つあるXbeeモジュールを切り替えてそれぞれのファームウエアを更新する。順調にアップグレードされた。調子に乗って、一方をAPIモードにし、ループバックさせて、親機のADCデータを子機のループバックで見ようと設定を色々いじる。

 そのうちに、親機のレスポンスが返らなくなった。どうもパラメーターを書き込むときに、マウスのホイールを動かしたため、入力窓のパラメーターが動き、違ったバージョンのファームウエアを書き込んでしまったようだ。入力窓に証拠が残っている。まずい。

 単独でもうんともすんとも言わなくなった。UARTが反応しないのでAPIモードのリセットもできない。買って最初のATコマンド投入のとき一度動かなくなったときがあったが、そのうち自然回復した。今度も、小一時間放置して電源入れ直すも状況は変わらず。

 ううう、ファームウエアの書き損じをやってしまったか。しかし、幸いなことにhamayanさんのページには、ファームウエアを書き損なったときの回復手順が出ている。手順を読む。何だと、電源を入れずにシリアルをつなぐだと?それにUSBではできないとある。

 状況は暗い。こちらは秋月のUSBモジュール経由のTTL UARTだ。それに電源を入れないでUARTが動くのか。半信半疑で、USB-UARTからの電源リード(+3.3V)を抜いて、言われるままX-CTUの手順を実行する。ややや、何か反応しているぞ。Xbeeの電源を入れる。おおお、プログラミングしはじめた。素晴らしい。

 やれやれ肝を冷やした。hamayanさんのお陰で、ファームを書き損なったXbeeは、前の状態に完全に復帰した。しかし電源を切ってもファームが書き込めるというのはどういうことなのだろう。理解を超えている。世の中まだまだわからないことだらけだ。

ADCが動かない(9/24/09)Xctu10ca
 ファームウエアは、最新の10C8に上がった。X-CTUのコンフィギュレーション画面にも、これまでの1084にはなかった沢山の新しいコマンドが並ぶ。ADC、I/Oピンの設定も出来るようになった。まるで違う機械のようだ。

 しかし、Xbeeの設定はなかなか順調には進まない。こいつUARTだけの透過モードは至極簡単に動くのだけれど、少しインテリジェントなことをやろうとすると突然難しくなる。モジュールを設定するコマンドの数はマニュアルで数えると、何と69もある。

 しかも、Xbeeそのものの種類がやたらと多い。X-CTUのユーティリティで数えてみたら、選ぶべきハードウエアは十何種類、ファームウエアの種類も5種類近くあって、紛らわしいことおびただしい。

 基板が来れば、AVRか何かでXbeeのドライバーを作りAPIモードのテストをするつもりだが、それまでのとりあえずの策として、親機側のADCを動かし、ループバックでそのデータを返して、X-CTUで読むことにする。わざわざループバックにしているのは、子機の設定をテストの度に接続しなおして設定する手間を省くためである。

 しかし、これが言うことを聞かない。Xbee双方を非APIモードのまま、

 ATD0=2   (20ピンのポートをADコンバーターにする)
 ATSM=5  (サイクリックスリープモード、ピン起床あり)
 ATSP=C8 (2秒(200×10ms)ごとに目覚めてADデータを送る)

とすれば、2秒ごとに20ピンのADCデータを親機が子機へ送出し、子機はそれをそのまま親機に返してくるはずなのだが、全く反応はない。単なるループバックテスト(Range Test)は動くので、ハードの問題でなく、コマンド設定の問題である。 If0911

 ATIR(サンプリング間隔)とか、ATAS(スキャンアクティブ)とか、それらしいコマンドを片っ端から入れていくが、何の動きもなし。頭を抱える。他に動作を確認する機能もあるのだが(Association機能、LEDの点灯などで動作表示)、空中配線のXbeeチップはICプローブで蜂の巣状態になっており、下手にいじって壊してしまうのが怖い。これ以上、手を加えたくない。皮肉なことにLPCMプレーヤー基板より、Xbeeチップ変換基板の到着が待ち遠しくなって来た。

やっとADCが動いた。基本的なミス(9/26/09)
 珍しく長期のシルバーウィークが明けて、仕事の帰りの本屋で、インターフェース誌の最新号(11月号)を見つけた。お誂え向きに無線特集の号で、Xbeeも掲載されている。早速買い求める。

 記事の内容は、だいたい既知のことが多かったが、頭の中の情報の整理には役立った。全体の見通しが良くなり、落ち込んでいた意欲が復活した。リモートATコマンドによるX-CTUでのリモートモジュールの設定(p104)の説明も収穫だった。ここはマニュアルのないところで、これは助かる(まだ先の話だが)。Xctuconfig

 しかし、目の前のXbeeを動かすヒントは見つからない。相変わらずADCが動き出さない。しようがない。ループバックテストは諦めて、子機に設定し直そうとX-CTUでパラメーターを見ていた時、ふと気になるパラメーターが目に付いた。Xbeeネットワークの役柄を決めるATCE(コーディネーターかエンドディバイスかを決めるパラメーター)である。

 現在は、1対1なので片側をコーディネーターにする必要はないが、1対Nに備えて、現在の親機のCEパラメーターは1(コーディネーター)になっている。もしかして、コーディネーターではI/O関係は動かないのかもしれない。だめもとで、これをエンドディバイス (ATCE=0)にしてみる。

 やった。こいつが原因だった。X-CTUのターミナル画面Adcoutに、親機のADCデータが送信され、子機でループバックされたデータフレームが次々に戻ってくる。いやあ、やっと動いた。マニュアルのどこかには書いてあるのだろうが、こんな基本的なところまでは目が届かない。

 サイクリックスリープモードを解除してみる。立て続けにデータが送られ、見る見るうちにターミナル画面が一杯になっていく。やれやれこれで第一関門は突破した。次の課題はリモートATコマンドによる子機のI/Oドライブだ。

 それにしても、Olimexからはまだ品物が届かない。16日に発送したというのならもう10日が経つ。日本の連休は、外国の航空貨物の取り扱いには関係ないはずで、それにしては遅い。航空便ってそんなに日数のかかるものだったっけ。

| | コメント (2) | トラックバック (0)

2009年9月17日 (木)

Xbeeワイヤレス電力ロガー実装に向けての準備

 電子工作を始めてから最初に作ったプリント基板は、無事Olimexで発注が受理された。どんな基板が送られてくるか、期待と不安に胸が膨らむ。しかし、届くのはあと10日近くかかるだろう。それまで何もしないで待っていられる性格ではない。もともと貧乏性である。特に工作を始めてから輪をかけて手を動かしていないと落ち着かない性分になってしまった。Xbeeを使った電力ロガーの実装に向けて、あれこれ勉強と実験を続けている。

単電源のオペアンプ整流回路(9/11/09)
 電力ロガーのAC電流センサーの出力は当然ACで、XbeeのADコンバーターに入れるには整流してやらないといけない。出力はmVレベルなので、普通のダイオードでは出来ない。オペアンプを使った整流回路が必要だと、この前の記事で書いた。

 OlimexにはXbeeのチップ変換基板も発注してあるが、このあたりを先にブレッドボードで実装してしまおうと、ウェブを先生に整流回路を組み始めた。しかし前にも書いたように単電源のオペアンプで理想ダイオードになる適当な回路例がない。とりあえずは、ここのページのオペアンプ2つを使った全波整流回路(絶対値回路)の接地点をVccの中間電位に変更した回路(ウェブのここを参考)で試してみた。

 しかし、うまく動かないのである。出力がDCにならない。半波整流のような波形でマイナス側にも波形が出る。諸元を色々いじる。全く変化なし。そのうち入力も中位電位にするべきだと気づいて、ここも抵抗2つでプルアップするが、これも駄目。ウェブに載っている整流回路を手当たり次第に試してみるが、すべて単電源では動かないか、整流できない。

 ウェブをさらに検索する。ダイオードなしのオペアンプ2つで全波整流する回路が見つかったが、これは負電位の入力でも誤動作しない特別のオペアンプ(AD823)用で使えない。こちらは、秋月で買った1ヶ¥20の汎用オペアンプLM358で作るつもりだ。DigiKeyで調べたらこのアナログディバイスのオペアンプAD823は千円近くする。とんでもない話だ。Photo

 両電源にするのも馬鹿馬鹿しい。半日あれこれ悩んで、このあいだのリズムキャプチャーで使った単電源オペアンプひとつの全波整流回路をだめもとで組んでみた。これはウェブの説明では、ダイオードの順電圧以下では整流しないとあったので諦めていたものである。確かにこのダイオードの位置では、逆方向は良くても、このダイオードの順方向のところは、整流しないはずだ。

 確認のつもりで、ブレッドボードに回路を組み、AC電流(CT)センサーに40Wの白熱スタンドをつける。150mV位の出力がでるが(オシロでP-P 300mV)、1V以下なので出力は出ないはずだ。Photo_2

 うわー、オシロから脈流がはっきり出た。少し大小があるが立派なDCだ。コンデンサーで平滑してみる。見事、200mVの直流が得られた。何だ、何だ。今使っているダイオードは1N4148の普通の検波用ダイオードだ。順方向電圧降下は0.7Vもある。誰だ、順方向電圧以下は整流できないと言ったのは。ちゃんと出ているではないか。

 もっと少ない電流はと言うので、公称13Wの半田ごてを入Photo_3 れる。センサーの出力はP-P 100mV、整流後は、50mVのDC出力が出た。立派なものだ。案ずるより生むが易しとはこのことだ。これでXbeeに入れるアナログ入力の回路の目処がたった。

 ついでにオペアンプの消費電流を測る。3.3VのVccで、0.3mAだった。FETで入り切りするのも微妙な電流だが、行き掛かり上、FETを出して、おさらいをする。ゲートをプルアップしておき、XbeeのポートをActiveLOWにしておけば、Xbeeがアクティブなときは、ON、スリープして、ポートがHiZになったときはOFFという勘定だが、これはもう少しデータシートを読み込む必要がある。

丈夫なXbee子機にするために(9/13/09)
 Xbeeシステムの詳細設計は、Olimexのピッチ変換基板が来てからと考えていたが、オペアンプの電源制御のために、もう少しつめておく必要が出てきた。考えてみたらスリープのとき、I/Oピンの状態が変わることは通常考えられない。何のためのI/Oピン、スリープということになる。何とか他の方法で電源制御が出来るようにならないものか。

 マニュアルをもう少し詳しく読み込んでみる。その結果、子機の設定を親機を通してできるリモートATコマンドというのがあることがわかった。Xbee単体はプログラマブルではないが、ATコマンドを沢山使えば、かなりインテリジェントな動作をさせることができる。

 これ、これ。スリープから目覚めた子機に所定のコマンド(I/Oピンの制御)を送ってやれば、ADコンバーターのオペアンプの電源を立ち上げることができそうだ。リモートATコマンドは、Xbee間の通信を、単なるUARTになる透過(トランスペアレント)モードでなく、APIモードにすることで送ることが出来る。APIモードのデータフレームの仕様は詳しく出ているので開発に不安はない。

 しかし、当初の仕様は、スリープモードから目覚めた子機は、一方的にデータを送り出すことにしてある。なるべく親と子供の間を独立させるためだ。親の指示がないと動けない、ひ弱な子機にしたくない。しかも親は子機の状態を気にせず、ただ、データを送ってくるのを待つだけにしたい。

 スリープモードのところをさらに詳しく調べる。すると有力な方法が見つかったのである。Xbeeのスリープモードは全部で4種類あり、消費電流の一番少ない、ハイバーネートモード(SMパラメーター=1)、消費電流は多いが立ち上がりの早い、ピンスリープモード(SM=2)、それに、タイマーで周期的にスリープするサイクリックスリープモード(SM=4、5)である。

 サイクリックスリープは、よく読むとスリープから目覚めた時、必ず親機(コーディネーターと呼んでいる)にポーリングをかけ、受信すべきデータがキューされていると、それを読みこむ。データがないとすぐにサイクリックスリープ(SPで決めた周期)に入る。受信データがあるときは起きたままとなり、スリープ休止時間 ST(Time before Sleep)パラメーターの設定した時間が来るまで起きている。

これまでサイクリックスリープ時間(SP)というのと、スリープ休止時間(ST)という2つのパラメーターが良く理解できなかったが、これで良くわかった。

これだ。このポーリングのタイミングでAPIモードのデータフレームを送れば、見事にオペアンプの電源をONにできそうだ。うまいぞ。

 しかも、親と子の通信は同期させる必要はない。親は送信データをバッファーにスタックしておくだけでよい。子機はキューされていたこのデータを受け取る。親は、このバッファーを常に監視して、なくなっていたら補給しておく。うむ、これで親子は自立して動ける。

 OFFはどうする。これは最初の子機の設定(ADコンバーター出力指定など)のコマンド列の最後にI/OポートをOFFにするコマンドを入れておく。うーむ、出来た。

まさしく机上のロジックだが、何かうまく行きそうな気がする。

100VACの検電器をつくる(9/16/09)
 電力ロガーは電流しか測らないことに決めた筈なのだが、実はまだ未練がある。電力測定用の専用ICを使えば文句なしに精密な電力量を記録できる。やってみたい。このチップADE7753はDigiKeyで¥500少々で手に入るが、これひとつに送料¥2000を払うわけには行かない。DigiKeyは発注額が¥7500を超えないと送料は無料にならない。

 ところが、DigiKeyに注文できる有力な電子機器が出てきたのである。このあいだまでさんざん遊んでいたARMプロセッサーのSTM32F103を使った開発キット、STM32Primer2である。128×160ドットのタッチパネル付液晶とそのコントローラ、マイクロSDスロットがついて¥6000台。魅力的なスペックだ。この開発キットは、最近は秋月電子でも売り出したP2364s

これが何とDigiKeyでも買えるのだ。しかも日本で売られている価格より、ほんの少しだけだが安い(DigiKeyの商品番号497-8511-ND ¥6,188)。これを買えば、送料無料の¥7500を超える!

 一瞬、発注のボタンに指がかかったが、寸前に思いとどまった。これ以上、手を広げると何がなんだかわからなくなる。あまりにも色々なものに手を出しすぎだ。 収拾不能になってしまう。BeagleBoardだってそうだ。当ブログのアクセス数では今でもトップの話題だけど、あれから全く動かしていない。マイクロウェブサーバーにしようと思っているけれど他の事が忙しくで手がつかない。

 しかし、ADE7753を買える可能性は出てきた。こいつはAC電圧のアナログ部が絶縁されておらず、デジタルとグランドが共通なのでボードを分けるなどの配慮が必要だ。それにしても無闇に100VACを怖がっているのは能がない。買える時が来た時慌てないで済むよう100VACを自由に操作できる技術を身につけておこうとウェブであれこれ勉強する。

 要するに、AC100Vはテーブルタップを使ったり、工事業者が良い加減で極性を逆にしてしまったりして、ホット側がわからなくなるから危険なのだ。ホット側がいつでも検知できるのならば、そう心配する必要はない。

 ホット側から分圧抵抗で落とせば安全な電圧が得られる。テーブルタップを経由して極性がわからなくなっても、ホット側がわかる昔使った検電ドライバーのようなものがあれば、思わぬ事故の心配はなくなる。

 昔、真空管ラジオがトランスレス全盛だった頃は、この問題は日常的な問題だった。ネオン管をドライバーに入れた「検電ドライバー」というのを覚えている。ウェブで調べてみる。何だ何だ今でもあるんだ。沢山出てきた。強電関係では必須のツールのようだ。

 ただ、検電ドライバーは柄のところに金属面が出ていて、いくら絶縁されているとはいえ触るのは少し怖かったのを覚えている。もう少し進歩していないか、ウェブをさらに探す。

 すると、LEDとトランジスタを使った非接触の検電器の回路が見つかった。トランジスタを2段接続して増幅度を稼ぎ、数メガはあるだろう絶縁を通しての微小交流電流を検知して、LEDをつける装置のようだ。

 これだ。これを作ろう。早速、ストックしてあった、コンプリメンタリなトランジスタ(2SC1815 2SA1015)を取り出してブレッドボードに組んでみる。参考にする回路のVccは、9Vだが、こちらはボタン電池(CR2032)での実装を狙ってLED抵抗を下げた(2.2Kから330Ω)回路にする。

 動かしてみる。よし、ちゃんと動いた。消費電流を測る。点灯時で0.5mA、ついていないときは、1μA以下だ。ああ、これなら電源スイッチもいらない。ボタン電池が入るケースを探す。記念に貰ったいくつもあるネクタイバーのケースがちょっと大きいが、手頃な大きさのようだ。ここへ実装することにする。Photo_4

 久しぶりの基板工作である。基板の固定はネジ止めでなくホットボンドにする予定だ。手を動かしてモノを作ることが楽しい。数時間で完成する。実装版も問題なく動いた。それにしても不思議だ。検電ドライバーのように金属に全く触らなくても、ちゃんとホット側でLEDが点灯する。

 ためしにテスターでホット側のAC電圧を測ってみる。プローブをホット側に差込むと、一方のプローブを浮かしても6V近くPhoto_5 を指した。今度は浮いているプローブを恐る恐る手で触ると90Vを指した。電気が来ている感じは全くない。そうか電流が流れなくてもこんなに電圧がかかっているのだ。思わぬ実験の結果に少し感動する(くれぐれもホット側のプローブを触らないように。感電します)。

| | コメント (0) | トラックバック (0)

2009年9月 9日 (水)

Olimex発注の合間にACの実験

Olimexに基板を発注した(9/05/09)
 電力ロガーの仕様を考えているうちに、9月も何日か過ぎてしまった。既に設計が完成しているLPCMプレーヤー2号機のプリント基板を早くOlimexに発注しなければならない。EAGLEによる設計は、本体と、Xbee用のピッチ変換基板ともほとんど完成している。あとは、160×100のパネルの分割指示をする面付け図と、発注仕様を伝えるREADME.TXTを作るのを残すだけとなっている。 

先達のウェブページを参考に、面付け図を作る。今作ろうとしている基板は本体が3 枚、ピッチ変換基板が2枚である。大きさに余裕があるので、基板の切り離しは、ディスクカッター(abrasive)を選ぶ。

 おやあ、ウェブの面付けの参考図と一枚当たりのサイズを求める計算式が一致しない。1枚を2枚にディスクカッターで切るときは、図は、2ミリづつ、4ミリののりしろをとっているが、サイズを求める式は、(n-1)*2で2ミリののりしろしかとっていない。

本家のOlimexのサイトをあたる。FAQに出ている式は先の計算式と全く同じだ。ところが、この図を参照という切り離しのでは、一枚づつのりしろを作っている。うーむ、良くわからない。

 面付け図がおかしいというだけで作成を拒否されたと言う報告もあるが、わからないものは仕方がない。とりあえず2ミリのまま出すことにする。Panel

 EAGLEの基板図(brdファイル)を念のため、もう一度点検する。不要なレイヤーを表示しているだけで拒否されると脅かされているので、DRCを何度もかけ、ドリルチェックをし、何度も表示レイヤーを見直す。

 あれ、SDカードの配線が少しおかしい。ややや、チップセレクトの線がCPUとつながっていないぞ。慌てて回路図(schematic)の方を確かめる。あれえ、回路図から間違っている。これはいけない。いくら基板図でDRCをかけてNo Errorにしても、回路図が間違っていたらお話にならない。

 泥縄に近いが、もう一度回路図を最初から点検する。その結果、USBジャックのピンアサインが逆になっていることを見つけた。それとミニLCDのI2Cの接続が逆になっている。まあ、これはソフトで解決できるにしても、事態は深刻だ。Lpcm

 完全と思っていてもこれだけバグが出るのだから、まだ潜んでいる可能性がある。ICのピンアサインを中心にもういちどチェックし直しである。まるで、答えを全部書き終わった試験の残り時間で何度も検算し、同じ答えが出てきても確信が持てなくて益々不安が拡がる時に似ている。早くOlimexに送ってしまって、楽になりたい気持ちが募る。

 面付け図と、2つのbrdファイル、readme.txtをまとめてzipファイルにする。ウェブの古い別のOlimexの発注ガイドのサイトでは、readme.txtとzipファイルを別々に送れという指示があり混乱する。これは明らかに1つの間違いだ。readme.txtなどという汎用的な名前でファイルを送られたら受け取った方は大変だ。

 出来たzipファイルを念のためこちらで解凍し、正しくファイルが解凍されるのを確認したうえ、いよいよ送付である。「行けー」という掛け声とともに、送信ボタンを押す。何い、エラーで送れない。そんな馬鹿な。ブラウザーを動かしてみる。ありゃりゃ、ネットが不通だ。

 よりによって、このタイミングで回線が切れている。しかし、何もこんなタイミングで回線が切れることはないだろう。高ぶった気分が納まらない。どうしてやろうかと頭が激しく回転していた時、ウェブが復活した。数分の回線断だったようだ。

 メールを送り直す。今度は順調だ。zipファイルを添付したOlimexへのメールは無事、ブルガリアに向けて出発した。出した日は土曜なので受け付けられるのは、あさっての月曜だろう。今のところエラーメールで帰ってこないので、とりあえずOlimexのメールボックスには納まったようだ。

交流(AC)波形を調べる(9/6/09)
 発注データは送ってしまった。今さらもういちどEAGLEを動かして図面を見る気にはならない。誤りに気がついても間に合わない。気分が悪くなるだけである。手持ち無沙汰になったので、このあいだ思いついた実験をしてみることにした。

 考えてみたら、オシロがあるのだ。50Hzの交流など簡単に観測可能な環境を持っていることを忘れていた。電圧と電流をそれぞれ観測して、家庭内の機器が、どんな負荷か調べて見ようと思いたった。特にトランスを経由したあとの電圧を見てみたい。

 電圧の測定は直接100Vからとるのでなく、トランスを経由して絶縁すれば、危険な直接接続は避けることが出来る。しかし、トランスというのは誘導負荷のかたまりみたいなもので、これを経由して波形を見るのは本来意味がない。ただ、理論的には位相差は出ないことになっている(理想トランス)。これがどの程度なのか実際に見てみようというのである。

 こんなに絶縁にこだわるのは理由がある。家庭用の100V ACは漏電による感電事故に備えて必ず片側が地面に接地されている。筐体(接地してある)などにホット側が漏れ出せば直ちにブレーカーが飛び、接地側が漏れても漏電ブレーカーが動くようになっている。

 この結果、100Vを機器に引き込んで、うっかりプラグ(電極の大小で極性はわかるようになっているが)を逆に差してしまうと、機器のグランド側が地面に対して100Vの電位差を持つことになる。触れれば当然感電するし、繊細な電子部品など触れればあっという間にこわれるだろう。

 自作の、名刺ケースに入れたトランスのACアダプター(3、6V出力)で波形を見る。うーむ、少し歪んでいる。きれいな正弦波ではない。CTセンサーをはさむ。手持ちに10W以上消費できる抵抗がないので、とりあえず1Wほど流れるよう豆球(0.3A)の負荷をつける。おお、電流波形が出た。おや、このトランスの最大容量は0.16Aだ。これはいかん。焼けてしまう。Photo

 トランスにCTセンサーが動くほどの電流は流せないことがわかった。待てよ。テーブルタップを使い、ひとつをトランス、もうひとつを別の機器に入れ測っても、その時点の電圧と電流が測れるのではないか。

 やってみた。見事に各種の機器の波形を見ることができた。トランスの電流電圧位相差は2次側が無負荷のときは180°になることがわかる。電圧(赤)はこの際無視して電流(黄)波Photo_2形を見る。

 まず、手元の60Wの白熱灯スタンドを測定する。きれいな電流波形が出た。セラミックの半田ごても抵抗負荷なので正弦波である。次は、工作照明用の32Wの電球型蛍光灯 を使ったスポットライト。こいつは予想通り、派手なパルス波形が出た。調子に乗って、身のまわりの電気器具を片っ端から測り始める。スイッチング電源のDCアダプターも、完全なパルス波形だ(電流が少ないためオシロ波形はスケーPhoto_3ルが替わっている)。

 ドライヤーをモーターだけで測る。波形が半分削られたような電流波形になる。位相差はそう激しくない(力率が高い)。いやあ面白い。ただ、電圧は同じタップ上とはいえ、器具の負荷点で測っているのではないので、何ともいえない。

まだこだわっている(9/7Photo_4/09)
 1週間ぶりに事務所に出る。メールを片付けた後、当面の仕事がないので、ウェブで非接触で100V電圧を測る手立てをあれこれ探した。まだ、こだわっている。日置という昔からある計測器メーカーが「世界初の非接触電圧計を売り出し」たという去年のニュースリリースを見つける。原理は詳しくわからないが、静電結合で双方の波形を測定し、その差を電圧とするらしい。そうか非接触で電圧を測ることは普通は出来ないのだ。少し安心する。

 しかし、よく考えてみれば、ADコンバーターの部分さえ独立させ、そこでデジタルにしてしまえば、あとはフォトカプラーが使える。基板を別にしてグランドを独立させれば、感電の心配はなくなる。あの電力測定用のIC ADE7753もアナログ部とデジタル部のグランドは共通なので、この方式をとる必要がある。

 絶縁型のADコンバーターがあればフォトカプラーも要らないのだがと、ウェブで検索してみたら、あったのである。前のICと同じ、アナログディバイス社のAD7400というADコンバータだ。アナログとデジタルの間が絶縁されている。3.5KV以上の耐圧だ。DigiKeyでも1個売りしてくれるが¥984と少し高い。

 やはり考えていることはみんな同じだった。しかし、波形のサンプリングや、二乗平均をとる演算などの手間を考えれば(面白そうだけど)、専用ICのADE7753を使うのが最も合理的のようだ。DigiKeyで1個¥495で買える。絶縁はボードを分けてフォトカプラーを使えば良い。50Hzの観測データだ。フォトカプラーは高速である必要はない。汎用品で十分だろう。

 DigiKeyで買いたいものが増えてきた。しかし、送料無料の¥7000にはまだまだ達しない。欲しいのは今のところ、イーサネットのPHYトランシーバーとこの電力測定ICだ。2つづつ買ったとしても¥2000少々にしかならない。

整流をオペアンプでやるか(9/8/09)
 Olimexからまだ返事は来ない。波形実験の次は、CTセンサーからのAC出力をDCにする方法を思案している。整流回路だ。一番簡単なダイオードをシリーズにつけた半波整流回路は今度は使えない。ダイオードはどんなものでも順方向電圧降下というのがあり、微小電圧は整流できない。電圧が高ければたいした問題でないが、こんどは数mVからDCにする必要がある。電圧降下が少ないといわれるショットキーダイオードでも0.3V、入手難といわれるゲルマニウムダイオードでも0.1V、これでは話にならない。

 やはりオペアンプで検波回路を組み、いわゆる理想ダイオード回路で、小電圧を整流する必要がある。しかしウェブに出ている回路は、スペクトルアナライザーなどに使う高周波の整流回路が殆どで、高速性が重視されており、50Hzなどという「ゆるい」対象向けの簡便な回路例がない。

 オペアンプの整流回路といえば、このあいだのリズムキャプチャーで使った、単電源オペアンプの全波整流回路があるが、これは、ダイオードの順方向電圧以上でしか整流しない。

それにオペアンプを使うとなると、今度は消費電流が心配である。Xbeeをタイマーで止めて50μA以下にしても、こちらがミリアンペアオーダーで流れるというのは嬉しくない。

 ダイオードの入力側にバイアス電圧をかけて、この区域をキャンセルし、ソフトで補正する方法も考えられるが、今度は、測定上限電圧が低くなってしまうし、バイアス電圧の変動が直接誤差になってしまう。難しいものだ。

となるとFETでオペアンプの電源制御か。やれやれおおごとになってしまった。

OlimexからPO用紙が届いた(9/8/09)
 先週の日曜日にメールでデータを送ったOlimexから待望の返事が届いた。営業日2日目である。注文の殺到しているだろう休み明けにしては早い。夜の9時に届いているから現地は午後2時ごろだ。1日半というところか。来たメールはウェブで報告されている通り、たったの4行である。

Hi
attached is your po form
Best regards
Tsvetan / OlimexOlimex_po

 噂のTsvetan(ツベタン?)君である。まあ、Best regards(どうぞよろしく)があるだけ良しとせねばなるまい。問題は、請求金額だ。どきどきしながら添付のPO用紙(Purchase Order form)ファイルを開く。良かった。追加料金はなかった。パネルの面付けはあれで合格したようだ。ドリル数が500を超えた追加料金3ユーロは織り込み済みである。Xbee基板を入れると、どうしてもドリル数が500を超え、どうせならと汎用基板のようにパッドを沢山つけて全部で800近くになっている。送料を含めて合計41.5ユーロ、約¥6000というところだろう。うーむ、Xbeeピッチ変換基板を日本で買って、4枚にした方が安かったか。Xbeebrd

 それはともかく、早速クレジットカード情報を書き込んで発注書を完成させる。支払いがカードで出来、しかも、その情報をFAXで送らせるという用心深さが気に入っている。海外との通信販売で一番神経を遣うのがお金のやりとりだからだ。

 いよいよ国際FAXである。国際電話のかけ方を、ウェブで復習する。何、頭につける番号に沢山種類があるぞ。001だけじゃないんだ。マイライン契約のときはいらないだと?うーむ、そう言えば、あのマイラインってどうなったんだっけ。我が家の電話はだいぶ前から「ひかり電話」でこのあいだKDDIの「ひかりONE」に替えたばかりだがマイラインをどこにしていたのか全く思い出せない。

 いくら読んでも、良くわからないので、一番ポピュラーそうな001010を選ぶ。FAXにカード番号を書き込んだPOをセットした。Olimexへの電話番号を入れる。数回、短い通話音がしたあと、先方のFAXのネゴシエーショントーンが聞こえた。やった、つながった。
FAXが動き出す。無事POを送り終わった。1時間足らずで処理は終了した。

 次の日、Olimexからメールが届いた。例によって本文は

fax received

この一行だけである。まあ、これで用は済んでいる。POフォームを裏側にしてFAXしたのではないかと少し心配したが、これで安心だ。まさか白紙を受け取ってfax receivedとは書かないだろう。AirMailが結構日数を喰うみたいだが、今月中には届く予定だ。楽しみである。

| | コメント (0) | トラックバック (0)

2009年9月 4日 (金)

Xbeeを使った電力ロガーの仕様を考える

気楽に作れる機械ではない(8/27/09)
 当面の目的は電力ロガーだと、前の記事で気安く書いた。Xbeeの通信テストが順調に済んだので、具体的な設計に向けて少し本格的に電力ロガーについてウェブで調べ始めた。ところが、電力ロガーというのは殆どが業務用であり、簡易なものはともかく少しまともなものを作ろうとするととんでもなく大変なことになると言うことがわかってきた。これをXbeeのターゲットにしてしまったことを後悔するが、今さら難しいからやめますというのも悔しい。プライドが許さない。それにAC電流センサーを買ってしまってる。Pict0713

 電力ロガーを作ろうと思いついたきっかけは、前の記事に書いたとおりレーザープリンターの電力量を調べたくて電流センサーを買ったことから始まる。どうせなら我が家の電力消費量を時間帯別に把握したいと、この前の温度ロガーと同じような気楽な乗りで考えていた。しかし調べていくうち、交流(AC)の場合、正確な電力の測定というのは実は非常に難しいことがわかった。

 電力とは、電圧と電流の積であらわされる。ところが交流は電圧、電流とも、直流(DC)と違って一定ではない。波形が正弦波そのままなら、ピーク値から補正して(0.707)計算できるが、負荷がモーターや蛍光灯など、いわゆる誘導負荷と言われるものは、波形が大きく乱れるだけでなく、電圧と電流の位相差が出来る。つまり実際の電力は単純に電圧と電流をかけた量にならない。区間の平均の電圧と電流が測れても、平均電力はその積にならない。瞬間、瞬間の電圧、電流の積を積分しないと平均電力にならない。

 最近の家庭では、白熱灯、電熱器などのような単純な抵抗負荷は少なく、掃除機、洗濯機、冷蔵庫、クーラーなど、むしろモーター(誘導)負荷が多い。最近のPCのスイッチング電源も誘導負荷だ。この負荷の電力を正確に測定するには、電流だけでなく、電圧も同時に測り、しかも相当複雑な演算が必要だ。

 どこの家庭にもあるお馴染みの積算電力計は、このあたりはアナログで実にうまく測定している。電圧コイルと、電流コイルが円盤をはさんでおり、双方の積が円盤を回す駆動力になるようになっている。円盤の回転数が積算した電力になる。実に巧妙な仕掛けだ。あらためて感心する。

 それでも、ウェブで「Xbee 電力ロガー」などで検索をかけると、結構、電子工作として作った電力ロガーの例を見ることが出来る。なかでも、こちらと全く同じXbeeを使ったワイヤレス電力計をプロジェクトで作られた、Fenrirさんのサイトは実際にロガーを何台も作られて現実の家庭の電力を測定し、ちゃんとした結果まで出されている。素晴らしい。

 hamayanさんのサイト「UnderPower研究所」でも、Xbeeを使ったワイヤレスの電力測定の実験が行われている。ここのサイトは、当研究所が、何かやろうとすると必ずこのページに辿りつき、以前から何かとお世話になっている。ただ、どちらも、ちょっとプロ過ぎて参考にするには高度すぎる。

 Fenrirさんのページの中で、市販されている家庭用の簡易な電力ロガー、エコワットは、電流を測っているだけで、電圧が常に100Vで、電圧と電流の位相差がない(力率100%)と仮定して電力を計算していることが確認された。これに対して、hamayanさんの機械は、100VACの電圧、電流を真面目にマイコンのADCで数波形分サンプリングし、いわゆる実効電力をマイコンで計算している。Fenrirさんのところは、なんと電力測定専用のIC(アナログディバイスADE7753)を使っている。これはDigiKeyでも数百円で買えるICだ。驚いた。こんなものにもICがあるのだ。Ade7753arsz

 さて、困った。エコワットが電流だけしか測っていないのではという推測はあたっていたが、当初、エコワットを超えてもう少し精度の高い測定をしてやろうという野心は簡単に打ち砕かれた。電圧を測らないことにはどうにもならない。100Vの電力線に何かを接続しない限り電圧は測れない。

 上記のサイトにも触れられている通り、100VのACを相手にするには相当な覚悟が必要である。白状してしまえば、非接触型のCT(Current Transformer)電流センサーを買ったとき、これで100Vをいじらなくても電力が測れると思い込んだのが電力ロガー開発の動機でもある。今更、危険な100Vのハンドリングをしたくない。LANを使った電源制御では100Vを使ったが、フォトカプラーで分離した。今度は、アナログ入力なので分離するわけには行かない。下手な設計をすれば、コンセントの差し替えだけで感電する。トランスを使えば分離できるが、トランスそのもの位相差で何を測っているのかわからなくなる(理想トランスは位相差0だが)。

 電力測定用のICと言い、ADCで波形をサンプリングして実効電力を求めるロジックと言い、激しく工作心と好奇心を揺すぶられるのだが、安全に商用電源から電圧を取り出す方策が見当たらない。既知の抵抗を入れて、そこに流れる電流をCTセンサーで測れば、非接触で電圧が測れるが、大掛かり過ぎるし精度を上げるようとすると無駄な電力を食ってしまう。それに個別の電力ならともかく、配電盤をいじるわけにはいかない(このあたりの工事は資格が要る)。

 あれこれ思い悩んでいたが、冷静になって原点に戻ってみた。そもそも電力ロガーは、Xbeeのテストベンチのために選んだようなテーマである。ここにこだわって先に進めないのは本末転倒だ。電圧を測るのは止めることにする。この際は、涙を呑んで電流だけで電力を推定するエコワット方式でログをとることにする。Photo

 まあ負け惜しみになるが、正確な電力量は料金を計算する積算電力計が厳密に測っている(はずだ)。今こちらが知りたいのは、テレビや録画機、パソコン、ウオシュレットなど最近やたらに増えた電子機器の待機電力と、プリンター、冷蔵庫などの間歇的な大電力だ。相対的な実態がわかれば目的を十分果たせると思う。

全体の仕様を決める(8/29/09)
 電力ロガー開発の大筋が決まった。電流だけしか測らないことにしたので、センサー側にXbee以外のICを載せる案はもう考えないことにする。センサーは将来複数個を、家の中にばらまいて個別の電力量を測定することを考えれば、なるべく簡単に、安価に作れるほうが都合が良い。

 問題は、子機のXbeeのADコンバーターに、手元にあるCT電流センサーを直接つないでちゃんと所定のデータが出るかどうか、オペアンプなどの増幅回路を追加しないで済むかどうかである。

 データシートを見直す。これによると、6チャンネルあるXbeeのADコンバーターは基準電圧が、2.08VからVcc(3.4V)まで、10ビットの分解能で、1ビットあたり3 ~5mVである。一方、手持ちのCT電流センサー(U_RD社製 CTL-10-CLS)はカタログによれば負荷抵抗を1KΩにすると、0.1A(10W)で4mV程度の出力があるので最小のところはこれで良い。

 しかし、最大電流の方は10A(1KW)で、Xbeeの基準電圧を越える3V以上になってしまう。ピークの電力量も知りたいので、最小測定電力はもう少し上げる必要(負荷抵抗をもっと下げる)があるかもしれない。まあ、これはいつでも調整できる。いずれにしてもオペアンプなどの追加回路は必要ないことは確認できた。

 次は親機側の設計である。どの程度の間隔で、どれくらい測定データを収録するのか、記録媒体は何にするのか、機械の操作をどこでやるのか、グラフ化などの処理をどうやってやるのか、決めなければならないことは山ほどある。

 少し大げさな言い方だが、こういう具体的な用途が決まっていないシステム開発というのは、自由な設計が出来るように見えて実は一番厄介である。好い加減な検討で仕様を決めて作ると必ずあとで色々なところで不満が出てシステムの手直しをさせられる。

 今までやったことのない新しい仕事にシステムを適用しようとする時が、だいたいこれにあてはまる。技術的な可能性に任せて色々な機能を用意しても、まず殆ど使われない。無駄になる機能が多い。要するにやってみないとわからないことが多すぎるからだ。昔のシステム開発時代の悪い思い出が頭をよぎる。

 ただ、長年の経験でこれを解決するノウハウはある。それはシステムの最終目的になるべく近いところで想像力を駆使して可能な限りの具体的なシナリオを作り、そこからシステム機能を決めていく方式である。逆から機能を絞る。

 この電力ロガーで言うなら、このロガーを使った自宅の電力測定で何か無駄な機器が動いていることがわかり、その使い方を変えて消費電力の削減に成功した、というようなことが起きると想定し、そのために必要な機能を洗い出す。

 そういう観点から行くと、1週間位つけっぱなしの測定期間は必要なように感じる。使用者は今のところ自分しかいないので、操作性は余り気にすることはない。しかし、ソフトを公開することを考えるなら、余り要素は増やしたくない。PC側にアプリケーションを持たず、通信端末からのデータのCUT&PASTEでEXCELに取り込む今までの方法で十分か。ただ、PCがなくてもスタンドアローンで親機は動いている必要はある。

 間歇的な電力も知りたいので、測定間隔はなるべく短くしたい。しかし、あまり短くするとデータ量が増えすぎて処理が大変になる。記録媒体はEEPROMでは少なすぎる。やはりSDカード位は必要だ。するとプラットホームはMega168クラスというところか。

 SDカードにグラフに必要なデータが収容できれば、SDカード経由でデータをPCに渡し、少し大きめのLCDで、間隔設定や、開始終了指示をする完全なスタンドアローン機器にすることも出来るが、これは、まあ先のバージョンの話だろう。今のところはUARTだけで良い。

 段々、仕様が具体的になってきた。最後の大きな課題がXbeeの省電力を含めた設計だ。

Xbeeの仕様を決める(9/2/09)
 Xbeeは通信を待つアイドル状態の消費電流が50mAと結構大喰らいである。間歇的に測定する場合は、その間は休止させておかないと電池の消耗が激しい。この機械が実用的な機械になるかどうかの大きな課題だ。今回のプロジェクトで当初から一番気になっていた仕様である。

 データシートを読み込む。それによると、親機側からの指示で、子機を立ち上げることは不可能であることがわかる。Xbeeのステートマシンはアイドルを経由して各ステイタス(通信、アイドル、スリープ)に遷移するので、スリープから通信ステイタスには直接移れない。タイマーを使ったスリープで節電するしかないようだ。

 親機側の省電力の要請は余り大きくない。PCの近くなのでDCアダプターが使える。しかし、将来のスタンドアローン機器を考えると、子機のスリープと同期して動かすことも考えておく必要があるだろう。

 親機と子機はなるべく独立した機能を持ち、それぞれが相手を気にしないで動くこと。それでいて子機の送ったデータを逃さないこと。いわゆるRobustness(堅牢)なシステムを目指して、あれこれ思い悩む。

 その結果、出来たのが次の仕様である。想定している部分もあるので、これで出来るかどうかは未知数のところがある。

センサー側(子機)

  • 測定間隔: 10秒ごとのタイマーでADCを起動(間隔は親機から変更可能)
  • 測定開始: 電源を入れるとただちに起動。
  • 測定回数: 0.5秒間に100ms間隔で5回測り、親機へ送信する。
  • 送信後の措置:  直ちにスリープに入る
  • Acknowledge(確認): 親機が受け取ったかの確認はしない(送りっぱなし)

データログ側(親機)

  • コマンドの指示により、受信待機
  • 子機からのデータを受け取ったあと、100ms以上データが来なければ、1セッションとみなし、データの個数の平均を計算し、平均値をそのときのRTCデータとともに、SDカードに書き込む。
  • 書き込んだ後は、ファイルをSYNCし、不測の電源断に備える。
  • コマンドの指示により、ファイルクローズ

 使用のイメージは、センサー側の子機の電源を入れて、測定箇所に置き、親機も電源を入れてログを開始する。親機は、子機からのデータを待って、データ発信があれば子機識別情報と一緒に電流データを受け取ってログしていく。いつ受け取ったデータかは、親機のRTCで日付時分秒データを登録レコードにつける。

 PCへのデータ送りは基本はSDカード渡し。UART経由でもできるように、データダンプのコマンドがいる。考えられるコマンドは以下の通り(すべて実装するわけではない)。

  1. 子機の設定変更コマンド 測定間隔などを設定した子機の初期化コマンドを子機に送る
  2. 子機の状態表示コマンド 子機の状態、子機の設定パラメータを返す(要調査)
  3. 測定開始(ファイルオープン)コマンド
  4. 測定終了(ファイルクローズ)コマンド
  5. RTC設定/表示コマンド
  6. SDカードのファイル名表示
  7. SDカードファイルの内容表示
  8. 電源を入れてから記録したレコード数の表示

 結局、Xbeeを入れても、通常のUARTを使ったロガーと同じような形になった。将来的にはXbeeを複数台入れることを考えて1対1ではなく、1対Nの通信をしても大丈夫な構造にしておく必要がある。

 こんなことを考えるうち、9月を迎えた。Olimexへの注文の作業に切り替えて、こちらの方は少しお休みすることにする。

| | コメント (1) | トラックバック (0)

« 2009年8月 | トップページ | 2009年10月 »