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