今回は、iPhone,ipod,ipad に内蔵されている加速度センサーを使って、x,y,zの加速度を取得する方法について説明します。
加速度センサーとは、自由落下に対するデバイスの加速度を計測します。1の値はデバイスに1G の重力がかかっていることを示します(1G の重力は、デバイスが静止状態の時に感じる地球の重力)。加速度センサーはデバイスの加速度を X、Y、および Z の3軸方向で計測します。
今回作成するアプリは、3軸の加速度を取得し、ラベルに表示します。加えて、デバイスを左右に振る(傾ける)と、現在時刻を表示するというものです。
まず、加速度センサーを扱うには、UIAccelerometerを利用します。
XCode を起動し、View Based Application で新規プロジェクトを作成します。
今回は、「Accelerometer」という名前にしています。
Accelerometer.h を開き、以下のように設定します。
#import <UIKit/UIKit.h>
@interface AccelerometerViewController : UIViewController <UIAccelerometerDelegate> {
IBOutlet UILabel *xLabel;
IBOutlet UILabel *yLabel;
IBOutlet UILabel *zLabel;
IBOutlet UILabel *clockLabel;
double accelX, accelY, accelZ;
}
@end
まず、加速度センサーを利用するために、UIAccelerometerDelegate を定義します。これで、UIAccelerometer のイベントを認識するようになります。
IBOutlet は、view 上にx,y,zの値を表示させるためのラベルと、デバイスが振られた時に、現在時刻を表示するラベルです。
doubel の行は、x,y,z の値を扱うための変数です。
Accelerometer.h を保存してください。
次に、AccelerometerViewController.xib をダブルクリックし、Interface Builder を起動します。
以下の画像のようになるように、ラベルを配置し、Outlet を接続してください。
完了したら、保存して Interface Builder を終了します。
最後に、Accelerometer.m を開き、viewDidLoad メソッドと accelerometer メソッドを以下のように設定してください。
– (void)viewDidLoad {
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = 1.0f/10.0f;
[super viewDidLoad];
}
– (void)accelerometer:(UIAccelerometer *)acel
didAccelerate:(UIAcceleration *)acceleration {
accelX = acceleration.x;
accelY = acceleration.y;
accelZ = acceleration.z;
xLabel.text =[NSString stringWithFormat:@”x: %g”, acceleration.x];
yLabel.text = [NSString stringWithFormat:@”y: %g”, acceleration.y];
zLabel.text = [NSString stringWithFormat:@”z: %g”, acceleration.z];
NSLog(@”x: %g”, acceleration.x);
NSLog(@”y: %g”, acceleration.y);
NSLog(@”z: %g”, acceleration.z);
if (acceleration.y >= –0.5) {
NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateFormat = @”yyyy/MM/dd HH:mm:ss”;
NSString *str = [df stringFromDate:[NSDate date]];
clockLabel.text = str;
}
}
上記のコードは、viewDidLoad 内で、updateInterval で読み取り間隔を設定しています。
accelerometer 内の acceleration.x によって、x軸の加速度の値を取得し、ラベルに表示させています。取得した各値をそれぞれラベルに表示させています。
さらに、動きを確認するために、NSLogもセットしています。
最後の if文は、acceleration.y が、「-0.5」以上になれば、clockLabel に現在時刻がセットされるようにしています。
これで保存し、デバイス上で、ビルド&実行することで、動作確認出来ます。
現在時刻の取得
http://iphone-tora.sakura.ne.jp/nsdate.html
加速度センサー
http://d.hatena.ne.jp/moto_maka/20090510/1241898972
http://japan.internet.com/developer/20100803/26.html