2019年4月1日月曜日

M5StackとAmbientで子供の寝かしつけタイミングを可視化してみた

奥さんが子供を寝かしつけしているタイミングで帰宅しないようにするためにM5Stackと光センサー、Ambientを使ってIoTソリューション(寝かしつけタイミング帰宅回避システム、以下NTKS)っぽいことをしてみました。

NTKSの要件

    1. 自宅(奥さん側)から能動的なアクションは不要にしたい、寝かしつけを開始するときに毎回メールやLINEを送るのは面倒
      →何かしらのセンシングで寝かしつけの開始を自動判定したい
    2. もし子供が触ることがあっても危険でないこと
      →感電しにくい、怪我をしにくいこと
    3. 自分が開発しやすい環境であること
      →Mac OS、Arduino IDEの環境で開発できると嬉しい

    左から右へ、我が家の寝かしつけへ至る流れ

    NTKSを開発運用する上でどんなことを大事にするかリストアップしてみました。前作の光る帽子のときと違って、どこかで展示をするというものでもないので比較的条件は軽めです。とはいえ子供が触る可能性があるので基板むき出しはできるだけ避けたいところです。

    システム構成の検討

    続いてシステム構成を考えます。システムは大きく分けて自宅のセンシングをするためのシステムと、クラウド上での寝かしつけ状態を表示するためのシステムの2つに別れます。

    システム概要(という名のイメージ図)
    寝かしつけをしているかどうかの判別するためにどのような情報を送ればよいかについては、光センサーを部屋に置いてその計測データを分析すればわかるのではないかという仮設を立てました。これは我が家では寝かしつけの開始時に部屋を暗くして、寝かしつけが終われば部屋を明るくしている為です(正確には寝かしつけをしている隣の部屋に光センサーを置いています)。
    そして、光センサーの計測データを分析、表示するにはAmbientというサービスを利用することにしました。


    Ambientは各種センサーの計測データなどIoTデータをグラフィカルに表示してくれるサービスなのですが、Arduino、mbed、Raspberry Piなど様々なプラットフォームで利用できるライブラリやサンプルファイルを提供していて、もちろんM5Stackの開発環境(Arduino IDE)にも対応していることが大きな要因でした。

    下記URLを参考に、Ambientのアカウントとグラフを表示するためのチャネルを開設してライトキーを取得します。

    Ambientを使ってみる

    M5Stask Basic とデジタル光センサーの購入

    M5Stask Basic とデジタル光センサーの購入にはスイッチサイエンスさんを利用しました。下記URLから同じ製品を購入することができます。

    M5Stack Basic

    GROVE - I2C デジタル光センサー

    前作の光る帽子では9軸センサの値を使ってNeoPixelを制御していたのでM5Stack Grayを購入しましたが、今回はデジタル光センサーのみを利用するので、一番構成がシンプルで安価なM5Stack Basicを選びました。

    M5Staskを使ったデジタル光センサーの制御

    それではM5Stackを使って、デジタル光センサーの値を取得します。購入したデジタル光センサーはGROVEでの接続なので、デジタル光センサーに付属しているケーブルでデジタル光センサーとM5Stackを接続するのみでハードウェアの準備は完了です。
    次にソフトウェア側の設定をおこないます。

    Grove - Digital Light Sensor
    http://wiki.seeedstudio.com/Grove-Digital_Light_Sensor/

    上記URLを参考に、

    1. デジタル光センサーのライブラリファイルをダウンロードする
      https://github.com/Seeed-Studio/Grove_Digital_Light_Sensor/archive/master.zip
    2. ダウンロードしたファイルをArduino IDE に取り込む
      手順:Sketch > Include Library > Add .ZIP Library.
      を選択し、ダウンロードしたファイルを選択する
      http://wiki.seeedstudio.com/How_to_install_Arduino_Library/
    3. 下記手順でサンプルファイルを開く
      手順:File -> Example ->Digital_Light_Sensor->Digital_Light_Sensor.
      を選択する

    を実行します。
    サンプルファイルをコンパイルして実行すると、デジタル光センサーから読み取った値を確認することができます(サンプルファイルはArduino用なので、M5Stackのディスプレイ上には表示されません、Arduino IDEからシリアルモニタを起動して値を確認してください)。

    M5StaskからAmbientへのデータ送信

    次に取得したデジタル光センサーの値をAmbientへ送信します。

    M5StackでセンサーデーターをAmbientに送る (Arduino編)

    上記URLを参考に、

    1. Ambientのライブラリファイルをダウンロードする
      https://github.com/AmbientDataInc/Ambient_ESP8266_lib/archive/master.zip
    2. ダウンロードしたファイルをArduino IDE に取り込む
      手順:Sketch > Include Library > Add .ZIP Library.
      を選択し、ダウンロードしたファイルを選択する
    3. 下記手順でサンプルファイルを開く
      手順:File -> Example ->Ambient ESP8266 lib->Ambient_BME280.
      を選択する

    を実行します。
    そしてサンプルファイルをベースに、Wi-Fiの設定、Ambientの設定、デジタル光センサーの設定を追加します。

    Wi-Fiの設定(サンプルファイルの16-17行目)
    const char* ssid = "your ssid"; ←接続するアクセスポイント名を記載
    const char* password = "your password"; ←接続するアクセスポイントのパスワードを記載
    Ambientの設定(サンプルファイルの19-20行目)
    unsigned int channelId = 100; // Ambient上で開設したチャネルのIDを記載
    const char* writeKey = "writeKey"; // チャネルのライトキーを記載
    デジタル光センサーの設定として、サンプルファイルの最初に
    #include
    を追記、void setup()内に
    TSL2561.init();
    を追記、void loop()内に
    int light;
    light = TSL2561.readVisibleLux(); 
    ambient.set(1, String(light).c_str());
    ambient.send(); 
    を追記します。 BME280に関係する部分は利用しないので削除してください。
    これでサンプルファイルをベースにデジタル光センサーの値をAmbientへ送る準備が整いました。

    Ambientでのデータ確認

    実際にプログラムを実行して、一日計測をしてみた結果がこちらです。
    とある一日の照度データ
    こちらを見ると、18時すぎに帰宅して(点灯)、21時くらいから寝かしつけが始まって(消灯)、22時すぎに終わった(再度点灯)ことがわかります。照度データだけでこれだけわかってしまうのはちょっと怖い気もしますが、帰宅前にAmbientのグラフを確認することで寝かしつけ中に帰宅してしまう悲劇は回避できそうです。

    今後の予定

    無事寝かしつけ中の帰宅は回避できそうですが、毎回Ambientのグラフを見に行くのは面倒なので、寝かしつけの開始と終了を教えてくれるBotを作りたいと考えています。また、他のセンサーと組み合わせてより寝かしつけ 判定の精度を上げたいところです。

    0 件のコメント: