タブレイン社さんから、センサー類の載った 「TABシールド」3G通信モジュール「3GIM」をお借りしました。 Arduino UNOと組み合わせて部屋の温度と明るさを測定し、Ambientに送ってグラフ化してみます。

「TABシールド」と「3GIM」

「TABシールド」は光センサー、温度センサー、音センサー、超音波距離センサーなどのセンサー類と、 液晶ディスプレイ、圧電スピーカー、LED、赤外線LEDと受信器などの入出力デバイスが搭載された Arduino用の拡張ボード(シールド)です。

「3GIM」は「TABシールド」と組み合わせて使える3Gの通信モジュールです。 下の写真は「TABシールド」の裏側で、基盤の上についているのが「3GIM」、 左に伸びている黒いケーブルは3Gのアンテナです。 「3GIM」の裏側にSIMソケットが付いており、SIMを入れて使います。

Arduinoと「TABシールド」+「3GIM」を使うと温度、明るさ、距離などを測定し、 インターネットに送って記録したり、解析したりするIoTシステムの プロトタイプが簡単に作れます。 IoTシステムの学習やプロトタイプ開発には非常に便利な組み合わせだと思います。

今回はこの「TABシールド」と「3GIM」を使って、 部屋の明るさと温度を5分ごとに測定、記録し、グラフ化してみます。

ハードウェアの準備

ハードウェアの準備はとても簡単で、 Arduino UNOボードに「TABシールド」+「3GIM」を刺すだけです。 ハンダ付けもブレッドボードもいりません。

プログラム

「3GIM」はシリアルで制御します。 Arduinoの場合は通常のシリアル回線はパソコンとのやりとりに使い、 「3GIM」にはソフトシリアルを使います。 socketレベルのCONNECT、READ、WRITEや、 HTTPレベルのGET、POSTに相当するコマンドが用意されており、 ソフトシリアルからそれらのコマンドを「3GIM」に送ることで制御します。

今回、「3GIM」用のAmbientライブラリーを作りました。

    bool Ambient::begin(unsigned int channelId, const char * writeKey, SoftwareSerial * s);
    bool Ambient::set(int field, char * data);
    bool Ambient::send(void);

使い方は、最初にbegin()関数でAmbientの管理データーを初期化します。 パラメーターとして、送信するAmbientのチャネルIDとライトキー、 ソフトシリアルの管理データーへのポインターを渡します。 データーを送信するときはset()でデーターをパケットにセットし、 send()で実際にデーターを送信します。

Ambientに送ってグラフ化する

プログラムを動かすと、こんな感じのグラフが得られました。

温度も明るさもかなり値が上下に変動しています。 ArduinoのanalogRead()は直前に読んだ値の影響を受けることがあります。 1回空読みをすると影響が軽減できます。 実際に空読みをしたところ変動は少なくなりましたが、まだ値が安定しませんでしたので、 10m秒間隔で7回センサーを読み、最大値と最小値を除き、残り5回の平均を取りました。 得られたデーターは次のグラフのようになりました。

プログラムとライブラリーはGithubに公開しました。

今回は「TABシールド」+「3GIM」を使ってセンサーデーターをAmbientに送信することと、 そのためのライブラリー開発が目的でしたので、温度と明るさを測定しただけですが、 冒頭にも書いたように「TABシールド」には温度、光以外にも、音センサー、 超音波距離センサーなどのセンサー類、 液晶ディスプレイ、圧電スピーカー、LED、赤外線LEDと受信器などの入出力デバイスが搭載されています。 アイデア次第で様々なIoTシステムのプロトタイプ開発ができそうです。