top of page
  • H.K

一人暮らしの高齢者を見守るセンサーを作ってみた


 


 

みなさん、こんにちは。

 今回はDXの取り組みの一つとして、「一人暮らしの高齢者を見守るセンサー」を作ってみたので、ご紹介させていただきます。DX研究開発事業部ではDX推進とスキルアップを目的した活動を行っています。



事の始まり

 ある日、一人暮らしの高齢者を見守るサービスを見比べて思案に暮れてしまいました。冷蔵庫やトイレ、玄関、電気ポットなどの戸や蓋にセンサーを取り付けて見守りをするのなら

手頃な価格で複数のセンサーを監視できる様な物がいい。窓や玄関などに付ければ防犯にもなる。遠隔地からスマホで今の状態や履歴が知りたい、緊急時はスマホに通知してほしい。

夢は大きくなるばかり。もう、作るしかありません。




IoTの課題と解決

 最初の課題は電源、特にセンサーの電源確保って難しいです。できるのなら電池で長期間動いてほしい。願わくばこのプロジェクトに飽きるまで、せめて3年は動き続けて欲しい。調べていたら面白いものを発見しました。それがモノワイヤレス株式会社の"TWELITE ARIA"です。ドアの開閉検知に必要な磁気センサー以外にも高性能の湿度・温度センサーが付いています。動作に必要な電源はコイン型電池(CR2032)で、定期的に温度や湿度を電波で送信する機能だけでなく、磁気の変化をリアルタイムに検知してくれるんです。消費電力は5分毎に温度・湿度のデータを送ったとしたら約6.47年動きます。これならドアの開閉通知をリアルタイムに送ったとしても、目標の3年は動き続けそうです。

※TWELITE ARIA電池寿命の概算


機材一覧(価格は2023/12/13時点)

 1.TWELITE ARIA(BLUE):磁気・温度・湿度を監視するセンサー 2,440円(Amazon)

 2.TWELITE SPOT:無線LANゲートウェイ 3,960円(Amazon)

 3.TWELITE R3:TWELITE SPOTのプログラム書き換え用インターフェース 990円(Amazon)

 4.MONOSTICK:TWELITE ARIA書き換え用に使用 4,048円(Amazon)

 5.USB Type-Cケーブル:ストレスフリーの主流ケーブル 110円(百均ショップ)

 6.CR2032:コイン電池 110円(百均ショップ)

 7.Prowl(iOS用アプリ):スマホへのプッシュ通知アプリ 440円(App Store)

 その他にPC(Windows、Mac、Linux)が必要です。


「TWELITE ARIA」(磁気・温度・湿度を監視するセンサー)について

 "TWELITE ARIA"は、"TWELITE SPOT"と無線で通信することができるセンサーデバイスです。ドアや窓などに取り付けることで、開閉の状態や室内の温度や湿度を監視することができます。データ送信間隔などの設定変更は"MONOSTICK"に"TWELITE ARIA"を近づけて行います。"MONOSTICK"には、"TWELITE ARIA"の設定を変更するためのツールがあります。"MONOSTICK"をパソコンに接続し、専用のソフトウェアを起動すると、"TWELITE ARIA"のデータ送信間隔や送信出力などのパラメータを変更することができます。"TWELITE ARIA"にはBLUEとREDの2種類のモデルがあり、REDの方が長距離通信が可能です。"TWELITE ARIA"のモデルは、基板の色で区別できます。通信距離は環境によって異なりますので、実際に使用する場所で確認が必要です。"TWELITE ARIA"設置の際はドアの開閉などのイベント発生時に"TWELITE ARIA"のLEDが点滅する様にセンサーと磁石の位置を調整します。"TWELITE ARIA"はとても軽いので両面テープなどで固定すると良いでしょう。


送受信機:TWELITE SPOT(無線LANゲートウェイ)について

 "TWELITE SPOT"は"TWELITE ARIA"の磁気・温度・湿度などのデータを受信する事ができます。また、WiFi経由でインターネットにも接続する事ができます。常時給電が必要ですので、USB充電器などからの電源を確保します。"TWELITE SPOT"のプログラム変更には"TWELITE R3"が必要です。

※TWELITE SPOTのスタートガイド


データの可視化について

 センサーの温度や湿度、ドア開閉イベントの記録・可視化にはクラウドサービスのAmbientを使用しました。今回はセンサー1個分のデータを集めるので無料枠に収まります。8個を超えるデータを可視化したい場合は有料プランがあります。

グラフには「温度」・「湿度」・「電波強度」・「通信のシーケンス番号」・「センサーの電池の電圧」・「磁気センサーの変化」を表示しました。


スマホへの通知について

 iPhoneで使えるProwlのクラウドサービスを使いました。"TWELITE SPOT"からのプッシュ通知を受け取るにはiPhoneにProwlのアプリのインストールが必要です。Prowlは買い切りのソフトですので、IoT関係の実験をするのならインストールして損はないと思います。単にプッシュ通知を受けるだけではなく、表示方法や音声通知時間の設定ができるので、生活スタイルに合わせた設定が可能です。

※Prowl: Easy Push Notifications

※Prowlの使い方やユーザ登録について


TWELITE SPOTのプログラム

#include <Arduino.h>
#include "MWings.h"
#include "Ambient.h"
#include <EspProwl.h>

WiFiClient client;
Ambient ambient;

const char*    ssid        = "***************"; //WiFi SSID
const char*    password    = "***************"; //WiFi Pass
unsigned int   channelId   = *****; //TWELITE Channel Id
const char*    writeKey    = "***************"; //Ambient Key

// TWELITE SPOTとESP32の接続に関するピンアサインとAPP ID
// TWELITE SPOTの中にTWELITEとESP32が入ってるので、ESP32とTWELITEの接続ピンなどを指定している
const int      RST_PIN     = 5;
const int      PRG_PIN     = 4;
const int      LED_PIN     = 18;
const uint8_t  TWE_CHANNEL = 18;
const uint32_t TWE_APP_ID  = 0x67720102; //TWELITE APP ID

unsigned long lastTime = 0;

void setup() {
  Serial.begin(115200);
  Serial2.begin(115200, SERIAL_8N1);

 //WiFi接続
  WiFi.begin(ssid, password);
  int count=0;
  while(WiFi.status()!=WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    count = count + 1;
    //WiFiに繋がらなかったらリブート
    if (count > 100) {
        ESP.restart();      
    }
  }
  Serial.println("WiFi connected");
  // Prowlの初期化
  EspProwl.begin();
  EspProwl.setApiKey("*******************************"); // Prowl用APIキー
  EspProwl.setApplicationName("Home");
  // これを入れておけば、意図しないリブートがあった事も知ることができる
  EspProwl.push("Info", "twelite spot wave up", 0);

  //Ambientの初期化
  ambient.begin(channelId, writeKey, &client);
  Serial.println("ambient.begin");

  // TWELITE SPOT(ESP32)の初期化
  Twelite.begin(Serial2, LED_PIN, RST_PIN, PRG_PIN, TWE_CHANNEL, TWE_APP_ID);
  Serial.println("twelite.begin");
  
  // Attach an event handler to process packets from App_ARIA
  Twelite.on([](const ParsedAppAriaPacket& packet) {
    // Plot only the first device
    static uint32_t firstSourceSerialId = packet.u32SourceSerialId;
    if (not (packet.u32SourceSerialId == firstSourceSerialId)) { return; }
    int16_t  temp = packet.i16Temp100x;
    uint16_t humi = packet.u16Humid100x;
    uint8_t  magn  = packet.u8MagnetState;
    uint8_t device_id = packet.u8SourceLogicalId;
    uint16_t sequence = packet.u16SequenceNumber;
    uint8_t lqi = packet.u8Lqi;
    uint16_t volt = packet.u16SupplyVoltage;

    // デバッグ用(TWELITE R3を通して見る事ができる)
    Serial.printf("device_id:%d, sequence:%d, LQI:%d,volt:%.2f,",device_id,sequence,lqi,volt/1000.00);
    Serial.printf("Temp : %.2f, Humi : %.2f,magn : %d\n", temp/100.0, humi/100.0,magn*10);
    // Ambientに送るデータ送る処理
    ambient.set(1, temp/100.0);
    ambient.set(2, humi/100.0);
    ambient.set(3, magn * 10);
    ambient.set(4, sequence);
    ambient.set(5, lqi);
    ambient.set(6, volt/1000.00);

    // Ambientへのデータ送信に失敗したらESP32をリブート
    if(ambient.send() == false) {
      WiFi.begin(ssid, password);
      delay(5000);
      if(ambient.send() == false) {
        ESP.restart();
      }
    }
    if (magn == 0){
        lastTime = millis();
    }
//プッシュ通知は10時間以上ドアの開閉イベントが無い場合に約5分間隔で送り続けます。
    if ((millis() - lastTime) > 36000000) {
      EspProwl.push("Alert", "No change in door signal for more than 10 hours.", 2);
    }
  });
}

void loop() {
  // Update TWELITE
  Twelite.update();
  
  // if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
  int count=0;
  // WiFiが切断されていたら再接続、再接続できなかったらESP32をリブート
  if(WiFi.status()!=WL_CONNECTED) {
    WiFi.begin(ssid, password);
    while(WiFi.status()!=WL_CONNECTED) {
      delay(500);
      Serial.print(".");
      count = count + 1;
      if (count > 100) {
        ESP.restart();      
      }
    }
  }
}

 ※赤字の*は環境に応じて変更してください。

 


感想

 "TWELITE ARIA"からの電波信号は周囲の状況に大きく左右されます。通信を100%成功させるよりも1時間に1回通信できればいいかなくらいに設定することで、電池の持続時間が大きく延びます。また、"TWELITE SPOT"がWiFi通信ができない時はデータの再送を諦めて再起動する様にした事で、放置しても動作し続けています。TWELITEシリーズには、各種センサーや機器を接続するためのファームウェアが豊富に提供されているので、温度や湿度に限らず、さまざまな種類のセンサーをワイヤレスで繋ぐことができます。これからは、省電力を活かしたDXも多く手掛けていきたいですね。

 

bottom of page