Nano 33 BLE Senseを使い、物体の衝突をエミュレートするために力の方向を測定する方法を学びます。
AUTHOR: Nefeli Alushi、LAST REVISION: 2023/02/20 18:07
このチュートリアルは、物体の衝突をエミュレートするためにボードにかかる力の方法を測定するために、Arduino Nano 33 BLE SenseのLSM9DS1モジュールの3軸ジャイロスコープセンサーに着目します。これは、ジャイロスコープの軸の値を活用し、Arduino IDEのシリアルモニターに戻り値を表示することで、実現します。
目的
このプロジェクトの目的は以下の通りです。
- LSM9DS1モジュールとは何なのかを理解します。
- LSM9DS1ライブラリを使用します。
- ジャイロスコープセンサーから値を読み取ります。
- 生データを力の方向に変換します。
- シリアルモニターにライブデータを表示します。
必要なハードウェアとソフトウェア
- このプロジェクトでは、外部のセンサーや機器を利用しません。
- このチュートリアルでは、ボードのプログラムを記述するのに、Arduino Creative Webエディタを利用します。
LSM9DS1慣性モジュール
IMUは、慣性計測ユニット(Inertial Measurement Unit)を意味します。IMUは、物体のSpecific Forceや角速度、物体の向きを、加速度計やジャイロスコープ、しばしば磁力計の組み合わせを利用して測定・報告する電子デバイスです。このチュートリアルでは、Arduino Nano 33 BLE Senseボードに搭載されているLSM9DS1 IMUモジュールについてもう少し学びます。
LSM9DS1は、3D線形加速度センサーや3Dデジタル角速度センサー、3Dデジタル磁気センサーを搭載したシステムインパッケージです。
ライブラリ
Arduino LSM9DS1ライブラリを使えば、複雑なプログラミングを行わずに、Arduino Nano 33 BLE SenseのIMUモジュールを利用することができます。このライブラリは、センサーを初期化し、以下のように値を設定します。
- 加速度センサーのレンジ: [-4, +4]g -/+0.122 mg
- ジャイロスコープのレンジ: [-2000, +2000] dps +/-70 mdps
- 磁気センサーのレンジ: [-400, +400] uT +/-0.014 uT
- 加速度センサーの出力データレート: 104Hz固定
- ジャイロスコープの出力データレート: 104Hz固定
- 磁気センサーの出力データレート: 20Hz固定
LSM9DS1の詳細を知りたい場合は、ここを参照してください。
ジャイロスコープ
ジャイロスコープセンサーは、物体の向きと角速度を測定・維持できるデバイスです。ジャイロスコープは加速度センサーよりも高度です。というのも、ジャイロスコープは物体の傾きや面方向(lateral orientation)を測定できますが、加速度センサーは直線的な動きしか測定できないからです。
ジャイロスコープセンサーは「角速度センサー」とも呼ばれます。度/秒で測定される角速度は、単位時間あたりの物体の回転角の変化です。
この例では、ジャイロスコープでボードにかかる力の方向を示すのに利用します。これは、ボードを前後左右の4方向に一瞬振ることで実現します。結果をシリアルモニターに表示します。
プログラム作成
- 設定
Arduino Webエディタを開き、Librariesタブをクリックし、LSM9DS1ライブラリを探します。その後、> Examplesで、SimpleGyroscopeスケッチを開きます。開いた後は、Gyroscopeという名前に変更します。
- ボードを接続する
次に、Arduino Nano 33 BLE SenseをPCに接続し、Webエディタが認識することを確認します。すると、ポートとボードが以下の図で示すように現れます。現れない場合は、指示に従いエディタがボードを認識するためのプラグインをインストールしてください。
- ボードにかかる力の向きを表示する
次に、異なる角度にボードを動かしたときに、ボードにかかる力の向きを表示するために、スケッチ例を修正する必要があります。
x、y、z軸をfloat
データ型として、閾値となる変数int plusThreshold = 30;
とint minusThreshold = -30;
をsetup()
の前で初期化します。
setup()
では、軸の生の値を表示しないので、最後の行を削除します。
|
|
次に、最初に初期化したので、loop()
では、以下を削除します。
|
|
また、以下の行も不要なので削除します。
|
|
代わりに、センサーが利用可能かを確認し、その後3軸を読む既存の文の後に、
4つのif
文を追加します。
以下が追加するコードです。
|
|
if
文は、最初に定義したplusThresholdとminusThresholdのxとy、zwの値を比較します。これらの値に従い、ボードを動かした力の方向を表示します。
- 完全なコード
コード作成セクションをスキップした場合のために、完全なコードを以下に示します。
|
|
テスト
ボードのデータを正しく読むために、スケッチをボードにアップロードする前に、USBポートの横にあるボードを手で持ちます。ボードは上向きにし、あなたから離れる方向を指すようにします。以下の図に、ボードの方向と動きを示します。
次に、スケッチを検証、ボードにアップロードし、左側のメニューからモニターを開きます。
ボードを地面と平行にし、一つの方向: 前、後、右、左に動かします。動かした方向に従い、モニターに毎秒結果が表示されます。
これらの値を返却するスケッチのスクリーンショットを示します。
トラブルシュート
エラーが起きることもあります。コードが動作しないときはいくつかの共通の問題があり、解決できます。
- 括弧やセミコロンが抜けている。
- Arduinoボードが、間違ったポートに接続されている。
- ケーブル接続の予期しない切断。
おわりに
この簡単なチュートリアルで、IMUセンサーモジュールとは何か、LSM9DS1ライブラリの使い方、ジャイロスコープセンサーからの値を測定し表示するためのArduino Nano 33 BLE Senseの使い方を学びました。さらに、ボードにかかる力の方向を検出するアプリケーションを作成しました。
オリジナルのページ
https://docs.arduino.cc/tutorials/nano-33-ble-sense/imu-gyroscope
最終更新日
March 6, 2023