みなさん、こんにちは。
今回は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も多く手掛けていきたいですね。
Comentários