Arduino101 は、インテル社の Quark マイクロコントローラ C1000 を含むインテル Curie モジュ ールを採用した、マイクロコントローラーボートです。このボードは6軸加速度計とジャイロ スコープにて構成されてあり、また、Bluetooth Low Energy(BLE)が備え付けとなります。本プ ロジェクトでは、Arduino101 を利用し、6 軸加速度計とジャイロスコープのデータを集め、BLE 慶友で集まったデータをアドバタイズ致します。クライアントデバイスは、Bluetooth で Arduino101 に接続し、アドバタイズされたデータを読み取り、そのデータをまた Wi-Fi でサー バーに送ります。それから、サーバーは Arduino101 からのデータを DB に保存し、データを webpage に送ることによりデータがグラフ化されユーザーに表示します。ユーザーは webpage から Arduino101 のサンプリング周波数を制御することができます。ボタンをクリックするだけ で、ユーザーはサンプリング時間を Arduino101 にオーダーすることができます。直ちにサンプ リング周波数をすることができ、加えて webpage からも変更内容を直接確認することができま す。下記のダイヤグラムより、本プロジェクトの全体図をご覧くださいませ。
Arduino101 ボードの言語を書くには、“CurieBLE”と“CurieIMU”のライブラリーに加え Arduino 言 語が使われています。ボードは 7 つの Characteristic を含む一つのサービスと共に、ペリフェラ ルとしてセットアップします。一つの Characteristic は、ユーザー側が設定できるサンプリング 周波数(ts)です。その他 6 つの Characteristic は、加速度計とジャイロスコープの数値(ax, ay, az, gx, gy, gz)となります。また、各サービスと Characteristic は、それぞれの UUID を割り当て られます。これらの UUID は、クライアントデバイスが接続、登録、読み取り、書き込み、そ して特定の Characteristic への通知の受信を行うために使われます。
クライアントデバイスでは、Noble に加えて Node.js を使い、BLE を通して Arduino101 を探し接 続を行います。クライアントデバイスは、Arduino101 を見つけてから割り当てられたサービス UUID の下の Characteristic 別 の UUID を探します。それから各 Characteristic の通知が ON になり ます。 サンプリング周波数 の転送および、加速度計とジャイロスコープデータのサーバーへの転送に は、Socket.io が使われました。一つ興味深いところとして、WebSockets ではなく Socket.io を採 用したところを注目してください。その主な理由としては、multiplexing(多重化)がありま す。Socket.io の API では一つのチャンネルを通じて複数のシグナルを送信することがより簡単 にできる反面、Websockets ですと少しややこしくなります。
Express に加えて Node.js がサーバー上でのセットアップに、また MongoDB がデータベースのセ ットアップに使われました。繰り返しとなりますが、Socket.io がデータをサーバーから Webpage に転送します。Webpage からは、ユーザー側が Arduino101 のサンプリング周波数を 変更することができ、Socket.io と Noble により、直ちに制御されます。また、ユーザーは、デ ータの着信速度が制御により早くなったり鈍くなったりすることを、Webpage より視覚的に確 認することができます。Webpage は Bootstrap や Angularjs のようなフレームワークを利用し創られ、リアルタイムで加速度をグラフ化するには Google Charts を使いました。プロジェクトは GitHub で、デモは YouTube でご確認できます。