加速度センサから角度を計算する

この記事では、Arduinoで加速度センサを使って角度を計算する方法を解説する。とくにここでは、重力加速度から角度を計算する方法となる。なお、話を簡単にするためにも重力方向のz軸と前後方向のx軸の2軸に絞って考えていく。

加速度センサから角度を計算する方法

センサーにおけるx軸方向の加速度を\(a_x\)、z軸方向の加速度を\(a_z\)とする。

倒立振子のようなモデルで角度を考えてみる。

加速度センサと倒立振子モデル
加速度センサと倒立振子モデル

倒立振子がθだけ傾いた時を考えてみよう。ただし、この角度で静止しているものとする。

倒立振子がθだけ傾いている
倒立振子がθだけ傾いている

物体は静止しているので、重力\(a\)のみの加速度がかかっている。つまりセンサの加速度\(a_x\)と\(a_z\)のベクトルの合成値が重力加速度\(a\)になるはずである。

センサのx軸とz軸の加速度
センサのx軸とz軸の加速度

これを分かりやすいように書き直すと次の図のようになる。

加速度センサのベクトル合成
加速度センサのベクトル合成

つまりθは加速度\(a_x\)と\(a_z\)を使って次の式で表すことができる。

$$tanθ=\frac{a_x}{a_z}$$

角度θを計算したいので逆三角関数のアークタンジェントを使って次のように表すことができる。

$$θ=tan^{-1}\frac{a_x}{a_z}$$

幸いArduino言語(C++)では、atan2関数を使ってアークタンジェントの計算を簡単に行うことができる。

theta= atan2(ax, az)

Arduinoで実践

実際にArduinoを使って加速度センサから角度を計算させるプログラムがこちら。加速度センサはMMA8452Qを使用。使い方の詳細はこちらの記事を参考に。

#include <Arduino.h>
#include <Wire.h>
#include "SparkFun_MMA8452Q.h"

MMA8452Q accel;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  if (accel.begin() == false) {
    Serial.println("Not Connected. Please check connections and read the hookup guide.");
    while (1);
  }
}

void loop() {
  if (accel.available()) {
    float ax = accel.getCalculatedX();
    float az = accel.getCalculatedZ();
    float angle = atan2(ax, az) * 180.0 / PI;

    Serial.print(angle, 3);
    Serial.println();
  }
}

次の記事では、ProcessingでArduinoとシリアル通信をし、角度に合わせて図形を回転させてみたのでよかったら参考に。

今回使用した製品はこちら

Rasbee CJMCU-MMA8452Q モジュール 14ビット 三軸デジタル加速度計 傾斜センサ IIC通信 MMA8452Q
Rasbee CJMCU-MMA8452Q モジュール 14ビット 三軸デジタル加速度計 傾斜センサ IIC通信 MMA8452Q

Amazon
Arduino Uno Rev3 ATmega328 マイコンボード A000066
Arduino Uno Rev3 ATmega328 マイコンボード A000066

Uno Rev.3、8 bit、AVR、ATmega328、USB-シリアルコンバータとしてプログラムされたATmega 16U2搭載

AmazonRakuten

こんな商品も人気です!

1.54インチ 電子ペーパーモジュール 200x200ラズベリーパイ エンベデッドコントローラ付き E-Inkディスプレイ画面
1.54インチ 電子ペーパーモジュール 200x200ラズベリーパイ エンベデッドコントローラ付き E-Inkディスプレイ画面

バックライトがなく、電源を切っても最後のコンテンツが長時間表示される。 超低消費電力、基本的に電力はリフレッシュにのみ必要です。 SPIインターフェイス、Raspberry Pi / Arduino / Nucleoなどのコントローラーボードとの接続用。

AmazonRakuten
M5Stack 開発ボード M5Stack Core2 開発キットデュアルコア32ビット240Mhz LX6プロセッサーUIFlow, MicroPython, A r d u i n o用
M5Stack 開発ボード M5Stack Core2 開発キットデュアルコア32ビット240Mhz LX6プロセッサーUIFlow, MicroPython, A r d u i n o用

Amazon
ELEGOO Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換
ELEGOO Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換

NanoはArduinoと互換性があり、ATmega328PやCH340と同じの公式バージョンで使用しています。 これは、最小で、完全で、ブレッドボードに優しいボードです。より多くのアナログ入力ピンとオンボード+ 5V AREFジャンパを備えた(電気的に)すべてが備わっています。

Amazon
ELEGOO Arduino用の 2.8 Inches TFT ターチスクリーン カードソケット付
ELEGOO Arduino用の 2.8 Inches TFT ターチスクリーン カードソケット付

無料チュートリアル(CDに収録)、より良い価格、より良いサービス。 (技術データ付き) 2.8インチ多彩なディスプレイ液晶画面 タッチペンも付き

AmazonRakuten

Arduinoの参考書

ESP32&Arduino 電子工作 プログラミング入門
ESP32&Arduino 電子工作 プログラミング入門

電子工作ファンに人気のマイコンArduino、そしてWiFiとBluetooth内蔵でネットワーク接続しやすいESP32。それらのマイコンでプログラムを組む際に使うのが「Arduino言語」です。「電子工作は好きだけどプログラミングはよくわからない」あるいは「プログラミングの経験がある。それを活かして電子工作を楽しみたい」--そんなみなさまのための電子工作プログラミング入門が本書です。

KindleAmazonRakuten
電子部品ごとの制御を学べる! Arduino 電子工作実践講座 改訂第2版
電子部品ごとの制御を学べる! Arduino 電子工作実践講座 改訂第2版

電子パーツを自由自在に組み合わせて電子工作ができるように、Arduinoによる電子部品ごとの制御方法を詳しく解説。初心者や電子工作に躓いた人でも安心して取り組めるよう、豊富な図・写真で徹底解説。2018年発刊の「Arduino 電子工作 実践講座」の改訂版です。

KindleAmazonRakuten
Arduinoをはじめよう 第3版 (Make:PROJECTS)
Arduinoをはじめよう 第3版 (Make:PROJECTS)

本書では、開発者自らが、Arduinoの哲学、ハードウェア、ソフトウェアの基礎を解説、誰にでもできる簡単なチュートリアルを行います。

AmazonRakuten

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

\Amazonギフトがお得/

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

\この記事をシェアする/