読者です 読者をやめる 読者になる 読者になる

がりらぼ

WindowsRuntimeの応援ブログ

ジャイロメーターを利用するには

ジャイロメーター

ジャイロメーターとは、デバイスの角速度を取得するセンサーです。

基本的な概念や座標軸は加速度センサーと変わりませんが、ジャイロセンサーは角速度を測るものなので

デバイスを回転させた瞬間は値は大きくなりますが、しばらくすると値は0.0に収束します。

6

 

 

上の座標軸で考えると、デバイスを回転させた瞬間に回転した座標軸の値が大きくなり、回転していない座標軸は0.0のままです。

その後、徐々にすべての座標軸の値が0.0になります。

 

Gyrometer

ジャイロメーターを使用するには、Gyrometerクラスを利用します。

 

まず、このようなXAMLUIをつくります。

<Grid>
    <StackPanel>
        <TextBlock x:Name="text_x" FontSize="24" />
        <TextBlock x:Name="text_y" FontSize="24" />
        <TextBlock x:Name="text_z" FontSize="24" />
    </StackPanel>
</Grid>

 

コンストラクタでGyrometerクラスを初期化し、ReportIntervalプロパティでジャイロメーターから値を取得する間隔を設定します。

MinimumIntervalプロパティではデバイスのジャイロセンサー取得間隔の最小値を取得することができます。

 

ReadingChangedイベントでジャイロメーターから値を取得できますが、これは別スレッドで呼ばれるのでDispatcher.RunAsyncでUIスレッドから呼ぶ必要があります。

Gyrometer gyrometer = Gyrometer.GetDefault();

gyrometer.ReportInterval = gyrometer.MinimumReportInterval * 50;

gyrometer.ReadingChanged += async(s, ee) =>
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        text_x.Text = string.Format("X={0}", ee.Reading.AngularVelocityX.ToString("F1"));
        text_y.Text = string.Format("Y={0}", ee.Reading.AngularVelocityY.ToString("F1"));
        text_z.Text = string.Format("Z={0}", ee.Reading.AngularVelocityZ.ToString("F1"));
    });
    Debug.WriteLine("X={0} Y={1} Z={2}", ee.Reading.AngularVelocityX.ToString("F1"), ee.Reading.AngularVelocityY.ToString("F1"), ee.Reading.AngularVelocityZ.ToString("F1"));
};

7

ジャイロメーターを利用するには | garicchi.com