目次へ

温度(室温)のリモートセンシング、モニタリング

サーミスタ(測温抵抗体)を使った温度計測とリモートセンシング

中国茶、紅茶をおいしく飲むための予熱の重要性

北京にいる親友から中国茶葉をいただきました。以前に中国茶を入れる実演を目にしたことがありますが、急須と湯のみに熱湯をかけて、温度を高く保っているようでした。今回は熱湯で入れるお茶(中国茶、紅茶)で必須となる余熱作業が、湯温にどのように効果を及ぼしているかを調査いたします。
手法として、サーミスタで温度を正確に測定し、台所にある急須の温度をXBeeで居間にあるパソコン(PC)へ飛ばすことにいたしました。太陽電池発電や気温、室温の多点のリモートセンシング、モニタリング等にご活用ください。工場やハウス栽培などでの多点計測や水漏れ警報器に応用されたい場合にはお問い合わせください。趣味の範囲ですがシステム開発が可能です。
Last undatepd on June. 3, 2012.(T先生よりミスのご指摘を頂きました。ありがとうございました。)


全体の手順

全体の手順は以下の通りです。必要なソフトやファイルは本ページからダウンロードできます。XBeeの使用経験が無くてもパソコンが使える人であれば完成できると思います。

  1. サーミスタとXBeeで温度を計測する回路を組む(ブレッドボード上で外付け抵抗1個のみの簡単回路)
  2. パソコンにデータを送り、保存する(専用ソフトをダウンロードしてください)
  3. お茶を味わいながら、データを解析する

用意する部品類

今回はArduinoなしで、XBeeをマイコン的に動作させます。サーミスタは250円で買いました。測定したい温度で分解能を上げるためには抵抗を選ぶ必要があります。今回は100℃付近で0.1℃の精度を出すために470Ωとしました。室温付近ではサーミスタの抵抗が上がるため、1から4.7kΩくらいが良いと思います。部品代はXBee2台とXBee-USB接続器を含めて6000円程度です。

  1. XBeeモジュール,2台
  2. XBee変換モジュール
  3. USB-シリアル経由XBee用データ書き込み機(1台)
  4. サーミスタ(温度測定用の抵抗体)
  5. ブレッドボード、470Ωくらいの抵抗(炭素皮膜抵抗)
  6. データを記録するパソコン(今回はエクセルで集計します)

使用したサーミスタ103AT-11

サーミスタの使い方

室温付近の温度の測定には熱電対よりもサーミスタが有利ですね。今回は103AT-11を使用します。セミテック(旧:石塚電子)のデータシートを読みますと、103AT-11は25℃で10.0 kΩ、B定数が3435Kであることがわかります。B定数については以下の式で表される温度係数であります。式変形して測定した抵抗Rから温度Tを求められるようにします。下の式を見るとB定数の単位が[K]であることがわかります。


手順1:XBeeで温度計測するための測定回路を組みます。

上の式から、T=373 K (100℃)とT=273 K (0℃)の抵抗を求めて、測定される抵抗値の範囲を考えます。エクセルのシートを作りましたのでご活用ください。データシートの値と少し誤差があるようですが、25℃を298 Kとするか298.15 Kとするかなどの扱いの違いかと思われます。誤りがありましたらご指摘いただければ幸いです。

サーミスタの抵抗の温度依存を計算するエクセルシート(ダウンロード)


サーミスタの温度変化

ここで103ATの場合、1 KΩから30 KΩ程度が測定できればよいことがわかりました。3.3 Vを印加した時の電流値はそれぞれ3 mA, 0.1 mA程度となります。XBeeのアナログ入力は1.2 Vが基準(これを1024分割して測定)ですので、470Ωの抵抗で読みだす(全体の抵抗に与える影響があるため、合成抵抗を考える必要があります)ことを考えます。100℃と20℃で、それぞれ1.07 V, 0.05 Vの電圧が出力されます。1.2 Vに対して10 bitの分解能は約1 mVに対応するため、室温付近で0.2℃程度、40℃を超えると0.1℃の変化が測定出来ることがわかります。このように、室温付近の温度測定に関しては、熱電対よりサーミスタの方が簡単に高い精度を出すことができます。

この回路で電圧Vを測定した時、サーミスタの抵抗R1はR1=3.3R2/V-R2で求められますね。温度センシングなどにご使用の場合にはもう少し高い抵抗域で測定しますので、直列抵抗も470 Ωよりも大きい1 kΩや4.7 kΩを使用することになると思います。温度域に適した抵抗を計算するのに自信が無い方は、ブレッドボード上で100Ωから4.7kΩくらいを接続してみて、測定する最高温度(サーミスタが抵抗最小になった時)にXBeeの電圧が1V程度となるようなものを選ぶのが楽だと思います。この時、テスターを使って抵抗の値を正確に測定しておくと、温度への換算の精度が上がります。


サーミスタによる温度計測回路。
外付け部品は抵抗1本のみ。
今回は3.3 VとしてPIN(1)の代わりに
Digital Output(19番端子)と使いました(配線が楽だったため)。

手順2:XBeeの設定方法と組み立て

Xbeeの設定は以下のファイルをダウンロードしてX-CTUソフトで読み込んでご利用可能です。セキュリティーのため、proファイルがアップロードできませんので、便宜的に拡張子をtxtと変えています。ダウンロード後、.proに変更してご使用ください。もちろん、個別に設定することも可能です。今回の設定は子機はRouter ATとして、アナログ入力を1秒に一回送信、親機はCoordinator APIとするだけです。子機は何台置いても大丈夫です。(どの子機からのデータを受信しているかは、送られてくるデータの前半部から判断することができます。)
Transmitter(子機)の設定(.proファイル)
Receiver(親機)の設定(.proファイル)
(セキュリティーのため拡張子をtxtに変更しています。.proに直してご使用ください。)


設定を記録した.proファイルをロードするにはここをクリックします。
その後、"Write"とすれば書き込まれます。

レシーバー(親機、受信機、Coordinator)の設定のポイント

-Function set-
• ZigBee Coordinator API
(今回は子機で読み取らせたデジタル信号を受信させるので、(ATではなく)API設定とする。)

-Networking-
• PAN ID=1357
(16進数で最大0×FFFFFFFFFFFFFFFFまでの値。同じグループで共通の10進数数値をつければOK)

-Addressing-
• ATDH=0 (Destination High=通信する相手の上位アドレス。
• ATDL=0 (Destination Low=通信する相手の下位アドレス。
(今回は受信専用で送信する必要が無いためATDH,ATDLともに0とする)。

-Serial Interfacing-
• ATAP=1 (APIモードをenableとして、モードを1とします。
[2012年6月訂正:以前の設定のATAP=2とすると、データ形式が変わって読みにくくなります。])
• ATAO=0 (API Output Mode=0, Native)

トランスミッター(子機、送信機、Router)の設定のポイント

-Function set-
•ZigBee End Router AT
(送信側はATモードです)

-Networking-
• PAN ID=1357
(上記Cordinatorと同じ番号)

-Addressing-
• ATDH=0 (Destination High=通信する相手の上位アドレス。
• ATDL=0 (Destination Low=通信する相手の下位アドレス。
(今回は送信先がCordinatorであるためATDH,ATDLともに0とする。)
スリープなどの設定の違いによりこの指定で動作しない場合には、XBee本体裏面の
個体番号を入力してみてください。

-IO Settings-
• ATD0=2 (D0端子をADC= Analog DC voltage readとしてサーミスタの読み取りに使用)
• ATD1=5 (D1端子をDigital Out, Highとしてサーミスタへの基準電圧の出力に使用)

-Sleep Mode-
• ATSM=0 (スリープしない。これにより、複数の子機を持った時にルーターとして働く。)

-IO Sampling-
• ATIR=3E8 (データ取得間隔。3E8=1,000 msec=1sec。1secごとにデータを読み取る。)

通信設定(Serial Interfacing, 送信機と受信機で共通)

以下のエクセルファイルでデータを読む時には、この設定にしてください。
サーミスタによる温度計測回路。
XBeeに抵抗が1個ついているだけです。製作時間10分。


送信機(子機)。XBeeの外付け部品は470Ωの抵抗のみ!
左上の1番端子が電池のプラス、左下の抵抗がつながっている部分がマイナスです。

接続は以下の通りです。XBee(19)に3.3Vを出力させていますので、XBee(19)-サーミスタ-470 Ω抵抗-GNDとなっています。そして、470Ω抵抗の上流がXBee(20)のAnalog INに接続され、電圧を読み取れるようになっています。


受信機はこれだけ。指先サイズ。USBケーブルとXBeeドングル、XBee。
これでUSBでパソコンにつなぐだけです。

手順3:XBeeで受信したデータをExcelで読む方法

XBeeにシリアル通信で届いたデータは16進数(HEX)で、子機のID等も含まれるデータであるため、必要なアナログ電圧値を読みだすのは面倒ですね。今回はEasyComを使ってエクセルでデータを読み出すソフトを作りました。100バイトデートまでの生データを読み出せるように組みましたので、必要な方は以下からダウンロードしてお使いください。ボタンを押すだけでデータを随時読み込みます。生データを全て読みだしているのであらゆる送信形式に対応可能です。必要なデータ部分をエクセルのセル操作で抜き出してください。

XBeeExcel2-1.xls (エクセルでXBeeのシリアルデータを読み込むマクロ,フリーソフト)


エクセルでXbeeからのデータを読み取るソフト。
ダウンロードして[スタート]ボタンをクリックすれば動きます。

実証:余熱がある場合と無い場合での湯のみの温度変化

いよいよ動作実証です。無線で温度を1秒ごとに読み取ってパソコンでモニタリングします。以前に報告したメール機能と組み合わせれば温度異常や水漏れの検知と警報メールの自動送信が実現可能です。今回の実験ではまず、氷水にセンサーをつけて、0℃を正しく測定できるかをチェックしました。0.1℃の表示により問題が無いことがわかります。そして以下の写真のように、室温の急須の口の部分にセンサーを入れて、熱湯を一気に注ぎました。この時、最高温度は73.7℃までしか上昇しませんでした。この後、お湯を捨てて、予熱後の状態を見るために、再び熱湯を注ぎました。この時の最高温度は83.3℃でした。測定した位置が急須の口の先端に近い部分であるため、100℃を記録することはできませんでしたが、予熱の有無で10℃近い温度差が生じていることがわかります。熱湯で煎れるウーロン茶や紅茶などは、急須や湯呑みを温めることが非常に重要であることが理解できます。


湯のみの温度の実測値


測定システム(子機)の全体


測定中。


氷水につけて0℃を確認。


APIのモードについて(追記)

XBeeにデータを読み取らせる場合などにAPIを利用するためには、API mode=1または2を設定する必要があります。API mode=2とすると「escapingあり」となり、送信されるデータ中の[0x7E](1Byte)が[0x7D] [0x7E xor 0x20](2Byte)に自動に変換されます。マイコンなどでデータの開始[0x7E]を直接に検出する場合を除いてはAPI mode=1としておくのが良いかと思われます。


初めてのトライの時にはネットの情報より書籍が役に立ちますよね。

[当日出荷][送料無料]温度2チャンネルのコンパクトデータロガおんどとり 表示付温度データロガ...

[当日出荷][送料無料]温度2チャンネルのコンパクトデータロガおんどとり 表示付温度データロガ...
価格:24,738円(税込、送料込)

〈 Arduino 〉XBee Shield V1.1

〈 Arduino 〉XBee Shield V1.1
価格:1,502円(税込、送料別)


戸田よろず研究所トップページへ

ここで公開するアイデア/装置は安全性を保障しておりません。用途に応じた設計を行い、十分な安全検査を行ってからご利用ください。本サイトの情報の営利目的での利用はご遠慮ください。本サイトの内容の無断転載を禁じます。© 2012 TYK