1

Androidフォンの振動周波数を制御しようとしています。

Android API は、オン/オフ パターンを介して振動を制御するためのインターフェイスを提供することを理解しています。

public void vibrate (long[] パターン、int リピート)

所定のパターンで振動します。

バイブレーターをオンまたはオフにする期間をミリ秒単位で表す int の配列を渡します。最初の値は、バイブレーターをオンにする前に待機するミリ秒数を示します。次の値は、バイブレーターをオフにする前にオンにしておくミリ秒数を示します。後続の値は、バイブレータをオフにするかバイブレータをオンにするかをミリ秒単位で交互に切り替えます。

パターンを繰り返すには、繰り返しを開始するインデックスをパターン配列に渡すか、-1 を渡して繰り返しを無効にします。

そこで、振動数 N を求めるには、1 秒間に振動子のオンとオフを N 回繰り返せばよいのではないかと考えました。

たとえば、20Hz の 10 秒間の振動を取得するには、次のようにパターンを割り当てます。

Vibrator vib = (Vibrator)this.context.getSystemService(Context.VIBRATOR_SERVICE);
...
long[] arrPattern = new long[20*10];
for (int i =0; i<arrPattern.length; ++i) // each duty circle is 50 ms
{
    arrPattern[i] = (i%2==0)?1:49;
}
vib.vibrate(pattern, -1);

この素朴なアイデアに基づいて、振動周波数 N をさまざまな値に設定し、電話に加速度計を取り付けて、振動中の加速度データをキャプチャするといういくつかの実験を行いました。

これらの時間領域の加速度データを DFT を介して周波数領域に変換した後、設定した振動周波数に関係なく、常に 10Hz と 175Hz 付近にかなりのパワーがあることに気付きました。

なぜうまくいかないのだろうと思っていました。

4

1 に答える 1