加速度センサやジャイロを復習しよう

なんとなく勢いで参加したiOS Advent Calendarも今日で16日目。
そうそうたる面々が参加しているし、
もうそろそろネタとかかぶりそうな気がするけどそんなことは気にもせず1週間ほど前から準備しとりました。
時間とれなくてやっつけになったのは秘密。

今回紹介するのは加速度センサを使ったサンプル。
githubにうpしました
MasahiroSakoda / Humanizer

コードは至って簡単。
CoreMotion.frameworkを使うだけ。
とは言ってもなかなか使わないものだからコードを追ってみよう。
まずは加速度センサ。

- (void)startMeasure {
	if (motionManager.accelerometerActive) {
		NSOperationQueue *opQueue = [[[NSOperationQueue alloc] init] autorelease];
		[motionManager startAccelerometerUpdatesToQueue:opQueue withHandler:^(CMAccelerometerData *data, NSError *error) {
			dispatch_async(dispatch_get_main_queue(), ^ {
				NSLog(@"%@", data);
				CMAcceleration acceleration = data.acceleration;
				[self countSquat:acceleration];
				[logString appendFormat:@"x: %f, y: %f, z: %f\n", acceleration.x, acceleration.y, acceleration.z];
				textView.text = logString;
			});
		}];
	}
 
}

特記事項として留意すべき点はupdateIntervalとセンサの制御範囲。
これに関しては各々の感覚になってしまうため、一番難しいところかもしれない。。
Block構文の書き方とかも慣れないと気持ち悪いかも。

次にジャイロスコープ。

- (void)startMeasure {
	if (motionManager.isGyroActive) {
        NSOperationQueue *opQueue = [[[NSOperationQueue alloc] init] autorelease];
		[motionManager startGyroUpdatesToQueue:opQueue withHandler:^(CMGyroData *data, NSError *error) {
			dispatch_async(dispatch_get_main_queue(),^ {
				NSLog(@"%@", data);
				CMRotationRate gyroRotationRate = data.rotationRate;
				[logString appendFormat:@"x: %f, y: %f, z: %f\n", gyroRotationRate.x, gyroRotationRate.y, gyroRotationRate.z];
				textView.text = logString;
			});
		}];
	}
}

こちらも加速度と同じくupdateTimeと制御範囲がキモかも。
GCD(Grand Central Dispatch)で逐次解析を走らせたりってのもアリですな。

今更だけど、ぶん回してデバッグ中にiPhone壊さないようにしてね。
壊れても責任は持てませんので。

1週間前から書いてるって言いましたが、実はこれを書く前は「加速度/ジャイロでiPhoneを空に持ちながら字を書けたらなー」なんて思ってたけどこれの制御が難しい&時間が取れないことに気づいて断念。。。

これを書きながら考えていたんだけど、
紹介したこいつらを使ってどういうことが出来るか考えてみました。

・WiiリモコンみたいにiPhoneを振り回して字や絵を書いたり。

・iPhoneやiPadを落としたら音が出てなくさないようにする、とか、

・腹筋, 背筋等筋トレのジェスチャを定義したり、

・万歩計だったり、

・ランニング中に揺れを検知して適したリズム(BPM)を流したり、

あと、GestureRecognizer系と組み合わせるのもアリですね。
(UIViewのサブクラス上でしか動作しませんが…)

開発者によって色んな可能性が広がると思うのでこれをみている皆さんも是非試してみてください!!
(まだちょっと未完成っぽいので後々追記します)

コメントを残す

メールアドレスが公開されることはありません。


*


- Rental Orbit Space -