XBee ZigBee 気圧センサーの製作方法

by ボクにもわかる地上デジタル

XBeeメインメニューへ戻る
地デジトップへ戻る

はじめに

 このページではXBee ZigBee(以下XBee ZB)を使った気圧センサーの製作方法を説明します。XBee ZBモジュールを使えば、簡単にメッセージやOn/Off信号をワイヤレスで交換することが出来るようになります。ZigBeeの最大の特長は、End Deviceの電源ONの状態を短くすることで低消費電力となり、電池駆動での長期間動作が可能となることです。
 ここでは単3電池1本で駆動可能な気圧と温度を測定する気圧センサーを製作してみます。およその待機電力は1.5Vで0.15mA程度です。平均消費電流は動作間隔によりますが、1分間隔のデータ送信で3〜6か月程度、持続します。

ハードウェア・回路図・ソフトの概要

 回路製作にはパターンがブレッドボード風のユニバーサル基板を用いました。右から順に、気圧センサーSCP1000-D01、PICマイコン、そして、およそ中央付近に取り付けられているのがDCDCコンバータ、一番左がXBeeモジュールです。回路とソフトは合同会社パレットソフトのサイトの情報を参考にしました。(同社からの許可を得て掲載しています。)

PICマイコンとXBeeによる気圧&温度センサー
PICマイコンとXBeeによる気圧&温度センサー
参考文献:http://www.palettesoft.co.jp/technology/pic/etc/press/pic_press.htm

ZigBee 気圧センサ PIC 12F683用ソフトウェア
ファイル 説明 Ver. 更新
TestPress.pdf 配線図・回路図(PDF 全2頁) 1.1 11/03/06
TestPress100.zip ソース、プロジェクト一式 1.00 11/01/17
TestPress101.zip シリアル遅延対策の暫定版 1.01 12/06/16
main.c ソースリスト(main.c) 1.0 11/01/17
Digi_XBee_Profile.zip XBee設定プロファイル 1.0 11/01/17
上記ソフトウェアに関していかなる損害も補償しません。
Ver 1.00は長期間の動作検証済みです。(保証はありません)
Ver 1.01はXBeeのシリアル通信のフレームが分断されるのを対策していますが未検証です。

ハードウェアの製作

 上記の表から配線図のPDFがダウンロードできます。1ページ目はブレッドボード全体の配線図で、2ページ目がDCDCコンバータ部の配線図です。なお、DCDCコンバータの出力の電界コンデンサは1000uF以上の大きな容量が無いとXBeeが立ち上がらない場合があります。なお、PICは次節の書き込みを行ってから基板に取り付けます。

PICマイコンとXBeeによる気圧&温度センサー
PICマイコンとXBeeによる気圧&温度センサーの配線図・回路図

ソフトウェアの書き込み

 上記の表からPIC 12F683用のプロジェクト一式がダウンロードし、Projectフォルダ内のTestPress.hexのファイルを、PICkit2を使用してPIC 12F683に書き込みます。書き込む時は、通常のブレッドボードなどを使用してPICkit2とPIC 12F683を接続します。
 PICkit2に付属の書き込みソフトウェア「PICkit2 PROGRAMMER」を使用する場合は、「PICkit2 PROGRAMMER」の「File」メニューの「Import Hex」を選択して、HEXファイルを読み込ます。次に、ウィンドウ内の「Write」ボタンを押す(または「Programmer」メニューの「Write Device」を選択する)とPIC16F688にソフトウェアを書き込むことが出来ます。

XBeeの設定

 上記の表からXBee設定プロファイルをダウンロードし、X-CTUを使用してXBeeに書き込みます。書き込む時は、通常のブレッドボードなどを使用してXBeeをパソコンに接続します。
 X-CTUを起動し、ウィンドウ内のタブ「PC Settings」でXBeeを接続したシリアルポートを選択してから、タブを「Modem Configuration」に切り替えます。まずは、「Modem Parameter and Firmware」の「Read」ボタンを押します。「Function Set」が「END DEVICE AT」になっていない場合は「END DEVICE AT」に変更します。「Version」は、なるべく「2841」以上を選択し、「Modem Parameter and Firmware」の「Write」を押してファームウェアの書き込みを行います。
 次に、設定を書き込むために、「Profile」「Load」ボタンを押してダウンロードしたTestPress.proを選択します。そして、ファームの書き換えと同様に、「Modem Parameter and Firmware」の「Write」を押します。しばらくすると、XBeeのリセットが促されるので、XBeeのRESET(5)でリセットをかけるとプロファイルの書き込みが開始されます。
 実用的に使用する場合、休止間隔(SP値:Cyclic Sleep Period)を28秒(SP値=0AF0)などに設定することで、単3電池1本で約1か月以上の動作が可能です。設定変更時の注意点はXBeeのEnd Device側だけでなく、Coordinator側のSP値も設定することです。Coordinatorには、ネットワーク内にあるEnd Deviceの最大のスリープ時間(SP値)を設定しておくことで、End Deviceの参加情報や送信待ちのデータを少なくとも設定された最大スリープの間、保持します。
 さらに、何か月も動作させたい場合は、動作サイクル(SN値:Number of Cycles to power down)を設定します。例えば、休止間隔25秒(SP値=9C4)、動作サイクル12回(SN値=0C)と設定すれば、測定が5分間隔になります。詳細は「XBee ZigBee スリープ方法」を参照ください。以下は1分間隔の例です。実力的に3〜6ヶ月ほど動作します。(DCDCコンバータやコンデンサのリーク電流などによって大きく変わる場合があります。)

ZigBee 気圧センサー X-CTU による XBee 設定例 (1分ごとに送信)
AT name 初期 説明
SM Sleep Mode 0x04
Cyclic
0x04
Cyclic
No Sleep(00)/Pin Hibernate(01)/Cyclic Sleep(04)/Cyclic Sleep Pin-Wake(05)の切り換え。Cyclic Sleep wakes on timer expiration.
ST Time before Sleep 0x1388
5000[ms]
0x01F4
500[ms]
シリアルやRFの通信終了後、省電力モードに移行するまでの待ち時間[ms]。
SP Sleep Period 0x0020
32x10[ms]
0x07D0
20秒
ZigBeeデータ通信のための省電力モードの持続時間x10[ms]。RouterとCoordinatorは情報の最大保持期間。設定範囲は0020(320ms)〜0AF0(28sec)。
SN Sleep Number 0x0001
毎回起動
0x0003
(20×3)秒毎
外部CPUを起動するまでの起動カウンタ。SP後に通信データが無い場合は省電力モードになり、それがSN回続くと外部On/Sleep pinへON信号(H)を出力する。(SP×SNの間隔で起動)
SO Sleep Options 0x00
オフ
0x00
オフ
0x02 - Wake for ST time on each cyclic wake (after sleeping for SP*SN)
0x04 - Enable extended cyclic sleep (SP毎にポーリングしない)

親機の製作

 親機には「XBee ZigBeeを使ってセンサネットワークを構築しよう」に記載のセンサーネットワーク用の親機(パソコンにUSBでXBeeを接続したもの)を製作します。また、本センサー(子機)から情報を収集する親機XBee用のソフトが必要です。
 親機で動作させるためには汎用的な「ATコマンド解析ツール for PC」を用います。このアプリは「xbee_test (COM番号)」で起動します。その後、センサーのコミッショニングボタン(回路図の左上のボタン)を押せば、センサーから送られてきたUARTデータをコンソールに表示します。最新版は「XBee 管理用ライブラリ ZB Coordinator API」の「xbeeCoord_XXX.zip」に含まれています。

親機となる PC用ソフトウェア
タイトル ソフト 備考
管理用ライブラリ ZB Coordinator API 最新版(xbeeCoord_XXX.zip)をこちらからダウンロードください。
ATコマンド解析ツール for PC xbee_test.c 上記用の汎用サンプルアプリ

 あるいは、下図のような AT Coordinator親機を使用することもできます。

XBee AT Coordinator親機
XBee AT Coordinator親機(スイッチ対応版)

1日の気圧変化

 下図は1か月分の測定結果です。横軸を1日の時間、縦軸が気圧です。16時あたりの変化点は直射日光があたって測定結果が乱れてしまったものと思います。また、気圧の低いとき(悪天候のとき)に波形が乱れているのは風のためと思います。

1日の気圧変化
1日の気圧変化の測定結果

 以上のように、「PIC 12F683用 気圧センサ End Device」と「AT Coordinator親機」を使うことで、屋外の子機で測定した気圧データを無線通信で室内の親機に伝えることが可能になります。

気圧の絶対値と補正

 一般に1013.250hPa以上を高気圧、それ以下を低気圧と定義されており、天候によって、およそ20hPa程度の変化があります。
 また、標高が高くなると気圧は下がります。およそ100mにつき10hPaの変化があるので、例えばマンションの1階と10階では測定結果が大きく異なってしまいます。このため、標高0mの気圧に補正することがあります。例えば天気図を作成するような場合は標高0mの気圧に補正(換算)して使用します。
 測定点の標高を知るにはGPSを使用するか、インターネットの地図サービスなどの一部に標高表示の出るものがありますので、そちらを利用します。地図サービスを使用した場合で、マンションの高層階の場合は測定点までの高さも考慮する必要があります。

検証

 測定した気圧情報が正しいかどうかを確認するために気象庁の「過去の気象データ検索」を利用します。下図は気象庁のデータとの比較です。気圧センサ、気象庁ともに測定地点の標高=0(海面)における気圧値に補正したデータです。気圧センサ(青)の方が気象庁(赤)よりも1〜2hPaほど高めの値を示していますが、概ね精度良く測定できていることがわかります。気圧センサ(青)に2か所ほど突起のようなものがありますが、これは直射日光による影響です。前出のグラフよりも低減していますが市販の百葉箱に入れれば改善できると思います。

1週間の気圧変化
気象庁のデータとの比較(1週間の気圧の推移)

 このグラフを見て「自分でも作りたい」と思った人は、ぜひ製作に挑戦していただきたいです。このページを訪れている時点で、始めから買った方が早いものであっても自作することに意義を感じられている方が多いと思うからです。しかし、上図は気象庁からデータを取得すれば同じ目的が果たせることも検証できたことになり、製作意欲の低下をまねいていることも事実と思います。

気圧測定による天気予報

 一般的に気圧が下がると雨が降ります。気圧が下がると気圧の高い地表からの大気が流れ込み上空へ向けて上昇気流が発生し、地表の水分の含んだ空気が上空で冷やされて飽和状態(温度が下がると空気中に含むことが出来る水分量が低下し)となり水滴となり、再び、地表に降り注ぎます。
 下図は梅雨期の1ヶ月間の気圧値(青:1013hPaを基準とした相対値)降水量の目安(赤:負数)を記したグラフです。

気圧と降水量
気圧と降水量(1か月間の気圧の推移)

 グラフの左の方ではやや気圧が低く雨が降っていましたが、徐々に気圧が上がり1週間ほど快晴が続きます。その後、気圧が下がり、低めに推移している期間に雨が降っていることが分かります。月の中半に差し掛かると気圧が一気に下がり、大雨をもたらし、その後も低い気圧が続き、雨が続きました。
 このグラフから晴れの前兆として気圧の上昇が、雨の前兆として気圧の低下が観測されていることが分かります。つまり、気圧の変化から天気予報らしきものを行える可能性があるのです。

 しかし、天気予報を行うに当たりいくつかの課題があることが分かります。一つ目は、気圧がどこまで下がれば雨が降るのかということです。基準の1013hPaから10hPaも下がれば大雨が降る前兆となりますが、数日後に降り出すこともあれば、即日に降り出すこともあります。また、ポツポツ雨は-5hPaあたりで降る時と降らない時とがあります。さらに、気圧(青)のラインを良く見ると1日の中で周期性があることも分かります。この周期を除去するために平均化などのフィルタ処理すると、その遅延によって未来の天気では無く、現在の天気を推測する予報になりかねません。

何hPaから雨が降るのか

 このデータを見る限り基準の1013hPaの-5hPa、すなわち1008hPaあたりで雨が降る可能性があります。また、1日の変化量で-5hPa/日ほどの傾きがあれば、すぐに雨が降ってくることが分かります。したがって、現在の気圧が1008hPa以下であり、かつ-5hPa/日の傾きを検出した時に雨とすることで判断できそうです(但し要フィルタ処理)。またポツポツ雨は1013hPa以下だと、いつでも発生する可能性がありますが、気圧だけで予報することは困難だと思います。

フィルタ処理をどのようにするか

 まずは今回、作成したフィルタの効果を下図に示します。フィルタ前(紫)が細かな変動が絶えず発生しているのに対し、フィルタ後は滑らかになります。フィルタによる若干の遅延が見られますが、予報に影響しないように止めています。

気圧の推移
気圧データのフィルタ処理結果

 上図のフィルタ前(紫)は、気圧の変化-5hPa/日(-0.2hPa/時)以上の傾きが雨とは無関係に1日の変化の中で発生しています。フィルタ前の1時間の気圧の変化量をhPa/日の単位で表すと下図のようなグラフになります。-5hPa/日の変化が絶えず発生し、降雨判定は不可能であることが分かります。

気圧変化量
気圧変化量(1時間の差分値を[hPa/日]に換算・ノイズだらけ)

 ところで本ページの上の方に「1日の気圧変化の測定結果」を示しており、良く見ると、毎日、7時頃から上昇し10時頃から14時にかけて書こうするといった似たような変化をたどっていることが分かります。
 つまり過去の1日の変化の様子を学習し、それを減算すれば1日の動きを除去することが出来ます。ソフトウェアにおいては、まず気圧データを6時間の移動平均でプリフィルタをかけておきます。そしてプリフィルタ後のデータに対し、現在時刻の気圧値から過去24時間分の気圧データの平均値を減算した値を保存します。その保存データのうち過去1週間分について、異なる日の同じ時刻同士のデータの平均値を求め、0時から24時までの24時間分の気圧データ補正値として学習保存します。天気予報に使用するデータは、各気圧値から同じ時刻の補正値を減算することでフィルタ処理します。最後に再度、6時間の移動平均をかけます。以上のフィルタ処理後の変化量を下図(緑:フィルタ後の1時間あたりの気圧変化量[hPa/日])に示します。上図のフィルタ前から大きく改善できました。

気圧変化量(フィルタ後の1時間の差分値を[hPa/日]に換算)
気圧変化量(フィルタ後の1時間の差分値を[hPa/日]に換算)

 なお、ここに示したフィルタの例は、比較的、簡単な一例であり、精度を上げるためには様々な手法を取り入れる必要があると思います。

具体的な判定処理

 以上のフィルタを用い、気圧1008hPa以下でかつ変化量-5hPa/日の時点で雨を判定すれば雨を予報することが出来ると思います。さらに、-10hPa/日の変化量を観測した時は大雨などといった降雨の度合いや、気圧1013以上、変化が5hPa/日で上昇している時は晴れを予報することも可能だと思います。
 それ以外の条件の場合は最後の判定結果を継続します。さらに湿度センサを併用すれば湿度80%以下などで雨が止んだことを検出できるので、雨の予報後に曇りを確定することも可能でしょう。

さらなる調査や調整

 以上の方法では、まだまだ予報精度が貧弱です。例えば、上記の学習方法では気圧が急激に変化した時に、その後、1週間、気圧の変化が起こった時間帯に誤差が増えてしまいます。学習前に以前の学習値と大きく異なる場合は、その値を学習値に採用しないといった手段を講じる必要があるでしょう。また、ここでは気圧のみを測定していますが、前述のように湿度センサと組み合わせたり、気温の変化などからも精度を高めることが出来るかもしれません。
 もちろん、地形や地域によっても判定の基準となる気圧値などが異なるでしょう。ふと、周辺地域の情報を気象庁のサイトから入手すれば、精度向上に役立つかと思いますが、そうなると、わざわざセンサーで測定して予報する意義が分からなくなってくるかもしれません。

 当然ながら、ピンポイントの情報だけで色々やったところで気象庁の天気予報なみの精度には到底、及びません。気象衛星や全国の観測所からの幅広い情報から予報する方法とは比べ物にならないでしょう。ただ、そう考えるとなおさら自分の製作したセンサーによるピンポイント情報だけで、どこまで精度を高めれるかと挑戦したくなるのはボクだけでしょうか。

百葉箱

 このワイヤレス気圧センサを使って正しい気圧を測定するには、センサを屋外に設置する必要があります。(というか、そのためにワイヤレス化が必要なので説明の順序としては逆です。)
 屋外に設置すると電池による長期間駆動が必要なので、XBeeモジュールをZigBee End Deviceに設定します。いや、センサやXBeeモジュールが発熱すると測定誤差が発生するので、XBeeモジュールをZigBee End Deviceにして、ワイヤレスセンサの発熱を最小限に抑えます。(こちらも、説明の順序は不適切です。)

 いよいよ本題ですが、屋外に設置する際の天敵は、雨と風、日光です。これらを遮るために百葉箱に収容します。壁掛け型であれば5万円くらいからありますが、脚足に設置するタイプだと本体だけで10万円以上しますので、趣味の範囲であれば壁掛け型をお奨めします。

特小15型百葉箱 (壁掛け・鉄柱取付兼用タイプ) 百葉箱 H6 (8-5651-02) 百葉箱壁掛け型6号 本体 H6 単葉型 完成品 百葉箱小型4号 本体 H4-HT 単葉型 組立式
マイゾックス
特小15型()
アズワン
壁掛け型6号()
大平産業
壁掛け型6号()
大平産業
小型4号()

 百葉箱を設置する場所は建物や地面から離れた芝生などの上空が一般的です。百葉箱が空間に浮いているような状態が最も適切です。また、日中に日があたる場合は扉を開いたときの直射日光を防止するために扉側を北側になるようにします。
 しかし、そのような恵まれた場所で測定することが出来る人は少ないでしょう。例えば、また百葉箱そのものは日光を反射しますが、取り付ける壁面が日光を吸収し、影響する場合もあります。
 壁掛けタイプといっても、なるべく壁面から離します。また、百葉箱が小さいと直射日光に曝されたときに、若干の内部温度上昇を伴いますし、雨、風の影響も、若干、受けてしまいます。こういった設置場所の調整を考えると、市販品の価値は十分に高いと思います。

 もちろん、百葉箱を製作することも可能です。雨と風、日光を遮りつつ、風通しの良い箱を作ればよいのです。百葉箱の取り付け場所がベランダなど雨の当たらない屋根の下にあるのであれば、日光だけを遮れば良いので、自作が比較的容易となるでしょう。

強制通風管

 百葉箱と同じような働きをするものに通風管(通風筒)があります。温度や湿度の測定用で、ファンを用いて強制的に箱の内部を排気します。強制通風するということはセンサ部の気圧が下がってしまうので、安定した気流を発生するための工夫や気圧補正が必要となります。強制排気のメリットは、無線モジュールを気圧センサより排気ファン側に配置することで、無線モジュールの発熱の影響を減らすことが出来ます。電池駆動のXBee ZBの場合、気圧の測定に影響するほどの発熱はありませんが、ACアダプタなどでXBee PRO ZBモジュールを駆動させた場合は通風管に入れるメリットを活かせるでしょう。(一般的に通風管は金属製なのでアンテナに工夫が必要かもしれません。)
 なお、自然通風管という商品もあります。形状が(箱状ではない)筒状なので百葉箱という言葉を避けたものと思いますが、内容は百葉箱と同じものと考えてよいでしょう。自然通風管を用いる場合、百葉箱と同様に内部の発熱を下げるためにXBee ZBを用いた本ページ記載の乾電池駆動のセンサを用います。


XBeeメインメニューへ戻る

地デジトップへ戻る