Skip to content

アクティビティ

最高最低温度ロガー

上級 | Python | LED表示, ボタン, 温度センサー, 端子 | データ処理, データ型, 入出力, 変数

ステップ1: 作る

説明

micro:bitを自己完結型のデータロガーに変身させて、測定した最高・最低温度を記録し、電池が切れたり電源を切断してもデータが保持されるようにします。

Pythonのプログラムですが、Pythonについて何も知らなくても使えます。

学ぶこと

  • Pythonを使って、電源が切断されてもmicro:bitに記録が残る不揮発性ストレージに対してデータを読み書きする方法
  • Pythonプログラムでエラーを処理する方法
  • 数値変数を文字列に変換したり、逆に戻したりする方法

必要なもの

  • micro:bit
  • オプションのバッテリーパック

使い方

  • .hexプログラムファイルをダウンロードし、micro:bitに書き込みます
  • バッテリーパックを持っているならmicro:bitにつないで、どこか温度が変わる場所に置きます。 屋外や冷蔵庫の中に置いて数分間放置することでテストできます。
  • 振ると現在の温度を表示します。
  • ボタンAを押すと記録された最低温度を表示します。
  • ボタンBを押すと記録された最高温度を表示します。
  • GNDとピン2を指で同時に押すと、最高温度と最低温度を現在の温度にリセットします。

ステップ2: プログラムする

1from microbit import *
2
3# function to read data file:
4def get_nv_data(name):
5    try:
6        with open(name) as f:
7            v = int(f.read())
8    except OSError:
9        v = temperature()
10        try:
11            with open(name, 'w') as f:
12                f.write(str(v))
13        except OSError:
14            display.scroll('Cannot create file %s' % name)
15
16    except ValueError:
17        display.scroll('invalid data in file %s' % name)
18        v = temperature()
19
20    return v
21
22# function to write data file:
23def set_nv_data(name, value):
24    try:
25        with open(name, 'w') as f:
26            f.write(str(value))
27    except OSError:
28        display.scroll('Cannot write to file %s' % name)
29
30min = get_nv_data('min.txt')
31max = get_nv_data('max.txt')
32
33while True:
34    currentTemp = temperature()
35    if currentTemp < min:
36        min = currentTemp
37        set_nv_data('min.txt', min)
38    if currentTemp > max:
39        max = currentTemp
40        set_nv_data('max.txt', max)
41    if accelerometer.was_gesture('shake'):
42        display.scroll(currentTemp)
43    if button_a.was_pressed():
44        display.scroll(get_nv_data('min.txt'))
45    if button_b.was_pressed():
46        display.scroll(get_nv_data('max.txt'))
47    if pin2.is_touched():
48        display.scroll('clearing data')
49        set_nv_data('min.txt', currentTemp)
50        set_nv_data('max.txt', currentTemp)
51

動作の仕組み

このデータロガーは、micro:bitから電源が切断された場合でも読み取り値を保存します。 これを行うには、 不揮発性ストレージ に読み取り値を保存します。 micro:bitにプログラムを書き込んでからコンピュータと切り離してもプログラムは消えませんが、同じように、電源を切っても内容を保持できるコンピュータメモリなのです。

データをmicro:bit上の、Pythonが読み取り更新できる2個のテキストファイルmin.txtmax.txt格納します。

プログラムは、温度を追跡して比較するために変数を3つ使用します。

  • currentTemp はmicro:bitに内蔵されている 温度センサー の現在の温度を表します。
  • max が最高温度です。 現在の温度が maxの現在値より大きい(>)場合、新しい値が割り当てられます
  • min は最低温度です。 現在の温度が、現在の minの値を下回ると(<)現在の温度が新しいminの値になります。

二つの関数get_nv_dataset_nv_dataは、不揮発性テキストファイルに数値データを読み書きします。 これらの関数は数字をテキストに変換したりその逆を行います。

  • int() はテキスト(文字列ともい)を数値(整数)型変数に変換し、現在の温度と比較できるようにします。
  • str()は温度の読み取り値などの数値変数をテキストファイルに格納できるテキスト文字列に変換します。

関数は tryexceptを使って、データファイルの読み書きエラーをキャッチします。 一番最初に実行するときなど、最高最低温度が保存されたテキストファイルがない場合は、変数maxminに現在の温度を設定します

プログラムのメイン部分は、 while True: ループの中で実行されます。 これは MakeCode で ずっと ブロックのように振る舞います。

ステップ3: 改善する

  • micro:bit の温度センサーはプロセッサー内蔵のものなので、(プロセッサーの発熱により)周囲の気温よりも高い温度が読み出されます。 通常の温度計を使用して差を測定し、temperature() の読み取り値から差を引き算してオフセットをプログラムに足し算します。
  • プログラムを変更して、加速度センサーにより測定される力など、さまざまな種類のデータを記録しましょう。
  • 別の場所にある別のmicro:bitにデータを送信する無線機能を追加しましょう。
Pythonでデータを保存する方法を詳しく学びましょう