micro:bit搭載の加速度センサーを使ってみました。

加速度センサーチップFreescale MMA8653FCがボード上に搭載されてます。

  • 測定軸:XYZ-3軸
  • 測定範囲:±2.0G
  • 測定解像度:10bit(0~1023)/ G

上記測定解像度は1Gあたりの値なので測定範囲の±2.0Gの場合は
測定値は理論的には-2048~2048となりますが実際の値は

  • X軸:-2032~2048
  • Y軸:-2032~2048
  • Z軸:-2048~2032

となりました。

加速度センサー

micro:bitのハードウェア・ドキュメンテーションページ に記述されてます

下の画像は上記サイトのものです、加速度センサーは図中の赤枠部分のチップです。

センサー出力値を実際に読んでみる(JavaScript)

micro:bit上のセンサー出力値をそのままシリアル経由でPC上のターミナルソフト(TeraTerm)で表示させるサンプルプログラムが「サヌキテックネット」というサイトに掲載されていましたので試してみました。→記事はこちら(付録1-3シリアル通信【Windows編】)

おおよそ以下の手順になります。

本記事はmicro:bitでPythonと敢えてタイトリングしているのですが、JavaScriptの方にmicro:bitと通信するライブラリーが揃っているのでここでは安易にJavaScriptを使う子おtにしました。

①microbitサイドのプログラムは同記事の通りJavScriptで組む。

 

②USB-Serialドライバーをインストール

mBed用のUSB-Serialドライバーです。

何故、micro:bit用のドライバーでなくてmBed用のを使うのかというと、micro:bitのアーキテクチュアがmBedベースで構成されているためUSBインタフェースもmBed用のドライバーを使うことになります。

③TeraTerm

フリーソフトのTeraTermを使いシリアル通信を行います。

TeraTermを上記サイトからダウンロードしインストールします。

起動後にシリアルポート設定を以下の様にします。

赤枠内の項目は特に注意する項目です、PCによってはデフォルト値を変更して設定する必要があります。逆に言えば他の項目(データから下の項目)はデフォルト値でOKということになります。

 

ポート番号はUSB-Serialドライバーインストール後デバイスマネージャーで確認します。

通信速度は115200bpsを選択する。

プログラム(JavaScript)をmicro:bitにダウンロード(実際にはファイルコピー)すると加速度値は自動でPCに送信されます。

以下はmicro:bitを適当に振った時のTeraTerm上の加速度値です。

ジェスチャー検出

この様に加速度センサー出力値を直接読み取ること以外にボードの動きを知らせるジェスチャー機能というのがあります。

公式サイトのMicroPythonのページにジェスチャーについての記述があります。

ジェスチャー値は文字列で出力され、具体的には ”up”、”down”、”left”、”right”、”face up”、”face down”、”freefall”、”3g”、”6g”、”8g”、”shake”があります。

以下に一つの例としてのサンプルプログラムを記述しました。

動作的にはmicro:bitボードの向きに対応した矢印イメージをLED上に表示するという簡単なものです。

 

from microbit import *
while True:
    g = accelerometer.current_gesture()
    if g == "right":
        display.show(Image.ARROW_E)
    elif g == "left":
        display.show(Image.ARROW_W)
    elif g == "up":
        display.show(Image.ARROW_S)
    elif g == "down":
        display.show(Image.ARROW_N)
    else:
        display.show(Image.HAPPY)

 

このプログラムを起動するとmicro:bitの向きに従い、絶えず下方向(地球の重心方向)にLEDの矢印イメージが表示されるようになります。

言葉では少々判り難いので画像を以下に載せました。(4方向)