現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。
概要
加速度をみて、カウントアップする装置作りました。M5StickCにもマグネットが内蔵されていますが、移動物につけるには弱すぎると思いますので、超強力マグネットを使って固定しています。
結論からいうと、現時点では実用精度のものは出来上がっていません!
M5stickCに超強力マグネットを組み合わせて、加速度カウンター作ってみました! pic.twitter.com/bITbSv8CA6
— たなかまさゆき (@tnkmasayuki) December 12, 2019
固定の仕組み
上記の仕組みを利用して、マグネットをくっつけました。正直磁力が強すぎる気がします。
加速度の仕組み
上記で、ターゲットとなる動きをしたときにどんな数値になるか、下調べをしました。

このような波形が測定されました。Y軸は立っているので1Gが常にかかっており、上にあげるとGが増え、下げると減ります。
実装方法検討
ここが悩んだのですが、特定アプリをArduinoで作るとそれ専用の端末になってしまうので、アプリを切り替えながら使いたいと思いました。
最初はSD Updaterなども検討したのですが、4Mしかないフラッシュを通信系使うとすぐになくなるし管理も面倒だなと思い、UIFlowを採用しました。
プロトタイプのプロトタイプ

Aボタンを押すとカウントアップするアプリです。
あれ、これでいいんじゃない?
十分実用的なアプリでした。。。
プロトタイプ作成

さすがにちょっと、ボタンでカウントアップだとなんなので、作ってみました。このコードが一番上にある動画のアプリです。
こんなコードで大丈夫かと思ったあなたは正しいです!
ぼこぼこカウントを取りこぼします。セットの間に下ろしたときの衝撃でカウントアップします。。。
カウントアップも意図した瞬間にされていません!
そもそもArduinoのときと加速度が違う気がします。Arduinoで測定した数値を設定すると、全く反応しません。いろいろ試行錯誤して、閾値を下げていったところ、この数値になりました。
上にあるArduinoのグラフだと1Gから0.5G以上は増減しているようにみえるのですが、UIFlowだと反応しないので0.15Gまで閾値を下げています。
UIFlowの加速度プロッタを作る

てなわけで、作ってみました。最後の20ミリ秒のところと、Y軸の加速度を40倍しているところの値を変更すれば、必要なターゲットに対応するプロッターになると思います。

こんな感じの見た目です。立てて使うので1Gが真ん中で、左右の青い線が0.5G、画面端までいくと1Gです。(横幅80ドットで、左右に40ドットずつ、加速度を40倍にしているので端が1Gです)
グレーの補助線が更に半分なので、0.25Gにいくかいかないかの加速度ですね。これは手でためした数値なので、実際にはもう少し低い値かもしれません。
まとめ
本当はジムにパソコンを持ち込んで、動かしながらデータを取りつつ、パラメータを変更するのが一番なのですが、そこまでの勇気がないので、ちょっとずつ変更しながら試しています、、、
プロッタも作ったので、もう少し解析も進むかな。。。
たぶん、加速度を積分とかして移動量を出したり、上げ下ろしを加速減速の遷移から持ってこないときれいなデータは取れないと思います。
個人的には何セット目なのかをたまに忘れたときの確認用なので、これぐらいの精度でも実用になったり。。。そして、へばってくると加速度が落ちてカウントされなかったのがわかったりと楽しいです。
あれ、プロッタの下にカウント表示したほうが、かっこいいかも?
(何故か縦に使うのに画面が横で描画しているので、縦で作り直さねば。。。)
コメント