U.F.O. SAをAndroidから独自のランダムパターンでコントロールするアプリ

自作U.F.O. SA TW 自作 アタッチメント カテゴリーの記事で良いのが出来たので、調子に乗ってU.F.O. SAの独自コントロールへと手を出してみましたので、その成果をこのページで公開します。

このアプリの対象となる製品はこちらです。

!最初にご注意!
これは野良アプリです。RENDS Co.,Ltd.さまの承諾を得ていませんし、GooglePlayは登録にお金も時間も労力も掛かるので今のところ登録するつもりはありません。
色んな意地悪な操作に対応できるほど高度な作りもしていませんので、ある程度自分でなんとかできる人だけが手を出してください。

プログラミングの心得は多少あるものの、Android開発は初めてでしたので、UI然り、Service然り、意外と骨が折れました。
Googleが公開しているSample「BluetoothLeGatt」をベースに必要なServiceとUIを作成したものになります。

さっくりどんな感じが分かりたい方はここをクリックorタップして説明動画を御覧ください。Youtubeの動画に遷移します。

それでは、早速ご説明をば。

インストール

Bluetoothに関する権限を必要とします。

Install時のスクリーンショット

設定へのアクセスという権限は、BluetoothをONにするのと、Bluetooth機器を検出するのに必要な権限です。

実行してみよう

ペアリングの設定は必要ありません。
実行時にBluetoothがOFFになっている場合はONにするように確認ダイアログが出てきますので、「許可」してあげてください。
BluetoothでコントロールするのでONにならないと先に進めません。

BluetoothがOFFだったときのスクリーンショット

Bluetooth機器のスキャン

BluetoothがONになっ(てい)たら、スキャン画面が立ち上がります。このとき、10秒間、周辺にあるBluetooth機器を検出します。
この間にU.F.O. SAの電源が投入されていると、画面上にデバイス名が表れます。

U.F.O. SAが見つかったときのスクリーンショット

U.F.O. SAは電源を投入しただけで動いてはいない状態にしておいてください。でないと、Bluetooth接続を受け付けてくれません。

10秒経ってタイムアウトしてしまったら、画面右上に「SCAN」という文字が出るので、これをタップするとリトライできます。

U.F.O. SAが検出できなかったときのスクリーンショット

U.F.O. SA に接続!

上手いこと「UFOSA」と文字が出てきたら、そこをタップしましょう。そうすると、U.F.O. SAの制御はBluetoothからだけ受け付けるようになります。
このとき、U.F.O. SA本体の方では電源を切る以外の動作は受け付けなくなりますが、当アプリを起動中にU.F.O. SAの電源を切られるとあまりスマートではない挙動を示すことがあるのでオススメできません。(時間を充分に空ければ大丈夫なんだけど、短時間にいろいろやられるとどうしても無理)

さて、U.F.O. SAと接続ができると下のような画面に切り替わります。

U.F.O. SA 接続時の初期画面スクリーンショット

うん、無骨だね。
画面を見なくても操作が出来るように、超大きいボタン4つだけで構成している画面です。
他の映像に集中していても大丈夫V。

「Step」「Gradual」「Composite」の3動作パターンを用意。強さはOFFが0でONが1~8の8段階。
初期状態では「Composite」パターンの強さ0に設定されています。

強さ0のとき「Step」「Gradual」「Composite」のいずれかのボタンをタップすると、その動作モードで強さ1になります。
強さが1以上のとき、現在動作しているモードと同じモードのボタンをタップすると、強さが1上昇します。異なるモードのボタンをタップすると、強さはそのままに動作モードが変わります。
つまり、お好みの強さが決まったら、違う動作モードにワンアクションで遷移できるようにしています。

一応、どの動作でどの強さになったか、一定時間画面上に出るようにしています。

動作モードと強さの表示スクリーンショット

上の画面は動作モード「Composite」で強さ2になりましたよ、って合図です。
ただ、これ、AndroidのToastという機能で表示しているのですが、この表示が一回出てから消えるまでの間は表示場所の変更が効かないようで、例えば上の「2」が表示されている間に「Gradual」ボタンをタップすると、本来なら「Gradual」の位置に「2」と表示されるべきですが、「Composite」の位置のまま「2」と表示されてしまいます。表示が消えてから動作する分にはちゃんとした位置に表示されますよ。
まぁ、慣れてきたらこんな表示見なくなりますけどね。

「Down/Off」ボタンは同じ動作モードのまま、強さを1ずつ下げていくボタンです。
強さが1以上あるときは、その動作モードのところに強さ表示がされますが、0になったときだけは動作していないので「Down/Off」ボタンのところに表示されます。(と言っても、動作モードが変更されるわけではないのですが)

動作停止時のスクリーンショット

んで、ボリュームボタンがあるAndroid機だったら、ボリュームボタンの上下でも強さを1ずつ上下できます。
ただし、ボリュームボタンでは動作モードの変更はできません。

動作モードと強さをお好みに設定したら、画面を消灯してしまって構いません。ホームボタンとかを押してバックグラウンドに行っちゃっても(多分)大丈夫。動き続けます。
ただし、動作の設定を変更するときはこのアプリの画面を最前面に出さないと出来ません。
動作を終わらせるときは強さを0にしてU.F.O. SAが止まったのを確認してから左上の<Gradual Improvement アイコンアイコンのところをタップするか、バックボタンを押すかして、スキャンのときの画面に戻してください。
この4つボタンの画面を出したまま放置するとバッテリーを著しく消耗するかもしれません。(あ、でもU.F.O. SA側の電源を強制的に落としてBluetooth接続が切れたら、勝手に画面戻るようにしてるわ。)

※本来なら、画面表示を消している状態でもボリュームボタンで強さ変更ができれば良かったのだけど、画面消していると本当にボリューム変更にしか使えないような仕組みになっているようなので諦めました。
設定変更のときだけ、さくっと画面点けて、変更し終えたら画面消灯しちゃうと良いでしょう。(画面ロックのことは一切考慮せずに言う。)
バッテリーに余裕があるなら画面点けっぱなしでも良いでしょうけどね。

動作モード

3種類の動作モードについてです。図はあくまでもイメージです。

まずは、「Step」。

モードStepの動作イメージ

一定の強さで一定の時間回転します。
強さと時間はある程度ランダムにしてあります。

続いて、「Gradual」。

モードGradualの動作イメージ

回転速度を変更するときに、いきなり変更せずに漸進的に変動させていきます。こちらも、強さと時間はある程度ランダムですよ。
イメージ的にはそれだけなのですが、実際には非常に弱く動かそうとするとU.F.O. SAは負荷に負けて実質止まってしまいます。
(筆者のは特に最近極低速での動きが劣ってくるようになった。摩擦が増えたかな?)
なので、極低速域はすっ飛ばして遷移するように制御しています。

最後に、「Composite」。

モードCompositeの動作イメージ

上記「Step」と「Gradual」の複合パターンです。
いきなり強さが変わったり、じりじり変わったりランダムで変化します。

筆者的には意外と「Gradual」が良い感じ。ぞわわーん、て来る。もちろん、いきなりというパターンもありだとは思いますので、「Composite」がデフォルトかなぁ。
というわけで、初期画面表示時点では動作モードを「Composite」にしてあるので、いきなりボリュームボタンで強さを上げた場合は「Composite」モードで動くようになっています。

動作条件

Android4.3以上。
それ未満の方はごめんなさい。これはBluetooth Low Energy(BLE)が扱えるAPIが4.3以上でしか動かないため、「ごらーっ!」されてもどうしようもありません。

Bluetooth4.0対応。
うちで動作確認できる環境が4.0対応のものしかない(というか持っているうちの一機種しか該当しなかった)ので、4.0に対応していないAndroid4.3以上の機体で動作するかどうかは分かりません。(無理な予感)

Apkファイルからインストールが出来るようになっていること。
どうしたら出来るようになるかはググッてください。(こちらに聞かれても困ります。そういうサポートはしません。)

慌ただしく操作しないこと。
Bluetooth通信が追い付かなくなる場合が出てきます。特に、意図的に通信を切断させるようなことをすると復旧に数秒かかります。
再接続は落ち着いて。「UFOSA」の文字をタップしても4つボタンの画面に切り替わらない場合はSCANのやり直しが必要かもしれません。

あと、特に「Gradual」(「Composite」で「Gradual」な動作をしているときも)で動作しているときに強さを0にしても止まらないという現象が発生しやすいです。慌てず騒がずもう一回「Down/Off」ボタンかボリューム下げるボタンを押しましょう。
常に、一息入れるくらいの余裕を見てやってください。
(理由はなんとなく想像付くけど、大した問題でない割に無駄処理が増えるので(逆に別の不具合の原因になる可能性も微レ存)当面、放置します。 → 『U.F.O. SAを独自パターンでコントロールするアプリVer.4』で改善しました。)

実践する前に動作確認を
いきなり実践でチクニー始めて、思った通りに動かせないとストレスが溜まりますから、まずはU.F.O. SA単体で動作の状況を見て、納得、理解してから実践に臨みましょう。

実はひょっとしたらA10サイクロンSAでも動くかもしれない。
筆者は持っていないので動作確認は出来ませんが、一応対応コードは入れてあります。

筆者が行った動作試験では約110分間、基本的に強さは2、ときどき動作モードを変えたり、止めたりもしながら使用したところ、Covia FLEAZ F4でバッテリーが61%→40%まで落ちました。(ただ、この機種のバッテリー残量表示は実にいい加減なのであまりあてにはなりません)
一方のU.F.O. SAの方はバッテリーがかなり消耗して動きが鈍くなってました。(もう、10ヶ月200回くらいは使ったから余計にねぇ)

要望などを出される場合

基本的に筆者がやりたいと思わない限り、やりません。ごめんなさい。でも、これは試してみたいって思うようなパターンが提示されたら頑張っちゃう可能性もあるかも。
ソースの開示要求も受けません。GPL関係のソースは一切使用していません。
お門違いなサポート要求も当然全て受け付けません。

ただ、Android側の条件が全て揃っていてU.F.O. SAも故障していないのに動かない場合、Bluetooth通信のパラメータが筆者の持っている製品とは異なる可能性があります。これについては、SCANしたときに画面上に出てくる文字列と書き込めるCharacteristicのUUIDを提示していただければ、対応が可能です。
(逆に言うと、「動かねえぞ、ごらーっ!」だけ言われても一切対応できません。うちで確認できるのはU.F.O. SAもAndroidも一機種だけですので。)

A10サイクロンSAの方もデバイス名と書き込めるCharacteristicのUUIDを提示していただければ、対応できます。
とりあえず現在は、「CycSA」というデバイス名だったらA10サイクロンSA用の書き込み値にしています。UUIDが想定のとおりだったら動く、はず。

U.F.O. SAとA10サイクロンSAの同時操作という要望はごめんなさい。プログラムの難易度がアホみたいに急上昇です。2台のAndroidを用意してくだされ。

ダウンロードファイル

勝手な再配布はしないでください。
特に、うちのサイトは弱小なので、検索で上位に表示されるサイトに勝手にコピーされると、盗まれたのとほぼ同じ状況に陥ります。
何かしらの問題が発覚して、こちらのサイトでファイルを差し替えても、それが皆さんの元には反映されなくなることにも繋がります。

諸事情によりアプリの無料配布を終了致しました。
今後は活動を支援してくださる方とのみ細細と共有していければと思います。

今後のUfoCtrlアプリ配布ページはこちらです。
UfoCtrl Ver1.00 (UfoCtrl開発活動支援プラン)

ブログに無理矢理載せている都合上、ちょっと特殊なダウンロード形式にしているので、Androidの標準ブラウザではダウンロードに失敗するかもしれません。Chromeなら大丈夫みたい。ブラウザをある程度選んでしまうようです。ご了承ください。

最後に

アダルドグッズや同人コンテンツなどをご購入の際にはこのサイトのリンクを踏んでから購入していただけると、いくばくかの紹介料をいただけるので筆者が大変助かります。
このアプリや筆者の作成コンテンツが役に立ったとか面白かったとか、ありましたら応援していただけると幸いです。

このアプリの対象となる製品はこちらです。

2016-04-09

この記事のタグ

U.F.O.

SA

アプリ

制御

自作