スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Vibratorクラスを使ったAndroidの振動強弱の制御(Android vibration Control for strength)

Qiitaとかにのせてみたいと思ってます。でもなんだか怖いのでここにまとめておきます。

さて、おおよそすべてのスマートフォンには振動子、バイブレータが内臓されており主に通知などに使われています。

また、AndroidのAPIではVibratorクラスが用意されており開発者は
「自由」に振動機能を使うことができます。

用意されているのは「振動」「何秒間」維持させるかのみ。
また、ネットを探してみても振動の強さのコントロールを実現している人はいません。

ということでAndroidの標準APIを使って振動の強弱をつくりだしてみました。
※基礎的な振動のさせかたなどは他のサイト等を参考にしてください。





動作環境
Windows10 Home x64
Android Studio 2.3.2
HTL21 Android 4.1
Xperia Z3 Android 5.0


AndroidのAPIで用意されているのは、どのタイミングで振動をON-OFFにするかということになります。
したがって振動の強弱を作り出すためには、直接電圧やらをさげて振動子の回転、および強弱をコントロールするやりかたは取れません
(探してみた範囲ではありませんでした。)

そこでPWMという手法を用います。

ざっくり説明するとON(1)とOFF(0)を高速で入れ替え、周期ごとの平均値によって疑似的に0.5など0,1以外の値を作り出すことができるようになります。
工学系ではLEDの明るさやモータの回転数制御などによく使われ、ぼんやりとした明かりや速度の調整ができるようになります。


よって、本題です。
Androidの振動のオンオフをPWMの考え方を使って制御します。
まず、Vibratorクラスの「void vibrate()」を使います。
  このとき、引数が2つあるものを利用します。

これは第1引数に振動パターンを入れ、
  このときの振動パターンにはPWM的な考えを利用したパターンを入れます。
第2引数にリピート回数を入れます。
  なぜかいまいち分かっていませんが、0を入れても動きます。また、1を入れるよりも0を入れたほうが振動が弱くなります。

振動のパターンは次のようにします。
     long[] pattern = {0, s, t-s};  s(振動の強さ) t(周期,ms)
たとえば、周期を20ms,強さを2段階目とした場合、
     long[] pattern = {0, 2, 18};  s(振動の強さ) t(周期,ms)
と、なります。
第1引数の配列は{待ち時間、振動時間、待ち時間、振動時間、、、、}となっており、ループすることを前提とした場合最初の待ち時間は0msで固定し、以後二つの数値で決めます。

端末によっては振動子の挙動が違うため、振動の強さが小さすぎると振動しない場合もあります。
以下は周期20msで三段階の振動の強さに調整できる簡易スクリプトです。

long[] pat1 = { 0, 1, 19 };
long[] pat10 = { 0, 10, 10 };
long[] pat20 = { 0, 20, 0 };

switch (Value)
{
case 0:
vib.cancel();
break;
case 1:
vib.vibrate(pat1, 0);
break;
case 10:
vib.vibrate(pat10, 0);
break;
case 20:
vib.vibrate(pat20, 0);
break;
}



vibrate()関数の挙動を完璧に追えているわけではありませんが、一応振動の強弱をコントロールすることができました。
周期を変えることで振動の強さの段階を自由に変えることができます。
また、挙動が若干怪しいです。自己責任でお願いします。

コメント

非公開コメント

拍手

web拍手

FC2カウンター

現在の閲覧者数:

検索フォーム

Twitter...

プロフィール

Head

Author:Head
どもこんにちわHeadです
ゲームのこととか書こうとブログやり始めたら、
もっぱらギターばかりになってました。
最近はVR関連に興味がむいてます。それとunity

{ギター歴:2010.6/27~現在}
{unity:2014.8月~現在}


連絡用のメアド貼っておきます。何かあったら送ってください
head399★gmail.com(★は@に変えてください)

最新トラックバック

ブロとも申請フォーム

QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。