search
LoginSignup
24

More than 5 years have passed since last update.

posted at

updated at

ZIG SIMが送信するセンサの種類とデータ構造について

ZIG SIMとは?

ZIG SIMは1-10driveで開発した『プロトタイピングをプロトタイピングする』ためのアプリケーションです。
iOSデバイスを『Arduino + Wifi shield + LiPo + 沢山のセンサ』と見立てることで、簡単にセンサをPCに送信する仕組みを構築できます。
同様にリリースしているZIG INDICATORを利用するとPC側でアプリケーションを開発することなく、センサの値をチェックできます。

ZIG SIMのデータ構造

Settingsを編集することでJSON形式とOSC形式が選択可能です。
ただしZIG INDICATORは現時点でJSON形式にのみの対応。
ZIG SIMはWifiを利用するため、パケットロストの可能性があります。
そのため、TCP(Client)のOSCにも対応してます。
vvvvやProcessingなどではTCPのOSCも利用可能なようです。

ZIG SIMのTCP通信時のデリミタについて

ZIG SIMでTCP通信を設定した場合、"\n"をデリミタとして利用しています。
Windowsの場合は"¥n"になります。
JSON、OSCどちらもこのデリミタを採用しています。

ZIG SIMで送れるデータ形式(iOS版)

ACCEL

重力加速度を除いた加速度です。x,y,zの3つのパラメータで構成されています。単位はGです。
iOSでは±8Gの範囲を計測可能です。

GRAVITY

重力加速度です。x,y,zの3つのパラメータで構成されています。単位はGです。

GYRO

角速度です。x,y,zの3つのパラメータで構成されています。単位は°です。

QUATERNION

クォータニオン(デバイスの姿勢)です。x,y,z,wの4つパラメータで構成されています。

COMPASS

コンパスです。コンパスの角度とFaceUp(画面を上にした場合)か否(スマホを立てた場合)か、の2つのパラメータで構成されています。コンパスの角度の単位は°です。

PRESSURE

気圧です。気圧、相対高度の2つのパラメータで構成されています。
気圧の単位はhPa、相対高度はmeterです。

GPS

GPSです。緯度、経度の2つパラメータで構成されています。
単位は°です。

2D TOUCH

タッチ座標です。x,yの2つのパラメータで構成されています。配列として複数のセットが飛んでくる可能性があります。
最大数はiOSによって決定されています。
単位はpixelです。

TOUCH RADIUS

タッチの範囲です。1つのパラメータで構成されています。
単位はpixelです。

3D TOUCH

タッチの強さ(force)です。1つのパラメータで構成されています。

BEACON

iBeaconです。UUID、RSSI、Major、Minorの4つで構成されています。配列として複数のセットが飛んでくる可能性があります。

PROXIMITY MONITOR

近接センサです。検知しているか否か、の1つのパラメータで構成されています。

MIC LEVEL

マイクレベルです。最大値(max)と平均値(average)の2つのパラメータで構成されています。
単位はdBです。

REMOTE CONTROL

リモコンです。playが押されたか否か、volume upが押されたか否か、volume downが押されたか否かの3つのパラメータで構成されています。

ZIG SIMのデータ構造(JSON)

実際のJSONファイルを一例として記述します。

ZigSimSample.js
{
    "device":{ // 絶対に飛ぶ基本情報
        "name" : "iPhone 6s Plus",
        "uuid":"0123456789abcdef",
        "os":"ios",
        "osversion":"10.0.2",
        "displaywidth":1920,
        "displayheight":1080
    },
    "timestamp" : "2016/04/06 15:36", // 絶対に飛ぶ基本情報
    "sensordata":{
        "accel" : { // "ACCEL"選択時に出力される
            "x" : 1.00,
            "y" : 1.00,
            "z" : 1.00
            },
        "gravity" : { // "GRAVITY"選択時に出力される
            "x" : 1.00,
            "y" : 1.00,
            "z" : 1.00
            },
        "gyro" : { // "GYRO"選択時に出力される
            "x" : 1.00,
            "y" : 1.00,
            "z" : 1.00
            },

        "quaternion": { // "QUATERNION"選択時に出力される
            "x" : 1.00,
            "y" : 1.00,
            "z" : 1.00,
            "w" : 1.00
        }, 
        "compass": { // "COMPASS"選択時に出力される
            "faceup": false,
            "compass": 180.0
        }, 
        "pressure": { // "PRESSURE"選択時に出力される
            "pressure" : 1.000,
            "altitude" : 1.000
        }, 
        "gps": { // "GPS"選択時に出力される
            "latitude" : 180.0,
            "longitude" : 180.0
        }, 
        "miclevel":{
            "average":-33.25574493408203,
            "max":-26.98263359069824
        },
        "proximitymonitor":{
            "proximitymonitor":false
        },
        "remotecontrol":{
            "volumeup":false,
            "playpause":false,
            "volumedown":false
            },

        "touch" : [  // "2D Touch"、"TOUCH RADIUS"、"3D TOUCH"のどれかが選択されていると出力される 
                       {    
                            "x" : 0.5, // "2D Touch"選択時に出力される
                            "y" : 0.3, // "2D Touch"選択時に出力される
                            "radius" : 1.0, // "Touch RADIUS"選択時に出力される
                            "force" : 1.0  // "3D Touch"選択時に出力される
                      },
                      {  // 複数のタッチポイントがあれば出力される。iOSの場合最大5点
                            "x" : 0.1, 
                            "y" : 0.1,
                            "radius" : 2.0,
                            "force" : 0.5
                      },
        ]
        "beacon" : [ // "BEACON"選択時に出力される
                       {    
                            "uuid" : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,
                            "rssi" : -100,
                            "major" : 100,
                            "minor" : 1,
                      },
                     {    // 複数のBeaconが検出されてれば出力される。
                            "uuid" : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,
                            "rssi" : -50,
                            "major" : 101,
                            "minor" : 1,
                      }
        ]
    }
}

ZIG SIMのデータ構造(OSC)

OSCを選択した場合、OSC Bundleを利用して複数のOSC Messageをまとめて送信します。
アドレスは"/ZIGSIM/UUIDの名称/センサの名称"と言う感じです。
最初の『スラッシュ2つ』と言うのがややこしいというフィードバックをいただいたので、『スラッシュ1つ』に変更予定です。

DEVICE

アドレス:"/ZIGSIM/UUIDの名称/DEVICE"
パラメータ:String(デバイス名), String(OS), String(OSバージョン), Int(ディスプレイ幅), Int(ディスプレイ高さ)

ACCEL

アドレス:"/ZIGSIM/UUIDの名称/accel"
パラメータ:Float(x), Float(y), Float(z)

GRAVITY

アドレス:"//UUIDの名称/gravity"
パラメータ:Float(x), Float(y), Float(z)

GYRO

アドレス:"/ZIGSIM/UUIDの名称/gyro"
パラメータ:Float(x), Float(y), Float(z)

QUATERNION

アドレス:"/ZIGSIM/UUIDの名称/quaternion"
パラメータ:Float(x), Float(y), Float(z), Float(w)

COMPASS

アドレス:"/ZIGSIM/UUIDの名称/compass"
パラメータ:Float(角度), Int(faceUpか否か)

PRESSURE

アドレス:"/ZIGSIM/UUIDの名称/pressure"
パラメータ:Float(気圧), Float(相対高度)

GPS

アドレス:"/ZIGSIM/UUIDの名称/gps"
パラメータ:Float(緯度), Float(経度)

2D TOUCH

アドレス:"/ZIGSIM/UUIDの名称/touch検出数"
パラメータ:Float(x), Float(y)
備考:次のアドレスで配列数も同時に飛ばします。
  アドレス:"/ZIGSIM/UUIDの名称/touchcount"
  パラメータ:Int(x)

TOUCH RADIUS

アドレス:"/ZIGSIM/UUIDの名称/touchradius検出数"
*ver1.3.1までは2D TOUCHに含まれます
パラメータ:Float(x), Float(y), Float(radius)
備考:次のアドレスで配列数も同時に飛ばします。
  アドレス:"/ZIGSIM/UUIDの名称/touchcount"
  パラメータ:Int(x)

3D TOUCH

アドレス:"//UUIDの名称/touchforce検出数"
*ver1.3.1までは2D TOUCHに含まれます
パラメータ:Float(x), Float(y), Float(force)
備考:次のアドレスで配列数も同時に飛ばします。
  アドレス:"/ZIGSIM/UUIDの名称/touchcount"
  パラメータ:Int(x)

BEACON

アドレス:"/ZIGSIM/UUIDの名称/beacon検出数"
パラメータ:String(BeaconのUUID), Float(Major) , Float(Minor), Float(RSSI)
備考:次のアドレスで配列数も同時に飛ばします。
  アドレス:"/ZIGSIM/UUIDの名称/beaconcount"
  パラメータ:Int(x)

PROXIMITY MONITOR

アドレス:"/ZIGSIM/UUIDの名称/proximitymonitor"
パラメータ:Int(0/1)

REMOTE CONTROL

アドレス:"/ZIGSIM/UUIDの名称/remotecontrol"
パラメータ:Int(play0/1), Int(volume up 0/1), Int(volume down 0/1)

MIC LEVEL

アドレス:"/ZIGSIM/UUIDの名称/miclevel"
パラメータ:Float(max), Float(average)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
24