角速度(ジャイロ)センサ値を正しい角速度に変換する①



Arduino UNO

Arduinoを使ってみる

最終更新日:2014/12/30

角速度を計算する方法を説明します。以下手順で計算します。

①センサ特性
先ずはセンサ特性を把握する必要があります。センサの特性は以下のとおり。
 ・電源電圧  : 2.7~5.25V
 ・検出範囲  : ±300deg/sec
 ・静止時   : 1.35V
 ・感度    : 0.67mV/deg/sec
 ・リニアリティ: ±5%
 ・応答性   : 50Hz
 ・使用温度範囲: -5~75℃

②送信情報の整数値を電圧に変換
パソコンに送信している情報は10bitの分解能になっています(Arduinoのスペックによる)。 つまり5Vを2^10 = 1024(0~1023)の刻みで分割していることになります。例えばこの入力値が1023ならば5V、0ならば0Vを意味します。

以上を踏まえ電圧値を求める一般式は以下となります。

 電圧値(V) = 入力値 / (1024-1) x 5V ・・①

今回、センサ静止時の入力値は"288"となっていますが、電圧値に変換すると1.41Vになり、センサ特性に示されている1.35Vと異なっております。 これは部品のばらつきであると考えます。

③電圧値を角速度に変換
電圧値から角速度を求めるためには、センサ特性である0.67mV/deg/secを用います。
この特性は、1秒間あたり1deg回転したら0.67mv出力するという意味合いのものです。例えば1秒あたり2deg回転したら出力は1.34mVとなります。

では静止時に出力が1.408Vだったのが、回転させることで1.5Vを示したら角速度は、(1.5 - 1.408)/0.00067 = 138deg/secとなります。

以上を踏まえ角速度を求める一般式は以下となります。

 角速度(deg/sec) = (電圧値(V) - 静止時の電圧値(V)) / 0.00067 ・・②

①を②に代入すると以下になります。

 角速度(deg/sec) = (入力値 - 静止時の入力値) /1023 x 5 / 0.00067

④スケッチ内容
以上を踏まえたスケッチの内容は以下になります。
==================================================
unsigned long time, time_old, time3, time4;
float               deg_g1, deg_g2, g1, g2;

void setup()
{
Serial.begin(9600) ; // シリアルモニターの初期化
}
void loop()
{
// delay時間算出
    time       = millis();
    time3     = time - time_old - time4; // 前回の遅れ時間
    time_old = time;                            // 次回計算用として、今回までの演算時間を格納
    time4     = 100 - time3;                  // 今回のdelay時間を決定

// 角速度算出
    g1        = analogRead(1);
    g2        = analogRead(2);
    deg_g1 = (g1 - 288) / 1023 * 5 / 0.00067; // G1角速度
    deg_g2 = (g2 - 289) / 1023 * 5 / 0.00067; // G2角速度

// PCに送信
    Serial.print(time);
    Serial.print(" ");
    Serial.print(deg_g1) ; // G1
    Serial.print(" ") ;
    Serial.println(deg_g2) ; // G2

delay(time4) ;
}
==================================================

⑤作動確認結果
縦軸は角速度(deg/sec)となります。それらしい波形が得ることが出来ましたが、まだ以下が気になります。
 (1) 静止時においても値が細かく変動する
 (2) 一方向にしか動かしていなくても、逆方向に動いたような値を示す。
これらの問題を解決しなければ、正しく傾斜角を求めることが出来ないので、何とかしたいと思います。



②へ続く









サブチャンネルあります。⇒ 何かのお役に立てればと

関連記事一覧



Arduino UNO

Arduinoを使ってみる