LoRa対応COVID-19患者遠隔モニタリングシステム - The Things Network活用
必要なパーツと材料
| パーツ | 数量 | 備考 |
|---|---|---|
| The Things Uno (LoRa開発ボード) | 1 | Arduino互換、LoRaWAN内蔵 |
| The Things Gateway | 1 | LoRaWANゲートウェイ |
| MAXREFDES117# 心拍・SpO2センサーモジュール | 1 | Maxim Integrated製 |
| Grove 温度センサー | 1 | |
| Grove BME680(温湿度・気圧・ガス) | 1 | 環境モニタリング用 |
| Grove 振動センサー (SW-420) | 1 | 患者動作検知 |
| デジタルプッシュボタン | 1 | 緊急通報用 |
| ブザー、LED | 各1 | ローカルアラート用 |
| ジャンパーワイヤー | 1式 |
必要なツール
- はんだごて、ホットグルーガン
使用ソフトウェア・クラウド
- Arduino Web Editor / VS Code Arduino拡張
- The Things Network (TTN) / AWS IoT Core
- Android Studio(モバイルアプリ開発)
プロジェクト概要
システム構成
複数の生体センサー(心拍、SpO2、体温、環境データ、動作)からデータを収集し、The Things UnoでLoRaWAN経由でThe Things Gatewayへ送信。ゲートウェイからAWS IoT Coreへ転送し、クラウドで閾値判定・アラート生成。医師・看護師はモバイルアプリでリアルタイム監視、ICU責任者はWebダッシュボードで複数患者を一括管理。
ハードウェア構成
The Things Unoがメインコントローラー。各GroveセンサーをI2C/デジタル接続。LoRaにより長距離・低消費電力通信を実現し、病院内Wi-Fi不要で設置可能。
緊急判定アルゴリズム
以下の式で緊急度スコアを算出し、閾値超過でアラート発報:
Emergency Score = w1×(HR異常度) + w2×(SpO2異常度) + w3×(体温異常度) + w4×(動作異常)
各パラメータの閾値レベルは以下のテーブルで定義:
| パラメータ | 正常 | 注意 | 危険 |
|---|---|---|---|
| 心拍数 (BPM) | 60-100 | 50-59, 101-120 | <50, >120 |
| SpO2 (%) | >95 | 90-95 | <90 |
| 体温 (°C) | 36.5-37.5 | 37.6-38.5 | >38.5 |
| 振動/動作 | 正常範囲 | 不穏 | 無動作/痙攣 |
モバイルアプリ(医師・看護師用)
- リアルタイムゲージ/チャートでバイタルサイン表示
- プッシュ通知で緊急アラート受信
- 患者ごとの履歴データ閲覧
Webダッシュボード(ICU責任者用)
- 複数患者のステータスを一覧表示
- ゲージ、スパークライン、テキストで可視化
- クラウド直結でリアルタイム更新
患者家族向け機能
制限付きアクセスで患者の状態を確認可能(プライバシー配慮)。
Arduinoスケッチ(The Things Uno用)
#include <TheThingsNetwork.h>
#include <SPI.h>
#include <MAX30100_PulseOximeter.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
// TTN認証情報(要設定)
const char *appEui = "0000000000000000";
const char *appKey = "00000000000000000000000000000000";
#define loraSerial Serial1
#define debugSerial Serial
#define freqPlan REPLACE_ME // TTN_FP_EU868 or TTN_FP_US915
// センサーデータ変数
int bpm, spo2;
float temp, humidity;
int movement, buttonState, heartRateRaw;
Adafruit_BME280 bme;
PulseOximeter pox;
uint32_t tsLastReport = 0;
#define REPORTING_PERIOD_MS 1000
void onBeatDetected() { /* 拍動検知時処理 */ }
void readPulseOx() {
pox.update();
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
bpm = pox.getHeartRate();
spo2 = pox.getSpO2();
tsLastReport = millis();
}
}
TheThingsNetwork ttn(loraSerial, debugSerial, freqPlan);
void setup() {
loraSerial.begin(57600);
debugSerial.begin(9600);
while (!debugSerial && millis() < 10000);
debugSerial.println("-- STATUS"); ttn.showStatus();
debugSerial.println("-- JOIN"); ttn.join(appEui, appKey);
Serial.println("BME280 test");
Serial.println("Initializing MAX30100");
pox.begin();
pox.setOnBeatDetectedCallback(onBeatDetected);
if (!bme.begin()) {
Serial.println("BME280 not found!");
while (1);
}
pinMode(7, OUTPUT); // ブザー/LED
pinMode(A0, INPUT); // 心拍生信号
pinMode(8, INPUT); // 緊急ボタン
pinMode(6, INPUT); // 振動センサー
}
void loop() {
debugSerial.println("-- LOOP");
// センサー読取
heartRateRaw = analogRead(A0);
buttonState = digitalRead(8);
temp = pox.getTemperature(); // またはBME280から取得
spo2 = pox.getSpO2();
bpm = pox.getHeartRate();
humidity = bme.readHumidity();
movement = digitalRead(6);
// ペイロード構築(6バイト)
byte payload[7];
payload[0] = highByte(bpm);
payload[1] = lowByte((int)(temp * 100)); // 0.01度単位
payload[2] = highByte((int)(humidity * 100));
payload[3] = lowByte(movement);
payload[4] = lowByte(spo2);
payload[5] = lowByte(buttonState);
payload[6] = lowByte(heartRateRaw);
// デバッグ出力
debugSerial.print("Temp: "); debugSerial.println(temp);
debugSerial.print("Hum: "); debugSerial.println(humidity);
debugSerial.print("BPM: "); debugSerial.println(bpm);
debugSerial.print("SpO2: "); debugSerial.println(spo2);
debugSerial.print("HRaw: "); debugSerial.println(heartRateRaw);
debugSerial.print("Btn: "); debugSerial.println(buttonState);
debugSerial.print("Mov: "); debugSerial.println(movement);
// LoRa送信
ttn.sendBytes(payload, sizeof(payload));
delay(20000); // 20秒間隔
}
回路図

結論と展望
ICUスタッフの負担軽減と感染リスク低減に貢献。ウェアラブル化すれば高齢者見守りや乳児モニタリングにも応用可能。オープンソースで継続的改良を期待。
参考文献
Uddin, M. S., Alam, J. B., & Banu, S. (2017). Real time patient monitoring system based on internet of things. ICAEE 2017. DOI: 10.1109/ICAEE.2017.8255410
製造プロセス
- AT89S52マイコンとLM35センサーによる温度ベース機器制御システム
- Eclipse Hono、MongoDBベースのデバイスレジストリを導入——スケーラブルで本番対応
- アカウントベースドマーケティング(ABM)マスターへの5つの必須ステップ
- 医療機器開発成功のための主要考慮事項
- 医療機器技術の進歩を追跡:市場予測と主要トレンド
- 統合COVID-19検査:検出、変異株追跡、混合感染を一手順で
- IoT管理の極意:2024年における接続性と帯域幅の課題を克服する
- Eclipse HonoでのX.509証明書によるセキュアなデバイス認証
- IoT監視:セキュアで信頼性の高いIoTネットワークを確保する
- NB-IoTとLoRaネットワークで規模が収益性を左右する理由
- セルラー接続がテレヘルスの未来を牽引