micro:bitにつないだアナログセンサをブロックエディタから使う

この記事は micro:bit Advent Calendar 2018 の 9日目の記事です。

まえがき

以前、CQ出版インターフェース誌のオフ会で話した内容から抜粋して紹介します。

micro:bitに次の3種類のセンサをつないで、MakeCodeブロックエディタに 標準で用意されているブロックだけを使って、センサ値を読み取ります。 もちろん専用のブロックが用意されていればその方が便利なのですが、 標準ブロックでも何とかなる(場合もある)ことを示します。

  • アナログ出力温度センサ:LM61
  • SPI接続温度センサ:ADT7310
  • I2C接続温度センサ:ADT7410

f:id:yamamoto-works:20181216031747p:plain


対象

今回は、アナログ出力温度センサLM61を取り上げます。

接続

ここでは、LM61の電源とGNDをそれぞれmicro:bitの3V端子、GND端子に接続し、 LM61の出力をmicro:bitのP2端子に接続しています。

プログラム

作成したプログラムは次のとおりです。

f:id:yamamoto-works:20181216024154p:plain

プログラムの解説

このプログラムでは、P2端子からアナログ値を読み取った後、その値を3倍しています。これにより、読み取ったアナログ値を電圧(単位はmV)に変換しています。

3倍の理由は次のとおりです。 接続に書いたように、LM61の電源電圧は3Vです。 一方、micro:bitのアナログ入力は10ビットの分解能なので、 3V÷1024(2の10乗)は約3mVです。 つまり今回の場合は、 アナログ入力が0のときは0mV、1のときは約3mV、 2のときは約6mVのように、アナログ入力値を3倍すると 電圧になります。

次にプログラムでは、「数値をマップする」ブロックを使って、 電圧を温度に変換しています。 LM61のデータシートより、0℃のときは出力電圧が600mV、 100℃のときは1600mVなので、比例計算しています。

このように、アナログ入力値→電圧→温度の順に変換しています。

動作確認

プログラムを実際に動かして、別に用意した温度計と比較してみると、 だいたい同じような値になり、うまくいっているようです。