日曜技術者のメモ

趣味でやった事のメモ書きです。

リチウムコイン電池で動くワイヤレス温湿度気圧ロガーを作ってみた-2-

前回の続き。

se.hatenablog.jp

本当は↓の連続送信テストが終了したらブログに纏めようかと思っていたが、2週間待っても電池が切れないので途中結果で書いておく。

連続送信テスト

前回の投稿から電池の持ちを調べる為に電池での連続送信テストしてみた。
実際の使用は1送信/1分の予定だがかなり時間がかかりそうなので 1送信/1秒という高頻度で送信をした。

センサーデータはシリアルポートでPCに接続されているのでTeraTermとかで適当にログを取れば済むのだが、日付や電池の電圧もログに取りたかったのでPythonを使ってプログラムを書いた。
↓が書いたプログラム

# -*- coding: utf-8 -*-

import serial
import signal
import sys
import datetime

def handler(signal, frame):
    f.close()
    dmm_ser.write(("SYSTem:LOCal\r\n").encode(sys.stdout.encoding))
    dmm_ser.close()
    sensor_ser.close()
    sys.exit(0)


f = open('test.txt','w')

signal.signal(signal.SIGINT, handler)
sensor_ser = serial.Serial(port="COM4", timeout=3,baudrate=19200)
dmm_ser = serial.Serial(port="COM3", timeout=3,baudrate=9600)

dmm_ser.write(("SYSTem:REMote\r\n").encode(sys.stdout.encoding))
i = 0;

while(1):
    line = sensor_ser.readline()
    dmm_ser.write(("READ?\r\n").encode(sys.stdout.encoding))
    dmm_val = dmm_ser.readline()
    d = datetime.datetime.today()
    ss = d.strftime("%Y-%m-%d %H:%M:%S")
    print( str(i) + "," + ss + "," + line.strip().decode('utf-8').replace(':', ',')+"," + dmm_val.decode('utf-8').strip())
    f.write( str(i) + "," + ss + "," + line.strip().decode('utf-8').replace(':', ',')+","+dmm_val.decode('utf-8').strip()+"\n")
    i = i + 1

f.close()
dmm_ser.close()
sensor_ser.close()

今使っているHP 34401Aはシリアルポートでリモート測定ができるので pyserialで両方のシリアルポートに接続し、日付を追加してファイルに保存している。
ファイルの中は↓のようになっている。

0,2017-08-02 00:22:08,00,XXXX,46,29,64,10,08,78,49,88,00,+3.15603450E+00
1,2017-08-02 00:22:09,00,XXXX,46,29,64,10,08,78,49,65,00,+3.16726560E+00
2,2017-08-02 00:22:10,00,XXXX,46,29,63,10,08,79,49,51,00,+3.17619240E+00
3,2017-08-02 00:22:11,00,XXXX,46,29,61,10,08,77,49,44,00,+3.18370380E+00
4,2017-08-02 00:22:12,00,XXXX,46,29,60,10,08,79,49,41,00,+3.18991540E+00
5,2017-08-02 00:22:13,00,XXXX,46,29,59,10,08,78,49,41,00,+3.19537430E+00
6,2017-08-02 00:22:14,00,XXXX,46,29,57,10,08,74,49,40,00,+3.20004990E+00
7,2017-08-02 00:22:15,00,XXXX,46,29,55,10,08,79,49,39,00,+3.20418880E+00

ファイルの中身はカンマ区切りで先頭から

0.受信回数
1.受信日時
2.送信モジュールのノード番号 3.送信モジュールの固有ID(↑のログでは一応XXXXに変えています)
4.受信データの RSSI 値
5.温度(整数部)
6.温度(少数部)
7.気圧(千・百の位)
8.気圧(十・一の位)
9.気圧(小数部)
10.湿度(整数部)
11.湿度(少数部)
12.空き
13.電圧
と並んでいる。

IM315TXは一度に8byteしか送れないので詰めて送信している。

温度・気圧・湿度の推移

Pythonスクリプトから出力されたファイルをExcelで読み、グラフ化したのが以下ツイートの画像

これをツイートした時点では気づかなかったが、原因は台風が近づいていたので気圧が1000hPaを下回り、 3桁になってので気圧とその後ろの湿度が一文字ずつずれていたから。

これもスクリプトをちゃちゃっと書いて修正

# coding: UTF-8

import sys
 
f = open('test2.txt','r')
fw = open('test3.txt','w')
lines2 = f.readlines()
f.close()
cnt = 0
for line in lines2:
    

    if (cnt % 10 == 0):
        tmp = line.split(",")
        #0,2017-08-02 00:22:08 ,00,XXXX,46,29,64,10,08,78,49,88,00,+3.15603450E+00
        #0|           1        |2 |   3| 4| 5| 6| 7| 8| 9|10|11|12|     13        |

        log_cnt = tmp[0];
        log_date = tmp[1];
        log_temp = int(tmp[5])+int(tmp[4])/100
        if (int(tmp[7]) < 20):
            log_press = int(tmp[7]) * 100 + int(tmp[8]) + int(tmp[9])/100
            log_hum = (int(tmp[10]) * 1000 + int(tmp[11])*10) / 1024
        else:
            #490011,2017-08-07 16:30:52 ,00,XXXX,46,36,39,99,95,15,58,45,00,+2.92671440E+00
            #  0   |           1        |2 |   3| 4| 5| 6| 7| 8| 9|10|11|12|     13        |
            log_press = int(tmp[7][0]) * 100 + int(tmp[7][1] + tmp[8][0]) + int(tmp[8][1] + tmp[9][0])/100
            log_hum = (int(tmp[9][1] + tmp[10][0] ) * 1000 + float(tmp[10][1] + tmp[11][0] + tmp[11][1])) / 1024
        fw.write(log_cnt + "," + log_date + "," + str(log_temp) + "," + str(log_press) + "," +  str(log_hum) + "\n" )
    cnt = cnt + 1

fw.close()

気圧(千・百の位) が20より大きければ一桁ずらして計算している。
その結果、正常っぽい値になった。

f:id:ginnyu-tei:20170816005148p:plain:w600
↑でも触れているがこの時台風5号が近づいたので気圧がかなり下がっている。
温湿度はこのグラフに室外の状況やエアコンの稼働状況なんかも入れると良さそう。

電圧の推移

↓は電圧のグラフ

f:id:ginnyu-tei:20170816005913p:plain:w600
初日は電圧が一気に下がったのですぐにテストは終了するかと思ったが一旦下がった後2、3日は電圧がほぼ変わらなかった。消費による電圧降下より室温による電圧変化の方が大きいくらい。その後緩やかに下がっていったが、ここ数日は電圧が落ちるペースが早くなってきた。
このブログを書いている現時点では1212000回送信で2.48V位である。
かなり下がってきたとはいえ、1.8Vまでは余裕がある。

テスト中間結果

1送信/1秒で1212000回送信という事は1送信/1分だと60倍なので約2.3年の換算になる。
元々1年位電池交換なしで動けばいいと思っていたので予想以上である。
ただし、これは室温の高い夏のテストなので冬場はどうかわからない。

電圧グラフを見ると室温で電圧が上下しているのでかなり影響を受ける様である。
これについては冬にテストして確かめたいと思う。

次回はさらに消費電力を減らすためにTI storeで色々仕入れたのでそれについて書く予定。