micro:bitには温度センサーが搭載されています。どうやって温度を測っているの?どんな物が作れる?どのようにmicro:bitでプログラムするのかについて説明します。
なにができる?
micro:bitの温度センサーは、-25℃~+75℃まで計測できます。温度センサーはmicro:bitのプロセッサ( Nordic nRF51822-QFAA-R rev 3 )に内蔵されていますので、プロセッサが動作することによる発熱の影響を受けます。したがって、実際の気温・室温と比べると多少ずれがあります。 micro:bitの温度センサー の制度は、0℃~60℃の範囲では±4℃、それ以外の温度範囲では±8℃です。また、分解能は0.25℃となっています。簡易な温度計として使用するには、機能として十分でしょう。
これらのハードウェアのスペックは、micro:bitのホームページに記載があります。 更に詳細が知りたい場合は、プロセッサのデータシートを見ると分かります。
温度センサーとは?
温度はどのように測定しているのでしょうか?電子機器で使用される温度センサーは、 熱電対 ・サーミスタ・RTD(測温抵抗体)・半導体の主に4種類あります。micro:bitで使用しているのは、半導体温度センサーです。
半導体には、P型(電子よりも正孔が多い)とN型(正孔よりも電子が多い)があり、このP型とN型を接合したものを、PN接合ダイオードと呼びます。プロセッサは、シリコン(原子記号Si)という半導体でできており、Siダイオードに順方向電流を流す(P型からN型の方向に電流を流す)と、ダイオード両端に電位差(一般的にVfという記号で表す) が生まれます 。この電位差は、約-2mV/℃の温度係数があります。つまり、温度が1℃上がると、電位差は2mV下がります。反対に、 温度が1℃下がると、電位差は2mV上がります。 したがって、ダイオードの両端の電圧を測定することで、温度を測定することができます。
どんな物が作れる?
「micro:bitでSTEM教育:光センサーを使ってみよう」と同様に、測定温度をLEDマトリクスで棒グラフとして、常時表示します。また、ボタンAが押されているときは、測定温度を数値で表示します。実演動画では、プロセッサを保冷剤で冷やしたあと、指で温めています。水滴がプロセッサ等の電子部品につくと故障するので、注意してください。
プログラミング
温度を常時表示したいので、「ずっと」のブロックを使用します。温度センサの値は「ツールボックス→入力」の「温度(℃)」で取得できます。一旦、この値を変数「reading」に取り込みます。そして、「ツールボックス→LED」の「棒グラフを表示する」ブロックを使用して、readingの値を取得します。
「棒グラフを表示する」ブロックを使用する際に、注意する点があります。温度は正 (プラス)の値だけではなく、負(マイナス)の値もありえます。micro:bitのシミュレータでは、-5℃~50℃まで設定できるのですが、-5℃を棒グラフで表示しようとすると、+5℃と同じ棒グラフになってしまいます。すなわち、マイナスの値を棒グラフで表示できません。
この問題を解決する方法として、「ツールボックス→計算」の「数値をマップする」というブロックを使用します。これは、数値が取り得る範囲を変換してくれる便利なブロックです。元の下限と上限には、シミュレータの温度下限である-5℃、上限である50℃を入力します。結果の下限は、LED棒グラフで表示できる下限の0を入力し、上限は入力と同じ50とします。50ではなく、もっと大きい数でもいいですが、「数値をマップする」を使用するときとしないときで比較しやすいように、今回は50としました。
ここまでで、搭載したい機能の1つを実装することができました。思い通りの動作になっているかどうか、シミュレータで確かめてみてください。
もう1つの機能を実装してみましょう。「ツールボックス→論理」の「もし~なら」ブロックと、「ツールボックス→入力」の「ボタンAが押されている」を使用して、ボタンAが押されているときの動作を記述します。このブロックの中に、「ツールボックス→基本」の「数を表示」ブロックを使用して、変数readingを表示します。
以上で、今回のプログラムは完成です。シミュレータで動作確認をして、思い通りに動いたら、micro:bitにプログラムをダウンロードして実際に動かしてみましょう。
ここまでのプログラムの手順やシミュレータの動きについて、下記の動画キャプチャを準備しましたので、説明がわかりにくかった場合は御覧ください。
まとめ
プロセッサ内臓の半導体温度センサは、追加部品なく利用できるので便利ですね。ただし、精度は良くないので、もし精度が必要な場合は別のセンサを入力端子に接続する必要があります。また、今回のプログラムでは、マイナスの値を取り得る場合でも、その数値の範囲を変換することで、棒グラフで表示する方法を学ぶことができたと思います。
コメントを残す