ベッドに敷かない「はかり式」の離床センサーを作っています(その3:測定結果をAmbientでグラフ化)

前回はM5StickCとロードセルで「はかり」が完成しました。

今回は「はかり」で測定した値を、時系列のグラフとして見れるようにしたいと思います。

クラウドを使う

測定結果をアップロードし続けることで、それらのデータを可視化して表示してくれる、無料のクラウドサービスがあります。MathWorksのThingSpeakや、日本の会社のAmbientなどです。どちらも無料で利用できますが、保存できるデータの数に制限があります。ちょっと調べてみました。

ThinkSpeakの無料版

ThingSpeak™ Licensing FAQのページによると

ThinkSpeakの無料版
・最大4チャネル
・1年間に300万メッセージ/年 or 8200メッセージ/日
・メッセージの送信間隔は最低15秒

Ambient(無料)

Ambient 諸元/制限のページによると

Ambient(無料)
・最大8チャネル
・8000件/日
・メッセージの送信間隔は最低5秒

どちらも、メッセージ数は同じくらいですが、Ambientの方が8チャネル保存でき、送信間隔も短いですね。チャネルはデータを保存する箱のようなもので、用途ごとに区別してデータを保存することができます。

あと大きいのはAmbientは日本語でokなんですね。というわけでAmbientを使ってみたいと思います。

Ambientのセットアップ

ユーザー登録

Ambientのホームページの右上に[ユーザー登録(無料)]のボタンがあるので、それをクリック。

メールアドレスと、好きなパスワードを入れて[ユーザー登録(無料)]ボタンをクリックします。すると、設定したメール宛に「Ambient 新規登録確認メール」というメールが届きます。

が、私のgmailの場合は、迷惑メールに入ってしまい、しばらく気づきませんでした。すぐに届ていたようなので、しばらくしても届かなければ、迷惑メールフォルダを確認してみてください。

届いたメールに記載のURLをクリックすると、登録が完了します。

チャネルを作る

[My チャネル]で[チャネルを作る]をクリックすると、チャネルが1つ追加されます。これでデータを入れる箱ができました。

ここに表示されている、ユーザーキーと、ライトキーを使って、M5StickCからAmbientにデータを送ります。

M5StickCのプログラム

Ambientのライブラリを追加

公式のこのページにライブラリーのインポートの方法が書いてあります。公式のGitHubからCloneのzipファイルをダウンロードして、インポートします。

私の場合はインポートせずに、srcフォルダの中の「Ambient.cpp」「Ambient.h」のファイルを、Arduinoのプロジェクトフォルダの中に入れて使うことにしました。

プログラムの作り方

これが、とてつもなく簡単なんです。

...
#include "Ambient.h"//ヘッダファイルをインクルード
...
Ambient ambient;  //Ambientクラスを生成

void setup() {
  ...
  ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化
  ...
}

void loop() {
  ...
  ambient.set(1, Value);  //データ列1にValueの値をセット
  ambient.send(); //Ambientにデータを送信
  ...
}

5行追加するだけです。

  1. ヘッダファイルを読み込み
    #include “Ambient.h”
  2. クラスを生成
    Ambient ambient;
  3. 初期化
    ambient.begin(channelId, writeKey, &client);
  4. データをセット
    ambient.set(1, Value);
  5. Ambientへ送信
    ambient.send();

これだけで、Ambientにデータを送信できます。3.の初期化時に、チャネルを作ったときに表示されていた、ユーザーキーと、ライトキーを指定します。

Ambientに測定結果を送信するプログラム

以前に作った「はかり」としてのプログラムに、Wifiにつなぐためのコードと、Ambientにデータを送信するコードを追加してみました。

プログラムはこちらm5stick_ambientScaleからダウンロードできます。

//Wifi
const char* WifiSSID = "SSID"; //アクセスポイントのSSID
const char* WifiPassword = "POSSWORD"; //アクセスポイントのパスワード
WiFiClient client;

//Ambient
unsigned int channelId = CHANNEL_ID; // AmbientのチャネルID
const char* writeKey = "WRITE_KEY"; // ライトキー
Ambient ambient;

20,21行目のWiFiのアクセスポイントの設定と、25,26行目のAmbientのチャネルID、ライトキーをご自身の環境に合わせて設定していただければ、他は変更する必要はありません。

これで、60秒に1回、Ambientに測定データを送信するプログラムができました。

エヴァちゃんで実験

愛犬「エヴァ」ちゃんのお気に入りの座布団の下に、「Ambient対応はかり」が入っています。座布団に乗っていれば、数字が上がるはずです。

本来の体重は25kgぐらいだったと思いますが、座布団があり全体重が「はかり」に乗るわけではないので、重さは1kgちょっとですね。

朝からお昼まで記録してみました。

だいたい1時間に1度、重さが0になっているので、寝ている時でも、1時間ごとに起きて水を飲むか、体を伸ばしているようです。

また、20分から30分間隔で重さが階段状に変わることから、それくらいの時間間隔で体勢変えているようです。

人用に離床センサを作りましたが、ペットの離床もこれでわかりますね。

2019.10.9 追加 つづきはこちらです

追加終わり

 

コメント