Система удалённого мониторинга пациентов COVID-19 на LoRa (The Things Network)
Компоненты и материалы
| The Things Uno (LoRa-борда, совместима с Arduino) | 1 шт. |
| The Things Gateway (LoRa-шлюз) | 1 шт. |
| MAXREFDES117# (Maxim Integrated — пульс/SpO2) | 1 шт. |
| Grove Temperature Sensor | 1 шт. |
| Перемычки | 1 набор |
| Кнопка DFRobot Gravity (жёлтая) | 1 шт. |
| Вибрация SW-420 (Grove) | 1 шт. |
| Зуммер | 1 шт. |
| LED | 1 шт. |
| Grove BME680 (T/H/P/Gas) | 1 шт. |
Инструменты
- Клейкий пистолет
- Паяльник
Приложения и сервисы
- Android Studio (мобильное приложение)
- Arduino Web Editor / VS Code + Arduino Extension
- AWS IoT Core (облако)
О проекте
Суть
Интеллектуальная система мониторинга для пациентов COVID-19. Датчики собирают биометрию → The Things Uno (LoRa) → The Things Gateway → AWS IoT Cloud. Автоматический анализ на границе (edge) определяет критические состояния → push-уведомления врачам/медсестрам и ответственным за отделение. Родичи — ограниченный доступ. Врачи не обязаны физически посещать палату.
Датчики и параметры
- MAXREFDES117# — пульс (BPM), SpO2;
- Grove Temperature — температура тела;
- BME680 — температура, влажность, давление, газ (окружение);
- SW-420 — движение/активность пациента;
- Кнопка — вызов помощи (паник-баттон).
Алгоритм экстренного состояния (Уравнение I)
Критическое состояние = комбинация порогов по пульсу, SpO2, температуре, движению. Пороговые значения в Таблице 1 (см. статью). Обработка на The Things Uno перед отправкой в облако.
Приложения
- Мобильное (Android): графики/гауги в реальном времени для врачей/медсестер. Push-уведомления при экстренных состояниях.
- Веб/Десктоп (AWS IoT): мониторинг множества пациентов одновременно (ICU dashboard).
Заключение
Система повышает эффективность и качество обслуживания в реанимации. Перспектива — носимый вариант для мониторинга пожилых/младенцев удалённо.
Ссылка
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
Код (Arduino / The Things Uno)
#include
#include
#include
#include
#include
const char *appEui = "0000000000000000";
const char *appKey = "00000000000000000000000000000000";
#define loraSerial Serial1
#define debugSerial Serial
#define freqPlan REPLACE_ME // TTN_FP_EU868 или TTN_FP_US915
int bpm, spo2; float temp, humidity; int movement, button, h_rate;
Adafruit_BME280 bme;
unsigned long currentMillis;
#define REPORTING_PERIOD_MS 1000
PulseOximeter pox;
uint32_t tsLastReport = 0;
void onBeatDetected() { /* Serial.println("Beat!"); */ }
void measured_pulse() {
pox.update();
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
bpm = pox.getHeartRate();
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);
bool status = bme.begin();
if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while(1); }
pinMode(7, OUTPUT); pinMode(A0, INPUT); pinMode(8, INPUT); pinMode(6, INPUT);
}
void loop() {
debugSerial.println("-- LOOP");
h_rate = analogRead(A0);
button = digitalRead(8);
temp = pox.getTemperature(); // Примечание: MAX30100 даёт температуру чипа, не тела. Для тела нужен отдельный датчик.
spo2 = pox.getSpO2();
bpm = bpm;
humidity = bme.readHumidity();
movement = digitalRead(6);
byte payload[7];
payload[0] = highByte(bpm);
payload[1] = lowByte((int)(temp*100)); // передаём *100 для точности
payload[2] = highByte((int)(humidity*100));
payload[3] = lowByte(movement);
payload[4] = lowByte(spo2);
payload[5] = lowByte(button);
payload[6] = lowByte(h_rate);
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("H_rate: "); debugSerial.println(h_rate);
debugSerial.print("Btn: "); debugSerial.println(button);
debugSerial.print("Mov: "); debugSerial.println(movement);
ttn.sendBytes(payload, sizeof(payload));
delay(20000); // отправка каждые 20 сек
}
Схемы
Схема подключения всех датчиков к The Things Uno (I2C для MAX30100 и BME680, аналоговые/цифровые пины для остальных).
Производственный процесс
- Мастерство управления IoT: Преодоление вызовов связности и полосы пропускания в 2024 году
- Eclipse Hono запускает MongoDB-based Device Registry — масштабируемый, production-ready
- Безопасная аутентификация устройств с X.509 сертификатами в Eclipse Hono
- Отслеживание достижений в технологии медицинских устройств
- Система управления температурой на базе LM35 с микроконтроллером AT89S52
- Мониторинг Интернета вещей: Обеспечение безопасных, надежных IoT-сетей
- Почему масштаб движит прибыльностью в сетях NB-IoT и LoRa
- Сотовая связь двигает будущее телемедицины
- 5 ключевых шагов к освоению Account-Based Marketing
- Ключевые соображения для разработки успешных медицинских устройств