XBee 100円Wall Routerに温度計測機能を追加する [XBee]
定番中の定番アプリケーションですね。対象はシリーズ1です。
※考えてみたらシリーズ1製品なので、ファームをDigi Meshにでも切り替えないとRouter機能は無いですね(笑)。ま、本当にRouterにする時はDigi Meshにするか、シリーズ2製品を使用してください。
XBee単体でのアナログ値の取り込みは、実は簡単です。
まずはX-CTUでWall Routerに搭載するXBeeの設定を行っておきます。
I/O Settingを開き、該当するポートのコンフィギュレーションを行います。今回はDIO0に温度センサーICの出力を接続したので、ここをADCとしておきます。
次にIRの項目です。これはサンプリング周期を設定するものです。64と書かれていますが16進でつまり100、単位はmsなので100ms周期と言う事になります。
ITの項目は送信前に何回サンプリングを行うかと言う事で、言い換えればここに設定された数分サンプリングが行われると、アナログ値をサンプリングした値を送信してきます。今回は16進でAなので10回分。
つまり100ms×10の1秒周期でデータが送られてきます。平均化処理をする時にここに適当な回数を設定すると便利ですね。
温度センサーICと言えば定番はLM35DZですが、あれは動作電圧は4Vからなのでここでは使用できません。代わりにLM61CIZを使用しました。これは最低動作電圧が2.7Vからなので余裕で動かす事が出来ます。
これを100Ωの抵抗と0.1μFのコンデンサで構成した一次フィルターを経由してDIO0に接続します。
比較する為に温度計もケース内に配置しています。
※写真はセリアの100円充電器に収めた様子。
別途用意したデータを受け取る為のXBeeの内容をX-CTUのターミナルで確認しています。
受信したデータはAPIフレーム化されており、バイナリなので直接は読む事ができません。「Show Hex」ボタンを押しておきます。
APIフレームなのでヘッダーだの、フレームタイプだの、データサイズだの、チェックサムだの色々付いて来ますが、着目したいのは1行目の最後のデータからスタートするデータ領域です。
01 1Dまたは01 1Cのデータが10個続いている事が判ります。
XBeeのシリーズ1に搭載されているマイコンのADCの分解能は10bitなので最大は1023、電源電圧は3.3Vです。ここから0x011Cは約915mVである事が判ります。
LM61CIZの温度係数は10mV/℃となっています。0度の時は600mVのオフセットが付いています。
電圧出力は以下の式で表されます。
Vo=温度係数×摂氏+600mV
先の915mVから摂氏を求めると31.5℃ですか。若干高めですね。もっともLM61CIZの確度が25度の時に±3℃もあるので仕様範囲内です(笑)。
基板自体の回路図はこんな感じです。わざわざお見せする程の物ではないですね。
本当は温度センサーICはケースの外に出さないと駄目です。ケース内部では他の回路の温度をもろにくらってしまい、何を測っているのか訳がわかりません。まあそのうち外に引き出しておきましょう。
※考えてみたらシリーズ1製品なので、ファームをDigi Meshにでも切り替えないとRouter機能は無いですね(笑)。ま、本当にRouterにする時はDigi Meshにするか、シリーズ2製品を使用してください。
XBee単体でのアナログ値の取り込みは、実は簡単です。
まずはX-CTUでWall Routerに搭載するXBeeの設定を行っておきます。
I/O Settingを開き、該当するポートのコンフィギュレーションを行います。今回はDIO0に温度センサーICの出力を接続したので、ここをADCとしておきます。
次にIRの項目です。これはサンプリング周期を設定するものです。64と書かれていますが16進でつまり100、単位はmsなので100ms周期と言う事になります。
ITの項目は送信前に何回サンプリングを行うかと言う事で、言い換えればここに設定された数分サンプリングが行われると、アナログ値をサンプリングした値を送信してきます。今回は16進でAなので10回分。
つまり100ms×10の1秒周期でデータが送られてきます。平均化処理をする時にここに適当な回数を設定すると便利ですね。
温度センサーICと言えば定番はLM35DZですが、あれは動作電圧は4Vからなのでここでは使用できません。代わりにLM61CIZを使用しました。これは最低動作電圧が2.7Vからなので余裕で動かす事が出来ます。
これを100Ωの抵抗と0.1μFのコンデンサで構成した一次フィルターを経由してDIO0に接続します。
比較する為に温度計もケース内に配置しています。
※写真はセリアの100円充電器に収めた様子。
別途用意したデータを受け取る為のXBeeの内容をX-CTUのターミナルで確認しています。
受信したデータはAPIフレーム化されており、バイナリなので直接は読む事ができません。「Show Hex」ボタンを押しておきます。
APIフレームなのでヘッダーだの、フレームタイプだの、データサイズだの、チェックサムだの色々付いて来ますが、着目したいのは1行目の最後のデータからスタートするデータ領域です。
01 1Dまたは01 1Cのデータが10個続いている事が判ります。
XBeeのシリーズ1に搭載されているマイコンのADCの分解能は10bitなので最大は1023、電源電圧は3.3Vです。ここから0x011Cは約915mVである事が判ります。
LM61CIZの温度係数は10mV/℃となっています。0度の時は600mVのオフセットが付いています。
電圧出力は以下の式で表されます。
Vo=温度係数×摂氏+600mV
先の915mVから摂氏を求めると31.5℃ですか。若干高めですね。もっともLM61CIZの確度が25度の時に±3℃もあるので仕様範囲内です(笑)。
基板自体の回路図はこんな感じです。わざわざお見せする程の物ではないですね。
本当は温度センサーICはケースの外に出さないと駄目です。ケース内部では他の回路の温度をもろにくらってしまい、何を測っているのか訳がわかりません。まあそのうち外に引き出しておきましょう。
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
2010-10-17 22:32
nice!(0)
コメント(2)
トラックバック(0)
APIモードのパケットの解説ありがとうございます。
サクッと作ってしまわれるのには感心します。
ようやくXBeeのマニュアルをプリントアウトしました。 シリーズ1が扱いやすいので、こちらから見ています。API Identifireが0x83になっていますが、マニュアルにはないので、0x81の解説を参考にデータを見てみると、0x0002がソースアドレスで、0x0Aがサンプル数、0x0200がアナログの0番を使っているというビット表示、その後、アナログのデータが続いているわけですね。10サンプル分。最後にチェックサム。
XBeeのモジュールを注文しているので、届いたら試してみます。
セリアで充電器を買ってきたのですが、コンデンサをあんなところに挿んでいるのですね。すごいなあー。
by asupiyoPaPa (2010-10-17 23:33)
0x83は、16bitアドレスのI/Oデータフレームですね。OEM RF Modules マニュアルの13ページにありました。
by asupiyoPaPa (2010-10-18 00:19)