UfoCtrl Ver4.00 U.F.O. TW SA A10サイクロンSA (+PLUSプラス) バッハスマート ROCKET+1D DIYグッズコントローラー等BLE制御アプリ

小改良なのですが、動きが変わる改修であるためメジャーバージョンを上げております。
また、後半ではこのアプリの今後について少々お話があります。

このアプリはBLE(Bluetooth Low Energy)通信機能を持つAndroid4.3(API18)以上の機器でU.F.O. TW、U.F.O. SA、A10サイクロンSA +PLUS(プラス)バッハスマートROCKET+1Dなどの+1D対応グッズをランダムコントロールしたり任意の固定パターンを登録して制御出来たりする野良アプリです。
また、上記以外の機器でも条件が合致する機器であれば接続情報を正しく設定に記述することで同様に制御できる可能性があります。

対象となるデバイスは以下になります。

なお、ROCKET2
ROCKET2
についても、
筆者が購入していないため動作するか不明ですが、販売サイトの画像を見た限りですとROCKET+1Dと同じ「ROCKET」というデバイス名を使用している可能性が高く、このアプリはデバイス名で接続機器を判別しているため「ROCKET」で認識できるかもしれません。(が確証も責任も持てませんのでその辺りは各ご自身の判断にてお願いいたします。)

また当然のことながら、2025年に入ってから本格始動し公開に漕ぎ着けました汎用マイクロコントローラーとモータードライバを組み合わせてDIYするグッズコントローラーもこのアプリで制御することが出来ます。
DIYグッズコントローラーについては過去記事
昇圧回路基板を追加して5V以上のグッズに対応するDIYグッズコントローラーを作成
マイクロコントローラーSeeed Studio XIAO nRF52840とモータードライバTB6612を組み合わせてUfoCtrlで制御できる小型軽量なグッズコントローラーを作成する
U.F.O. SAコントローラーからの脱却 バッテリー容量不安からの開放 小型軽量DIYコントローラーで反応も改善
汎用品を組み合わせて作るオリジナルグッズコントローラーの動作確認
をご参照ください。

改修内容

PWM制御をする際のオンのときのPowerについて、今まではオンオフをそのままのPowerで繰り返すと刺激が弱まるだけになってしまいがちなので本来選択されたPowerを増減させる倍率を単位%で指定出来るようにしていました。
今回はこれを範囲指定出来るように変更し、指定された範囲内でランダムに倍率を決定する、という改修を行いました。

今までは短時間でオンオフを繰り返すような動きをするときのオン時では必ず同じPowerで動いていたものが毎回ランダムで倍率可変するようになるので動きの意外性が高まります。

例えば今まで、2/2/175と指定していた場合、200ms毎にオンオフを繰り返し、オンのときは本来選択されたPowerの175%のPowerで動作させる、という仕様だったものが
2/2/100-250と範囲指定すると200ms毎にオンオフを繰り返し、オンのときは毎回100%〜250%の範囲でランダム選択された倍率を適用して動作させるということになります。

例えば今回選択されたPowerが40だったとすると、今までの2/2/175指定ではオフとPower70を200ms毎に繰り返していました。
それが2/2/100-250では200ms毎に40オフ100オフ81オフ56オフ……みたいにオンのときのPowerが毎回揺らぎます。

指定方法は上記でもちょこちょこ書いてきたようにSettingsの中でPWM制御の倍率を単位%で記述しているところをn-mみたいに半角ハイフンを挟んで範囲指定で書けるようになります。
もちろん、変更したくない方は今までどおり数値を1つだけ書いて固定することも可能です。
また、倍率を弄る必要な無い方は100と書いても良いですが省略してしまっても良いです。
また、範囲指定の片方が100の場合はそれを省略しても構いません。例えば-200とすれば100-200とみなしますし、50-と書けば50-100とみなします。
また、実は大小入れ違いでも認識します。200-と書いても200-100つまり100-200と認識します。300-150みたいに書いても150-300と認識します。

一応、規定値の方もほんのりと範囲指定を入れましたので、どんな値にしたか抜粋でここに表示しておきます。1つのランダムパターン設定の記述です。

#Random(設定数値記載行に書かれた「0123456789-/,」以外はコメントとみなす(ConnectConfigを除く))(複数行書けるVolumeの終わり、RandomPatternの終わり、ConnectConfigの終わりには必ず必須コメント行(行頭##)が必要)
Random(U.F.O. TW)
#Start: int(1〜)加速時最低Power, Stop: int(1〜)減速時最低Power, CounterWeight: int(0〜): モーター稼働積算計に加算するときの乗数
1,1,1
#TimePattern: int(1〜)単位100msec 要素数自由。値重複可(確率上昇)
10,16,22,28,34,40,46,52
#GradualPattern: int(0,1〜){/int(1〜)}Power変化値/時間(単位100msec)の分数型で記載。時間が1のときは分母省略可能。約分せず。0はGradualさせない。要素数自由。値重複可(確率上昇)
0,0,0,0,1,3/2,2,3,1/2,3/4,1/3,2/3
#PWMPattern: int(0,2〜){/int(2〜)/int(0〜)}On時間(単位100msec)/Off時間(単位100msec)/OnのときPowerを何%に増(減)速するかを"n"(単独限定)|"n-m"(範囲指定nm省略可省略は100扱い)|(増減させないとき/100を省略可)。約分せず。0はPWMさせない。要素数自由。値重複可(確率上昇)
0,0,0,0,0,2/2/-250,4/2/-200,2/4/-300,4/4/-150,4/8/-250
#Volume1 PowerPattern: int(-100〜100 必須)以下Option/TimeIndexRange: int(1〜 "n"(単独限定)|"n-m"(範囲指定nm省略可))/GradualIndexRange: int(〃)/PWMIndexRange: int(〃)/NextVolume: int(1〜3 以外は無視)/NextPowerIndexRange: int(Range〃)。要素数自由。複数行可(終わりを示す##コメント行必須)。値重複可(確率上昇)
0/-5,0/-5,0/-5
1/-6,5/-7,10,15,20/-6,25/-4///2
-1/-6,-5/-7,-10,-15,-20/-6,25/-4///2
##Volume2 PowerPattern{/TimeIndexRange/GradualIndexRange/PWMIndexRange/NextVolume/NextPowerIndexRange}(Volume1の終わりを締める必須コメント行)
0/-5,0/-5
7/-6/g/p/1,14/-7,21,28,35/-6/-11/2-9,42/-4/-10/3-8/3
-7/-6/g/p/1,-14/-7,-21,-28,-35/-6/-11/2-9,-42/-4/-10/3-8/3
##Volume3 PowerPattern{/TimeIndexRange/GradualIndexRange/PWMIndexRange/NextVolume/NextPowerIndexRange}(Volume2の終わりを締める必須コメント行)
0/-5
20/-6///1,25/-7///2,30,35/-7,40/-6/-11/2-9,45/-5/-10/3-8,50/-4/2-8/4-8
-20/-6///1,-25/-7///2,-30,-35/-7,-40/-6/-11/2-9,-45/-5/-10/3-8,-50/-4/2-8/4-8
##VolEnd(Volume3の終わりを示す必須コメント行)

変更があるのがPWMのとこだけですのでさらに抜粋しますと。

#PWMPattern: int(0,2〜){/int(2〜)/int(0〜)}On時間(単位100msec)/Off時間(単位100msec)/OnのときPowerを何%に増(減)速するかを"n"(単独限定)|"n-m"(範囲指定nm省略可省略は100扱い)|(増減させないとき/100を省略可)。約分せず。0はPWMさせない。要素数自由。値重複可(確率上昇)
0,0,0,0,0,2/2/-250,4/2/-200,2/4/-300,4/4/-150,4/8/-250

この既定値では100-150〜100-300になるように書いていますが、例えばPower10が選択されているときに100%〜150%で振ったとしてもPower10〜15の間で変動するだけですので変化を感じにくいかもしれません。
一方で例えば400-900みたいにアホみたいに倍率を上げたりするとPower25が選択されたときに400%-900%ではいずれも100を超えてしまい100を超えた場合は100に抑えられますので100固定にしたのと同じことになってしまいます。

ですので、選択されるPowerの程度に応じて、変化が感じられつつも100をあまり超えないような倍率を設定するのが肝かと思います。
なお、範囲値の中でランダムにしているだけですので、最大でPower100を少々オーバーするように設定してしまってもいつも100になるとは限らないためご安心ください。

あと、この仕様変更は固定パターンの方にも同じように適用されます。
固定パターンなのにランダム可能になるというのも変な感じがするのですが、動作部分のロジックが共用であるためここをいちいち作りを分けるのも非効率であるため、固定パターンでも同仕様を適用することにしました。
従来どおり固定で動かしたい場合は範囲指定をしなければ良いだけですので、完全固定運用も変わらず可能です。

様々な省略記法を許可しているため、従来の設定値そのままでも従来の動きのまま使用することができます。

改修に至った経緯と現況、今後について

いつものようにチクニーしていたときにふと『このPWM制御も慣れてくると単調だな、予測できちゃうな』と思いまして、よくよく考えてみると割と簡単にランダム化改修出来そうだったので急遽改修に踏み切りました。
本来予定ではDIYグッズコントローラー関連で調整を便利かつ簡単にするための作業を進めているところだったのですが、その作業に時間が掛かっているのと、こちらの改修の方が素早く出来そうだったので、こちらを先に公開させていただくことにしました。
ただ、作業中にAndroidStudioバージョンアップによるプロジェクト崩壊が発生したため、とりあえず一旦バージョンを戻して作業を進め、今回のリリースが済んだらAndroidStudioバージョンアップ対応もしないとなぁといった状況になっております。

筆者がアプリ開発に使用しているAndroidStudioが古いバージョンの足切りをしてきているため、最新のAndroidStudioではUfoCtrlのビルドが出来なくなってしまいました。
まだCopilotに尋ねただけなので裏は取れていないのですが、どうやらAPI21(Android5.0)よりも古いバージョンまで動作させようとしていると最新のAndroidStudioではもうサポートしていないらしいので正常動作しないらしいです。
今回のバージョンは最新のOtter 2025.2.1ではビルドしておらず、一つ前のNarwhal 4 Feature Drop 2025.1.4でのビルドとなります。

ですが、古いバージョンのAndroidStudioを使用し続けていると最新の機種での動作が不確実になる懸念が高まりますので、今回のリリースはAndroid4.3以上としていますが、次回リリース以降はAndroid5.0以上とかになってしまうかと思います。
なお、現時点でもAndroid15の機種でアプリが動作しないというご報告を頂いていたりもしますので、AndroidStudioのバージョン最新化は優先して取り組まないといけなさそうだなぁと考えております。

現時点で筆者が所有しているAndroid機はAndroid14が最新であるため、実機確認としては筆者の側ではAndroid15以上の確認が出来ておりません。エミュレーターでは最新のAndroid16でも確認出来ますが、動作確認出来るのは画面周りだけでしてBLE通信等実機でないと検証出来ない部分が絡むとエミュレーターでも検証出来ません。
そのため、現時点ではTargetAPIを34とAndroid14向けに留めています。
これにより原理上はAndroid15以上の機種でもこのアプリはAndroid14向けに作ったモノと解釈されて動くはずなのですが、これが上手く機能しない機種が存在するのかもしくは余りにも古いバージョンまでサポートしたプログラムを書いていることが最新の一部機種では想定外になってしまうのか、この辺りは定かではありませんが、動作しない機種が存在しているみたいですので、確実に動作させたい場合はあまり最新の機種1機に絞らずにやや古めの機体もスペアとして残していただくと良いかもしれません。

とか書いていたのですが、急遽POCO M7 Pro 5Gを購入しました(まだ届いていない)ので、割と近い時期にAndroid15での実機検証ともう数ヶ月したらAndroid16での実機検証が出来るようになるかもしれません。
いずれにしろ、Android4.x系のサポートは続けられそうにないということはご了承いただきたく思います。
なお、筆者が普段チクニーに使用しているのはAndroid6.0なんですけど、これの足切りも下手したらそう遠くない未来に来るんですよね。あんまり足切りしないで欲しいなぁ……

今回以前のUfoCtrlの仕様についての説明

はこちら。
UfoCtrl Ver3.00 U.F.O. TW U.F.O. SA A10サイクロンSA (+PLUSプラス) バッハスマート ROCKET+1D 等BLE制御アプリ
UfoCtrl Ver2.00 U.F.O. TW U.F.O. SA A10サイクロンSA (+PLUSプラス) バッハスマート ROCKET+1D 等BLE制御アプリ
UfoCtrl Ver1.10 U.F.O. TW U.F.O. SA A10サイクロンSA (+PLUSプラス) バッハスマート ROCKET+1D 等BLE制御アプリ
UfoCtrl Ver1.00 U.F.O. TW U.F.O. SA A10サイクロンSA (+PLUSプラス) バッハスマート ROCKET+1D 等BLE制御アプリ
の解説をご参照ください。

ダウンロードファイル

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

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

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

2025-11-22

この記事のタグ

U.F.O.

TW

SA

アプリ

制御

電動

自作

チクニー

開発