【Arduino】加速度センサ(KXM52)で傾斜角度測定

この記事では、Arduinoマイコンと加速度センサ(KXM52)を用いて傾斜角度を測定する方法をソースコード付きで解説します。

加速度センサ(KXM52)

今回はArduinoと加速度センサ(KXM52)を用いて傾斜角度を測定しました。

回路構成(配線図)

Arduinoと電子部品の構成・配線は下記の通りです。

部品名 個数
1 Arduino UNO (1個)
2 3軸加速度センサKXM52-1050 (1個)
3 ジャンプワイヤー(数本)

処理手順

実装するプログラムの処理の流れです。

説明
シリアルポートを9600 bps[ビット/秒]で初期化する
加速度センサの各軸からデータ取得する
読み取ったデータを-1から1までの範囲にスケーリングする
各値を-1から1までの範囲に制限する
逆サインの値を計算し、単位を[rad]を[deg]に変換する
計算した傾斜角をシリアルモニターに表示する
2~6の処理を繰り返す

ソースコード

サンプルプログラムのソースコードです。

void setup(){
  // シリアルポートを9600 bps[ビット/秒]で初期化
  Serial.begin(9600) ;
}

float mapFloat(float x, float iMin, float iMax, float oMin, float oMax) {
  return (x - iMin) * (oMax - oMin) / (iMax - iMin) + oMin;
}

void loop(){
  int i ;
  long x , y , z ;
  // 加速度センサの各軸からデータ取得
  x = analogRead(0);
  y = analogRead(1);
  z = analogRead(2);

  // 読み取ったデータを-1から1までの範囲にスケーリング
  float xSinTheta = mapFloat(x, 340, 777, -1, 1);
  float ySinTheta = mapFloat(y, 306, 716, -1, 1);

  // 各値を-1から1までの範囲に制限
  xSinTheta = constrain(xSinTheta,-1,1);
  ySinTheta = constrain(ySinTheta,-1,1);

  // 逆サインの値[rad]を[deg]に変換
  int xdeg = float(asin(xSinTheta) * 180 / PI );
  int ydeg = float(asin(ySinTheta) * 180 / PI );

  // 計算した傾斜角をシリアルモニターに表示
  Serial.print("(X, Y) = (");
  Serial.println(String(xdeg) + ", " + String(ydeg) + ")");
  delay(500) ;
}

実行結果


加速度センサをテーブルの上に水平においた時の各軸の値です。

関連記事
Arduino入門 基本的な使い方
Arduino
技術雑記

コメント

タイトルとURLをコピーしました