私はこれについてオンラインでドキュメントを見つけることができないようです、そして私がグーグルしているものは私に多くの矛盾する情報を与えています...
3 に答える
第1世代と第2世代のiPhone(およびiPod touchも想定)で使用されている加速度計は、+/-2gと+/-8gの2つのモードで動作します。(実際、あなたが観察したように、彼らは公称範囲から少し外れた加速度を報告します。しかし、精度はその範囲外で指定されていません。)
Appleはそれらを+/-2gモードで動作させます。トレードオフがあります。データシートによると、現在の解像度は名目上0.018 gです(ただし、私の第1世代のiPhoneは、AccelerometerGraphの修正バージョンによると0.018168604を使用しています)。+/- 8 gモードでは、解像度は4倍粗くなります。
私はAppleが、より細かい解像度がより広い範囲よりも有用であると判断したと思います。(0.018 gよりも細かい解像度が必要です。したがって、どちらも完全には満足していません。)
APIの公開された機能でモードを変更することはできません。彼らは加速を2倍として通過しているので、理論的にはモードの変更を許可し、加速を報告する前にA/D値を再スケーリングするときにモードを確認するだけで済みます。(モードを設定するための明白な場所は、加速度計情報を受信するようにアプリケーションを設定する呼び出しです。)ただし、下位互換性のために、OSは加速度計モードを最初に+/-2gに設定する必要があります。応用。また、バックグラウンドプロセスで加速度計モードを設定することはできませんでした。
aGauge アプリは、デバイスを動かすと、加速度計からの生データを表示します。また、デバイスの「反転」しきい値を見つけるのにも役立ちます。
範囲をテストするために、次のアプリケーションを作成しました...
UIAccelerometer *objAccelerometer;
UILabel *lblxmin, *lblxmax, *lblymin, *lblymax, *lblzmin, *lblzmax;
UILabel *lblxnow, *lblynow, *lblznow;
float xmin = 0.0, xmax = 0.0, ymin = 0.0, ymax = 0.0, zmin = 0.0, zmax = 0.0, xnow = 0.0, ynow = 0.0, znow = 0.0;
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
//NSLog (@"%f, %f, %f", acceleration.x, acceleration.y, acceleration.z);
xnow = acceleration.x;
ynow = acceleration.y;
znow = acceleration.z;
if (xnow < xmin) { xmin = xnow; }
if (ynow < ymin) { ymin = ynow; }
if (znow < zmin) { zmin = znow; }
if (xnow > xmax) { xmax = xnow; }
if (ynow > ymax) { ymax = ynow; }
if (znow > zmax) { zmax = znow; }
lblxmin.text = [NSString stringWithFormat:@"%f", xmin];
lblymin.text = [NSString stringWithFormat:@"%f", ymin];
lblzmin.text = [NSString stringWithFormat:@"%f", zmin];
lblxmax.text = [NSString stringWithFormat:@"%f", xmax];
lblymax.text = [NSString stringWithFormat:@"%f", ymax];
lblzmax.text = [NSString stringWithFormat:@"%f", zmax];
lblxnow.text = [NSString stringWithFormat:@"%f", xnow];
lblynow.text = [NSString stringWithFormat:@"%f", ynow];
lblznow.text = [NSString stringWithFormat:@"%f", znow];
}
-(void) invokeAccelerometer {
objAccelerometer = [UIAccelerometer sharedAccelerometer];
objAccelerometer.delegate = self;
objAccelerometer.updateInterval = (1.0 / 10.0);
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
lblxmin = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 40)];
lblxnow = [[UILabel alloc] initWithFrame:CGRectMake(100, 10, 100, 40)];
lblxmax = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 100, 40)];
lblymin = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 100, 40)];
lblynow = [[UILabel alloc] initWithFrame:CGRectMake(100, 60, 100, 40)];
lblymax = [[UILabel alloc] initWithFrame:CGRectMake(200, 60, 100, 40)];
lblzmin = [[UILabel alloc] initWithFrame:CGRectMake(10, 110, 100, 40)];
lblznow = [[UILabel alloc] initWithFrame:CGRectMake(100, 110, 100, 40)];
lblzmax = [[UILabel alloc] initWithFrame:CGRectMake(200, 110, 100, 40)];
[self.view addSubview:lblxmin];
[self.view addSubview:lblxnow];
[self.view addSubview:lblxmax];
[self.view addSubview:lblymin];
[self.view addSubview:lblynow];
[self.view addSubview:lblymax];
[self.view addSubview:lblzmin];
[self.view addSubview:lblznow];
[self.view addSubview:lblzmax];
[self invokeAccelerometer];
[super viewDidLoad];
}
問題は、iPodを水平/垂直軸に沿って回転させてから裏返すと、次のような値が得られることです。
xmin -1.271802
xmax 1.180959
ymin -1.344477
ymax 1.108285
zmin -2.30713
zmax 2.325581
私がiPodを持って行って、それから一体を振ると、私は得る...
x-2.325581から2.370413
y-2.325581から2.370413
z-2.307413から2.325581
それが何を測定しているのか、何かアイデアはありますか?
私が思いついた最高のものは次のとおりです。
縦軸
左に傾けた場合はx=-1(<|)
右端まで傾けるとx=+1(|>)
- ここで、<は画面の向き、|は画面の向きです。iPodの底です
y〜-1(画面があなたに面している場合、床に対して垂直)(「立ち上がっている」)
y〜1あなたとは反対の方向(および逆さま)の場合