マイクロビットでの温度計測その2

 今回はTFab Worksの防水温度センサーおよびLEDテープを扱います。まず、初めに防水温度センサーを使ってみます。前回の温度/湿度/気圧センサーと同じように使うことができます。

・micro:bit用防水温度センサー TFW-TP2
https://tfabworks.com/product/tfw-tp2/

 上記のページによると計測範囲は−10℃〜+85℃(誤差±0.5℃)となっています。お湯が沸騰したかどうか、天ぷら油の計測には使えませんが、水槽の水温や土壌の温度、体温計測などには十分です。

センサーモジュールを読み込む

 防水温度センサーを使うためには前回と同様に拡張機能を読み込む必要があります。 「拡張機能」の項目が表示されていない場合は「高度なブロック」の項目をクリックします。

「拡張機能」の項目をクリックします。

拡張機能一覧が表示されます。

検索ボックスに「https://github.com/tfabworks/pxt-stem」のURLを入力し検索ボタン(虫眼鏡)をクリックします。

「stem」の項目が表示されるのでクリックします。

するとTfab WorksのSTEM製品の拡張機能が読み込まれます。

STEMモジュールで使えるブロックは以下のようになっています。

他のモジュールの機能もありますが、今回使用するのはTP2と書かれたカテゴリのブロックになります。ブロックは温度を計測して返すものが1つあるだけです。

温度を表示する

 それでは最初にマイクロビットのLEDに温度を表示してみましょう。単純にマイクロビットのLEDに数値として温度を表示しますので、基本のカテゴリから「数を表示(0)」ブロックを「ずっと」のブロック内に入れます。

次に追加したカテゴリのSTEMの中から「温度」を「数を表示(0)」ブロックの中に入れます。

 これでできあがりです。JavaScriptコードの場合は以下のようになります。

basic.forever(function () {
    basic.showNumber(stem.TP2_getTemperature())
})

 プログラムをダウンロードしマイクロビットに転送して動作を確認します。計測された気温がLEDに表示されます。

なお、計測した温度を小数値にしたい場合は以下のようにします。まず、「温度」ブロックの(+)ボタンをクリックします。

「整数」「小数」の項目が表示されるので「小数」を選択します。

これで計測した温度の値が小数値になります。JavaScriptコードの場合は以下のようになります。

basic.forever(function () {
    basic.showNumber(stem.TP2_getTemperature(OutputNumberFormat.FLOAT))
})

 なお、この防水温度センサーの値をリアルタイムにブラウザに表示することもでき、製品ページに解説があります。興味ある方は挑戦してみるとよいでしょう。

防水温度センサー 解説ページ
https://tfabworks.com/product/tfw-tp2/

LEDテープを使う

 次にLEDテープを使ってLEDを制御してみます。このLEDテープはフルカラーのLEDが6個あります。 このテープLEDはNeoPixelを利用しています。このため、NeoPixelを扱うための拡張機能を読み込む必要があります。

・micro:bit用フルカラーLEDテープ TFW-LT1
https://tfabworks.com/product/tfw-lt1/

 LEDテープには3本のワニ口クリップがついています。黒色をGND、赤色を3V(VCC/電源)、緑色をP0、P1、P2のいずれかに接続します。今回はP2に緑色のワニ口クリップをつなぎます。

 つないだら機能拡張を読み込ませます。

「拡張機能」の項目をクリックします。

検索ボックスにneopixelの文字を入力し検索ボタン(虫眼鏡)をクリックします。

「neopixel」の項目が表示されるのでクリックします。

するとNeoPixelの拡張機能が読み込まれます。

NeoPixelモジュールで使えるブロックは以下のようになっています。

 これで準備完了です。

同じ色ですべてのLEDを光らせる

 それではLEDを光らせてみましょう。まずは簡単な6個全てのLEDを赤色で点灯させます。 NeoPixelのカテゴリをクリックします。

矢印で示すブロックをクリックします。

このブロックを「最初だけ」のブロック内にはめこみます。NeoPixelのLEDテープを制御するには最初に接続している端子と個数を設定しておきます。今回はP2端子に接続し、LEDの個数は6なのでそのように設定します。

次に「(strip)を(赤)色に点灯する」ブロックを図のように配置します。

 これでできあがりです。JavaScriptコードの場合は以下のようになります。(先頭の2行だけで動作します)

let strip = neopixel.create(DigitalPin.P2, 6, NeoPixelMode.RGB)
strip.showColor(neopixel.colors(NeoPixelColors.Red))
basic.forever(function () {

})

 プログラムをダウンロードしマイクロビットに転送して動作を確認します。LEDテープの6個のLEDがすべて赤色で点灯します。

個別に指定して光らせる

 次に特定の位置にあるLEDを指定した色で点灯させてみます。 NeoPixelのカテゴリをクリックします。カテゴリの下にある「その他」をクリックします。すると図のように表示されます。

この中から「(strip)の(0)番目のLEDを(赤)色に設定する」ブロックをクリックして配置します。LEDテープの位置はマイクロビットに近い方から0、1,2,3,4,5番目となります。最初のLEDは1でなく0番目と指定してください。  設定したら同様にNeoPixelのカテゴリから「(strip)を設定した色で点灯する」ブロックを配置します。

 これでできあがりです。JavaScriptコードの場合は以下のようになります。

let strip = neopixel.create(DigitalPin.P2, 6, NeoPixelMode.RGB)
strip.setPixelColor(1, neopixel.colors(NeoPixelColors.Blue))
strip.setPixelColor(2, neopixel.colors(NeoPixelColors.Red))
strip.show()

 プログラムをダウンロードしマイクロビットに転送して動作を確認します。LEDが指定した位置と色で点灯します。

次に設定した色を順番にまわして表示してみます。個別に設定しても構いませんが、ここでは6色を虹色に表示してくれるブロックを使います。 色を順番に変えて表示していくには「(strip)に設定されている色をLED(1)個分ずらす(ひとまわり)」ブロックを使います。なお、このブロックはマイクロビットのメモリ内にあるデータを動かすだけで実際のLEDテープにはデータを送信しません。このため、LEDテープに色を反映させるには「(strip)を設定した色で点灯する」ブロックを使う必要があります。 実際のブロック配置は以下のようになります。

JavaScriptコードの場合は以下のようになります。

let strip = neopixel.create(DigitalPin.P2, 6, NeoPixelMode.RGB)
strip.showRainbow(1, 360)
basic.forever(function () {
    strip.rotate(1)
    strip.show()
    basic.pause(200)
})

 プログラムをダウンロードしマイクロビットに転送して動作を確認します。虹色のLEDが順番に表示されていきます。

著者 古籏一浩
プログラミングをベースにして面白そうなものはとりあえずやってみるというスタンス。複雑なものよりシンプルで楽しめるものが好み。最近は30年前に移植したゲーム(mz-700版 SPACE HARRIER)の話などを書いたりしています。
著者サイト:http://www.openspc2.org/