動きを把握する(Grove Beginner Kit For Arduino検証報告)

Grove Beginner Kit For Arduino(以下、Beginner Kit)検証報告の7番目です。前回の記事はこちらです。

hirocom777.hatenadiary.org

3軸加速度計

 前回はI2C通信を使用して気圧センサから値を読み込みました。今回は、同じくI2C通信を使用している3軸加速度計について取り組んでみます。でも、加速度計って一体何なんでしょ?

f:id:HiroCom777:20201005220413j:plain
 地球上の物体には地球からの重力を受けていて、その力は物体の質量に比例します。この時の比例定数を重力加速度と呼びます。重力によって、物体が自由落下するときに落下速度は時間経過に伴い加速していきます。この加速度の事です。

加速度計は、物体(加速度計自体)に作用している加速度を検出するセンサーです。3軸というのは3次元の座標軸それぞれに加速度を検出できるということです。つまり、物体のどの方向に(重力のような)加速度が働いているかを検出できるって事です。逆に言うと、どの方向に加速度が働いているかを検出することで物体の傾き加減が解ります。
3軸加速度計も、専用のモジュールをインストール必要があります。以下でダウンロードできます。ArduinoIDEのメニュー スケッチ⇒ライブラリをインクルード⇒.ZIP形式のファイルをインストール と進んでダウンロードしたファイルを開いてください。
https://github.com/Seeed-Studio/Seeed_Arduino_LIS3DHTR/archive/master.zip

傾きを見る

以下にスケッチ例を示します。

#include "LIS3DHTR.h"
#include <Wire.h>
LIS3DHTR<TwoWire> accelemeter;
#define WIRE Wire
double x, y, z;

void setup() {
  Serial.begin(9600);
  accelemeter.begin(WIRE, 0x19);
  accelemeter.setOutputDataRate(LIS3DHTR_DATARATE_50HZ);
}
void loop() {
  x = accelemeter.getAccelerationX();
  y = accelemeter.getAccelerationY();
  z = accelemeter.getAccelerationZ();
  Serial.print("x:"); Serial.print(x); Serial.print(" ");
  Serial.print("y:"); Serial.print(y); Serial.print(" ");
  Serial.print("z:"); Serial.println(z);
  delay(1000);
}

このスケッチでは、X,Y,Z方向にそれぞれかかる加速度をシリアルモニターに表示しています。(単位はGのようです。地球上の重力を1とします。)Beginner Kitを水平なテーブルの上などに載せた場合、大体XとYは0、Zは1を示していると思います。Beginner Kitを持ち上げていろいろな方向に傾けてみるとX,Y,Zの値が変わっていきますよね!!スマホなんかで傾けた方向によって画面の向きが変わったりするのは、これと同様のセンサーが内蔵されていて機能しているからです。

動きを見る

続いて以下のスケッチをご紹介します。

#include "LIS3DHTR.h"
#include <Wire.h>
LIS3DHTR<TwoWire> accelemeter;
#define WIRE Wire
double x, y, z;

void setup() {
  Serial.begin(9600);
  accelemeter.begin(WIRE, 0x19);
  accelemeter.setOutputDataRate(LIS3DHTR_DATARATE_50HZ);
}
void loop() {
  x = accelemeter.getAccelerationX();
  y = accelemeter.getAccelerationY();
  z = accelemeter.getAccelerationZ();
  Serial.println(sqrt(x * x + y * y + z * z));
  delay(50);
}

シリアルモニターを表示すると、今度はBeginner Kitを傾けても大体1付近の値が返ってきます。本体が静止した状態にある場合、X,Y,Z方向にかかる加速度を総合すると(ベクトル方向の計算なのでXの二乗,Yの二乗,Zの二乗の和の平方根)常に1付近になります。でも、Beginner Kitを軽く揺さぶってみてください。値が変わっていくのがわかると思います。Beginner Kitに動きが生じると、本体に働く総合的な加速度も変わるからです。

シリアルモニターの代わりにシリアルプロッターで様子を見てみると‥‥‥

f:id:HiroCom777:20201005220432j:plain
おぉ、Beginner Kitを揺さぶると、その様子を見ることができました。どの方向に揺さぶっても動きを検出できています。最近のスマートウォッチなんかに歩数計の機能がついていますが、これもこのセンサーを使っている例が多いです。

あとはOLED ディスプレイ

 いかがでしたでしょうか。3軸加速度計は意外と身近なところで使われていることがわかったと思います。残りはOLED ディスプレイです。表示ができるようになると、一段と面白くなります。お楽しみに!!
hirocom777.hatenadiary.org


Arduino Grove Beginner Kit For Arduinoの連載記事はコチラからどうぞ!!