kdenologue

たまに何か作ります。

3Dジェスチャセンサ:skywriterの使ってみたメモ

skywriterという製品がある。日本ではつい先週あたりにスイッチサイエンスから買えるようになった。
www.switch-science.com

PythonArduinoライブラリを利用可能な、三次元ジェスチャーセンサボードです。

指の三次元(x、y、z)ジェスチャーで動作をコントロールすることができます。フリック、タップ、ダブルタップ、スイープなどの基本動作情報を認識します。

ボード上10 cmまで感知可能なので、導電性のないものであればボードを隠す(埋め込む)こともできます(アクリル板や布など)。

(スイッチサイエンス 商品ページより引用)

気になったので買って触ってみたメモ。
ちなみに、販売元のPIMORONIでは2014年後半あたりに販売開始された模様。


とりあえず指のxyz座標を取ってくるとこんな感じ。

使ったライブラリはここ。
github.com

些細な罠だが、Arduino UNOでは外部ピン割り込みとWireライブラリが衝突するので、ハードウェア割り込みで走る関数の中にI2C通信をさせることができない。よって、先のライブラリのexampleにあるSkywriterInterruptはArduinoUNOでは動かない。はず。少なくとも僕の手元では動かなかった・・・

ぼけっとライブラリを眺めてみると、幾つかのジェスチャも対応してるようだったので、これも少し触ってみた。そのあたりを含めてレビュー的なものを。

雰囲気

f:id:kden:20170409182654p:plain
電極の配置図、使われているセンサICのデータシートより抜粋。詳細後述。skywriterの電極もこんな感じになってる。

ラッキング

応答性はまあ、って感じ。上の動画を見るとイメージが付くと思う。電界をみてるらしいので周りにものがあると結構左右される。センシングの途中に余計なものが増えたら多分再キャリブレーションが必要なんだろうな。基板の面に対して垂直に指を立てて遊ぶのが気持ちいいセンシングの肝。横から手のひらをかざすと手首あたりにも反応している感じがする。
当然だが、間に紙とか挟んでも動く。

タップ・ダブルタップ・タッチ

基板上にある5個のセンシング電極のどこを触っているか、それが連続なのか断続なのかみたいなところを判断できる。center電極をタッチしているのがわかっても、電極のどの位置を触っているかを調べるのは色々工夫が必要そうな印象がある。

フリック

基板の上でススッとやるのではなく、基板の右端から左端までぐっと手をかざして移動する感じにすると反応。なので上下左右の4パターンが取得情報。

ジェスチャー

基板の上で人差し指をくるくる回すみたいな動作をすると、その回転が時計回りか反時計回り化を判断してくれる。結構判断の速度は早い印象。精度もわるくなさそう。

詳細

載っているICはMicrochipのMGC3130。静電容量センサとかタッチ系はこの会社強いよね。
www.microchip.com

ちなみにIC自体の発売は2012年くらいらしい。詳しい仕様や新しさなどは下のリンクにだいたい書いてある。
マイクロチップ MGC3130:非接触ジェスチャインタフェースを1チップで実現、ファームもツールも提供 - EDN Japan

f:id:kden:20170409194209p:plain
データシートより抜粋。

原理について書いてあるのだが、正直よくわからなかった・・・。電場を作って、それをセンシングしているのだが、手などを近づけたときの電気力線の歪み(手など通じて地面に行こうとする)(≒等電位線)を見ることで云々とある。

送信電極が1個、受信電極が5個あって、送信電極は3V、44~110kHzくらいでスイッチングして変調信号を送ってるだけみたい。解析アルゴリズムがすごそう(小並感)

少なくとも解析アルゴリズムを自分で実装できるとは思えないし、SoCとしてまとまってあとはデータ読むだけという形で電界ベースのジェスチャセンサが使えるのはお手軽で良いものがある。一般製品に使われているところをあまり見ないのは、やはり精度の限界があるからなのだろうか・・・・。

追記したい情報があり次第追記します。