Arduino/Genuino 101
※Genuino101を3Dモデリング化してみました!
1. ジャイロセンサーとは?
※角速度とは、ある物体の角度が単位時間当たりどれだけ変化しているか、つまり物体が回転している速度を表します。
1.1 MEMS
MEMS(Micro Electro Mechanical Systems)を使ったジャイロセンサーの場合、質量が小さいためジャイロセンサーとしての感度は低下しますが、代わりに劇的な小型化が可能になります。
1.2 Genuino101ボードのIMU
Genuino101ボードに使われているIntel Curie Moduleには図1のBosch製BMI160と言う3軸加速度センサーと、3軸ジャイロセンサーを併せ持つIMU(慣性測定ユニット)が搭載されています。
1.3 CurieIMU.h
2. プログラム
2.1 サンプルプログラム読み込み
2.2 サンプルプログラムの内容
ジャイロセンサーの各軸は、setGyroRange関数によって定義された範囲内の角速度を測定し、生データを返します。
測定された生データは、角速度(X、Y、Z)の3つの値としてシリアルモニタに出力されます。
#include "CurieIMU.h" void setup() { Serial.begin(9600); // シリアル通信を初期化する while (!Serial); // シリアルポートが開くのを待つ Serial.println("Initializing IMU device..."); CurieIMU.begin();// デバイスを初期化する CurieIMU.setGyroRange(250); // 角速度測定範囲を250度/秒に設定する CurieIMU.autoCalibrateGyroOffset(); //ジャイロセンサーを自動校正する } void loop() { float gx, gy, gz; //スケーリングされたジャイロ値 // デバイスからジャイロ測定値を読み込み、設定された範囲にスケーリングします。 CurieIMU.readGyroScaled(gx, gy, gz); // タブで区切られたジャイロのx / y / z値を表示する Serial.print("g:\t"); Serial.print(gx); Serial.print("\t"); Serial.print(gy); Serial.print("\t"); Serial.print(gz); Serial.println(); }
図2:プログラム例
3. 実験!
3.1 置く!
図2サンプルプログラムを実行した結果が図3です。
ジャイロセンサーの自動校正関数「CurieIMU.autoCalibrateGyroOffset()」を入れましたので、最初はGenuino101を静置した状態で測定を開始しています。
図3:シリアルモニタ出力結果
3.2 加速度センサーに関する関数
IMUで使う関数は図2で使った「CurieIMU.begin()」や「CurieIMU.setGyroRange(250)」や「CurieIMU.readGyroScaled(ax, ay, az)」も含め表1の通り沢山用意されております!
表1:CurieIMU.hライブラリ(ジャイロセンサー関連)
関数 | 説明 | 内容 |
CurieIMU.begin() | ArduinoとGenuino 101 IMUを初期化します。他のCurieIMUライブラリ関数の前にbegin()を呼び出す必要があります。 | なし |
CurieIMU.getGyroRate() | ジャイロスコープが読み取られる頻度であるジャイロデータレートを返します。 | ジャイロデータレートはHzで表します。 |
CurieIMU.setGyroRate(int rate) | ジャイロスコープの出力データレートを定義します。データレートはサンプリング周波数でもあり、読み取り値の帯域幅に影響します。 | rate:設定されるレート。指定出来る値{25、50、100、200、400、800、1600、3200(Hz)} |
CurieIMU.getGyroRange() | ジャイロの角度測定範囲を返します。 | ジャイロの角度範囲。 |
CurieIMU.setGyroRange(int rate) | ジャイロの角度測定範囲を設定します。 | rate:設定される範囲。指定出来る値は{±2000、±1000、±500、±250、±125(°/s)} |
CurieIMU.autoCalibrateGyroOffset() | ジャイロのオフセットの自動較正を開始します。この手順の間、ボードは動かなくなります。 | なし |
CurieIMU.noGyroOffset() | ジャイロオフセットを無効にします。 | なし |
CurieIMU.gyroOffsetEnabled() | ジャイロオフセットの有効状態を返します。 | 機能が有効または無効の場合はtrueまたはfalse |
CurieIMU.getGyroOffset(int axis) | ジャイロのオフセットの値を返します。 | axis:ターゲット軸。次の値のいずれかを指定できます(X_AXIS、Y_AXIS、Z_AXIS)選択した軸のオフセット値から返される値は、±31.25°/s (step 0.061°/s)です。 |
CurieIMU.setGyroOffset(int axis、int offset) | ジャイロオフセットの値を設定します。 | axis:ターゲット軸。次の値のいずれかを指定できます(X_AXIS、Y_AXIS、Z_AXIS)offset:設定されるオフセットの値。有効な値は、±31.25°/s (step 0.061°/s)です。 |
CurieIMU.readGyro(int gx、int gy、int gz) | ジャイロの生の値を読み取ります。 | gx、gy、gz : x、y、zに沿ったジャイロの値が格納される変数。 |
3. まとめ
Genuino101は、シンプルなArduinoUNOに比べると機能がてんこ盛りです!
嬉しいやら悲しいやら一通りの機能を試してみるのに結局一ヶ月近く掛かりました
励みになりますのでよければクリック下さい(^o^)/