
前回はアナログ温度センサMCP9701(Microchip社製)をリモートXBeeに接続してIR:I/O Sampling Rate 機能を用いて2秒間隔でローカルXBeeに結果を送信する方法を解説しました。今回はCyclic Sleep Modeを使用して30秒間隔で周期的なサンプリングを行う方法について解説します。
XBeeの「Cyclic Sleep Mode(周期スリープモード)」は、一定の時間スリープ状態に入り、その後短時間だけウェイクして、データの受信・送信やネットワークの維持を行います。このサイクルを繰り返すことで、常時稼働せずとも通信が可能な状態を維持しつつ、電力を節約します。
従って、バッテリー駆動の省電力アプリケーションにおいて非常に有効な機能です。XBee のCyclic Sleep Mode(周期スリープモード)により電力消費を大幅に削減します。従って、今回のケースのように温度センサを装着した電池動作リモートXBeeモジュールには有用な機能です。
(センサとリモートXBeeの配線:前回と同様です。)
・MCP9701の1番ピン(Vdd)をXBeeの1番ピンに接続
・MCP9701の2番ピン(Vout)をXBeeの19番ピンに接続
・MCP9701の3番ピン(GND)をXBeeの10番ピンに接続
(XBee設定条件)
デフォルト状態から以下の設定を実施します。
・リモートXBeeとローカルXBeeのIDを一致させる。
・リモートXBeeとローカルXBeeのAPをAPI Mode Without Escape [1]に設定する。
・リモートXBeeのD1をADC[2]に設定する。
・リモートXBeeのIRをデフォルトの0msに設定する。
・リモートXBeeのAV:Analog Voltage Referenceがデフォルトの1.25Vを使用します。
・リモートXBeeのSPを30000msに設定する。
・リモートXBeeのSTを500msに設定する。
・上記の設定が全て完了したらリモートXBeeのSMをCyclic Sleep[4]に設定する。
ここで、SPはスリープとウェイクを繰り返す全周期の長さを意味しており、SPとSTは以下の関係があります。
SP(1サイクル) = スリープ時間 + ST(ウェイク時間)
以上の設定でローカルXBeeが受信したAPIフレームを以下に示します。

このフレームを確認すると、アナログデータが10進数で740であることが分かります。XBee内蔵のA/D変換器の分解能10ビットなので最大値は1023となり、参照電圧Vrefが1.25Vなので、電圧に変換すると(740×1.25)/1023=0.9042[V]であることが分かります。この値と以下の式を用いて温度換算すると以下の結果を得ることができます。
T=(Vout-V0c)/Tc1=(904,2-400)/19.5=25.86[℃]
ファームウェアが802.15.4の場合は、Cyclic Sleepはバッテリー消費を抑える上で非常に有効であり、特にリモートXBeeからローカルXBeeへの定期送信に向いています。具体的には、センサーなどの「定期的にデータを送るだけ」の用途には非常に適しています。