micro:bitでPython[加速度センサー]
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ドライバーをインストール
何故、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方向)