Chromebox Commercialで空と実とをつないでみた

AOPEN Chromebox CommercialChromebox CommercialとQ.boardとWebカメラ(以下Chromebox)はGoogle Chrome OSを搭載した商業用の小型メディアプレーヤーです。

今回はこのChromeboxの持つ新たな可能性を探ってみようぞ!おー!

ということで、いろいろなハードウェアやクラウドサービスや開発環境を組み合わせて、IoTのハブとして活用してみました。

Chromeboxでこんなことが出来る

Webカメラが使える

手元にあったLogicool HD Pro ウェブカメラ C920を繋いで、Chromeブラウザ上のJavaScriptからgetUserMedia APIを使って映像を取得することが出来ました。

Unityで開発したWebGL版アプリが動く

アプリの開発スタイルとしてはHTMLやJavaScriptを直書きするのも好きですが、Unityでグラフィカルに作るのも大好きです。WebGL版でビルドすれば動くのでは?ということで早速やってみたところ難なく動きました。

WebGL版のビルドやデバッグのやり方は、UnityのWebGLについてドキュメントを読めばお分かりいただけるかと思います。WebGLの場合直接ソケットが使えない制約などがあるので、Unityのマニュアルに一度目を通されることをお勧めします。

Arduinoが動く

Chromeブラウザ上で動くChrome AppsはUSBデバイスにアクセスするためのAPIが用意されています。(参考: USB Devices)

ChromeboxのUSB端子にArduino Unoを接続して、Chromeブラウザからシリアル通信できるか試してみました。そしてこちらも無事に動きました。

SparkFun社のBlogにChrome+ArduinoというタイトルでArduinoの接続方法が載っていますので、ご参考にしてみてください。

Bluetooth LEデバイスと通信できる!

私たちクウジットが試作している9軸センサーを搭載したスポーツセンサーボード「Q.board」にはBluetooth LE(以下BLE)の通信モジュールが搭載されていて、PCやスマホとの間でセンサーデータをやりとりすることが出来ます。そして何とChromeboxにはBLE対応のBluetooth 4.0のモジュールがビルトインされているので、特別な機器を追加せずともQ.boardが接続できるはずです。

これはChromeブラウザのWeb Bluetooth APIを利用して繋ぐしかない!!

これも簡単に繋がりましたよ!!

画面上の9軸センサーの値が手の動きに合わせて変化しているのが分かりますね!(って分かりにくいですね。次回はGoogle ChartsやD3.jsでイケてる表現にしましょうね)

参考までに、Web Bluetooth APIでQ.boardのセンサー値を取得してコンソールに出力するJavaScriptを載せておきます。

// 1. ボタン等を配置して、そのボタンが押されたらQ.boardとの接続を開始する
function onClick() {
    var options = {filters: [{ namePrefix: QBOARD_NAME}]};
    navigator.bluetooth.requestDevice(options).then(found, error);
}

// 2. Q.boardが見つかった
function found(device) {
    // GATTプロファイルで接続を試みる
    device.gatt.connect().then(gatt, error);
}

// 3. GATTプロファイルで接続出来た
function gatt(server) {
    // Q.boardが提供するサービスに接続する
    server.getPrimaryService(QBOARD_SERVICE).then(service, error);
}

// 4. Q.boardが提供するサービスに接続出来た
function service (service) {
    // Q.boardが提供するCharacteristicに接続する
    Promise.all([
    	service.getCharacteristic(QBOARD_CHARACTERISTIC_0),
    	service.getCharacteristic(QBOARD_CHARACTERISTIC_1),
    	service.getCharacteristic(QBOARD_CHARACTERISTIC_2)
    ]).then(characteristic, error);
}

// 5. Characteristicを取得出来た
function characteristic (characteristics) {
    // characteristicの値が変化したらイベントを受け取る
    characteristics.forEach(function(value, index, array) {
        value.addEventListener('characteristicvaluechanged', characteristicValueChanged);
        value.startNotifications();
    });
}

// 6. Characteristicの値が変化した
function characteristicValueChanged(event) {
    // センサーの値を出力してみる
    console.log(event.target.value);
}

// エラーの場合
function error (e) {
    console.log(e);
}

 

全部合わせてみる

さあ、ここに来て前回公開した記事(UnityからGoogle Cloud Vision APIを使ってみた)のライブラリが役に立つ時がきました。

ChromeboxとUnityとArduino Uno(Q.boardが出払っていたため)とCloud Vision APIと、新登場のコインホッパーを組み合わて作ったシステムがこちらです。どーん!

空(くう=Cloud Vision API)で笑顔を認識をして、その結果が実(じつ=実際のコイン)になる、それを実現しているのがサービス-デバイス間の連携を取り持つAOPEN Chromebox Commercial。
なんだかとっても素敵でワクワクしますね〜。次はどんな空と実を結びつけよう!

それではまた!!

 

※今回、最後に紹介した笑顔のインタラクティブデモは、下記のハピネスカウンター研究(東大/ソニーCSL/Koozyt共同創業者の暦本純一先生)の社会実装活動の一環として実施しています。

■ オリジナルのハピネスカウンター研究(東大/ソニーCSL)

研究URL:
https://lab.rekimoto.org/projects/happinesscounter/
https://www.sonycsl.co.jp/tokyo/383/
取材動画
https://youtu.be/3vYqmJPB_4k

■ ハピネスカウンター for ワークショップ(Koozyt)
http://www.koozyt.com/press/2015/pr150316.html

■ ニコニコ学会βFINALでの盛り上がり計測(Koozyt)
http://blog.koozyt.com/?p=6476

■ エミタメ(ISID/Koozyt共同)

http://www.isid.co.jp/news/2012/1210.html
https://www.youtube.com/watch?v=dvQ0dXJyp8s

■ 笑顔認識サイネージ/スマイルバトル(Koozyt)
http://shinbashi.keizai.biz/column/8/

The following two tabs change content below.
某AV機器メーカーの研究職を経て2015年7月からKoozytの中の人になりました。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする