冷凍庫の温度変化を無線センサーで測ってみた

冷凍庫にちょっとまだ暖かいものを入れた時、周囲のものにどれくらい影響があるのか気になりませんか? ということで、小型の無線センサーで温度変化を計測してみました。

使用機器

TWELITE ARIAは小型の無線センサータグです。-30℃〜85℃の温度範囲を0.01℃の分解能で計測できるため、冷凍庫でも動作するはず。
温湿度や扉の開閉等を磁気で計測して無線送信でき、2.5cm × 2.5cm × 1.0cm と小型です。コイン型電池(CR2032)1つで動作し、1分ごとの計測だと4年以上も動作するという省電力も良いですね。

BLUE(送信出力1mW)とRED(10mW)があり、冷凍庫の壁で隔てられた内側から送信することもあってRED版を使います。というか出力以外はほぼ同スペックのようなので、ほとんどのケースでREDを選ぶのが良さそうです。

モノワイヤレス 磁気・湿度・温度センサー無線タグ TWELITE ARIA RED


受信機として、USB接続できるMONOSTICKがあると簡単です。

モノワイヤレス USBスティック MONOSTICK レッド

セットアップ

初期設定として、送信チャンネルなどを設定します。設定方法はMONOSTICK側から設定を送信するOTAか、シリアルで直接接続して行います。
今回はすでに他の用途でMONOSTICKを使用していたので、それに合わせるようにシリアルで設定を行いました。

設定用のUSBアダプタ も販売されていますが、適当な3.3V FTDI - USBボードをすでに持っていればそれでも問題ありません。適当なターミナルソフトウェアで115200bpsでUSB FTDIにシリアル接続しておき、バッテリーを抜いてシリアルTX/RXと電源をARIAに接続します。SET端子をGNDに落とした状態でRSTをLO→HIにしてリセットをかけると,シリアルに以下のようなメニューが出てきて設定を行えます。

 a: set Application ID (0xabcd1234) 
 i: set Device ID (42=0x2a)
 c: set Channels (12)
 x: set Tx Power (13) 
 b: set UART baud (38400) 
 B: set UART option (8N1) 
 k: set Enc Key (0xa5a5a5a5)
 o: set Option Bits (0x00000000) 
 t: set Transmission Interval (15) 
 p: set Senser Parameter (0x00000000) 
 d: set Temperature Coefficient (0) 
 D: set Temperature Offset (0) 
 f: set Humidity Coefficient (0) 
 F: set Humidity Offset (0) 

MONOSTICK側では、標準で入っている App_Wings というソフトウェアを利用します。ファームウェアを書き換えている場合は Wings への書き換えが必要です*1。PC等に接続するとUSBシリアルとして認識されるので、そこに115200bpsで接続して + キーを1-2秒ほどかけて3回押すと、インタラクティブモードに入って同様に設定を行えます。

ここで計測値の送信間隔のほか、ARIAとMONOSTICK側に同じApplication IDと通信チャンネルを設定します。また、もし暗号化等を行う場合は暗号キーやその有効化フラグ(Option Bits)を設定します。他に、複数台のARIAを使用する場合は識別用にDevice IDを設定しておきます。ちなみにUARTの速度もメニューに出て来ますが、特定のOption Bitsを有効化しないとこの設定は使用されません。

詳細は商品紹介ページやドキュメントを確認してください。

どちらも設定がうまくいったら S を入力して設定値を保存すると、リセットがかかってその設定で動作し始めますので、通信が確認できたらARIAはバッテリー動作に切り替えます。

受信してみる

無事データを受信できると、MONOSTICKのシリアルにHEXで以下のようなデータが流れてきます。

:80000000D201858201C1BB2A800607003400038135001205350401000000113008020DAC113001020550000000018005010002063F010200021204FCB2

形式は以下ページに記載されています。
アリアアプリ - WINGS

がこのままでは読みづらいので、プログラムで温度に変換してやります。
MacLinux (RaspberryPi) で動作確認しています。使用する場合はシリアルのデバイス名を環境に合わせて書き換えてください。

なおこのプログラムはARIAの他に無線タグアプリの温湿度データも読めるようになっています。

#!/usr/bin/env python3
import datetime
import serial

ser = serial.Serial('/dev/ttyUSB0', 115200)  # Linux
# ser = serial.Serial('/dev/cu.usbserial-MW3NRDHG', 115200)  # macOS

def to_int(data, start, len, signed=False):
    ret = 0
    for x in data[start:start+len]:
        ret = ret * 256 + x
    if signed:
        ret = ret - 65536 if ret > 32768 else ret
    return ret

def parse(line):
    line = line[1:].rstrip()
    data = [x for x in bytes.fromhex(line)]
    pos = 0
    result = []
    if len(data) == 23:
        # 8000000030F523810C5978003A6F03B1022D039914445A
        # ^^^^^^^1^2^^^3^^^^^^^4^5^6^7^^^8^^^9^^^a^^^b^c
        for l in [4, 1, 2, 4, 1, 1, 1, 2, 2, 2, 2]:
            result.append(to_int(data, pos, l))
            pos += l
        result[6] = 1950+result[6]*5 if result[6] < 170 else 2800+(result[6]-170)*10
        result[9] = result[9] - 65536 if result[9] > 32768 else result[9]
        result[10] = result[10] - 65536 if result[10] > 32768 else result[10]
        return "relay=%X LQI=%d seq=%X id=%X sid=%X type=%X mV=%d adc1=%d adc2=%d temp=%d hum=%d" % tuple(result)
    else:
        for l in [4, 1, 2, 4, 1, 1]:
            result.append(to_int(data, pos, l))
            pos += l
        result.append(to_int(data, 34, 2))
        result.append(to_int(data, 51, 2, True))
        result.append(to_int(data, 57, 2, True))
        result.append(to_int(data, 46, 1))
        return "relay=%X LQI=%d seq=%X id=%X sid=%X type=%X mV=%d temp=%d hum=%d mag=%X" % tuple(result)

while True:
    line = ser.readline().strip()
    if not line.startswith(b':'):
        continue
    data = '{0:%F %T}\t{1}'.format(datetime.datetime.now(), parse(line.decode()))
    print(data, flush=True)

実行するとこんな感じの出力が出ます。tempの値が温度(℃)の100倍、humは湿度(%)の100バイです。他に磁気センサ(mag、HEX)や電池電圧(mV)、電波強度(LQI)等が出ます。
この例では -19.53℃ です。冷凍庫に入っているので冷えてますねw

2023-02-04 05:39:17	relay=80000000 LQI=30 seq=68D5 id=8201C1BB sid=2A type=80 mV=2530 temp=-1953 hum=4773 mag=80

出力をリダイレクトしてファイルに記録しておきます。

冷凍庫の温度変化をグラフ化してみる

さて、ARIAを冷凍庫に入れてみたところ、庫外の5-6mほど離れたMONOSTICKで無事庫内からのデータを受信できました。
十分ARIAが冷えたところで,炊き立てご飯を粗熱をとって冷凍庫のARIAの少し離れたところに入れてみた結果をプロットしたのが以下です。

30分周期くらいで山ができていて、冷凍庫の作動状況が見て取れますね。21:00くらいに3-4℃ほど上がったところで庫内に食品を入れています。ちょっと山が潰れているところがありますが、この期間はバースト的に通信に失敗してデータが欠落していたようです。2.4GHzで通信しているので、他の同周波数帯の通信の影響を受けてしまったのかもしれません。

特に冷凍庫は動きっぱなしになるでもなく、徐々に数時間かけて冷えていっているのが分かります。庫内には他に保冷剤なども入っていたので、それらと暖かい食品が冷えていく過程と冷却動作がそれぞれ影響しあっているようなイメージでしょうか。


というわけで、冷凍庫のような冷えた環境でもちゃんとTWELITE ARIAが動作することが確認できました。

*1:最初、無線タグアプリの親機モードで受信したところ、途中でデータ出力が止まってしまいました。ARIAはデータが大きくWingsでないとダメなようです。