この記事では、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入門 基本的な使い方 |
コメント