Health Band: умный браслет для мониторинга пожилых людей на Arduino Nano и DPS310
Компоненты и расходные материалы
| Компонент | Количество |
|---|---|
| Датчик давления Infineon DPS310 | 1 |
| Arduino Nano R3 | 1 |
| ESP8266 ESP-01 (WiFi) | 1 |
| Перемычки | 1 набор |
| LiPo аккумулятор 3.7 В | 1 |
Инструменты
- Паяльник
Приложения и сервисы
- Arduino IDE
- Blynk (iOS/Android)
О проекте
Мотивация
14.5% населения США — пожилые люди, к 2030 г. их будет 74 млн. Уход за пожилыми (особенно с алцгеймером) требует много времени. Автор создал носимый ассистент для своей бабушки, который отслеживает активность, падения, температуру и отправляет уведомления родственникам через Blynk.
Концепция и компоненты
В центре — Arduino Nano, подключённый по I2C к DPS310 (барометр/термометр). Данные передаются через ESP8266 в облако Blynk. Всё помещается в компактный браслет из поролона и холста с липучками.
Функции браслета
- Обнаружение падений: резкое падение давления → мгновенное уведомление.
- Подсчёт шагов/прогулок: анализ «волнового» движения руки (пик-пик = шаг). Мотивация к движению.
- Контроль температуры: датчик на запястье отслеживает скачки (лихорадка).
- Состояние пациента: Спит / Бодрствует / Занимается спортом (по вариациям давления).
Схема подключения
DPS310 → Arduino Nano (I2C)
- SDA (Pin 1) → A4
- SCL (Pin 2) → A5
- GND (Pin 8) → GND
Arduino Nano → ESP8266
- Pin 1 (TX) → D11
- Pin 2 (RX) → D10
- GND (Pin 7) → GND
- VCC (Pin 8) → 3.3V
Важно: ориентация модулей соответствует фото в проекте.
Изготовление браслета
- Вырежьте поролон под ширину запястья.
- Разместите компоненты, вырежьте окончательную форму, скруглите края.
- Впрессуйте контакты в поролон, сделайте карман для батареи.
- Переверните, припаяйте провода, проверьте работу.
- Приклейте липучки, обтяните холстом на клеевой пистолет.
Планируется обновление с 3D-печатью корпуса.
Необходимые библиотеки
Установка: Sketch → Include Library → Add .ZIP Library.
Настройка Blynk
- Установите приложение Blynk.
- Создайте проект: Board = Arduino Nano, Connection = WiFi.
- Получите Auth Token на email, вставьте в код.
- Добавьте виджеты: Gauge (температура), Value Display (шаги), LCD (состояние).
Исходный код
Тестовый скетч (проверка датчика)
#include <ifx_dps310.h>
void setup() {
Serial.begin(9600);
while (!Serial);
ifxDps310.begin(Wire); // адрес 0x77 по умолчанию
// ifxDps310.correctTemp(); // если показывает ~60°C вместо 20°C
int temp_mr = 2, temp_osr = 2;
int prs_mr = 2, prs_osr = 2;
int ret = ifxDps310.startMeasureBothCont(temp_mr, temp_osr, prs_mr, prs_osr);
if (ret != 0) Serial.println("Init FAILED!");
else Serial.println("Init complete!");
}
void loop() {
unsigned char pCnt = 20, tCnt = 20;
long pressure[20], temperature[20];
int ret = ifxDps310.getContResults(temperature, tCnt, pressure, pCnt);
if (ret == 0) {
for (int i = 0; i < tCnt; i++) {
Serial.print(temperature[i]); Serial.println(" °C");
}
for (int i = 0; i < pCnt; i++) {
Serial.print(pressure[i]); Serial.println(" Pa");
}
} else Serial.print("FAIL! ret = "); Serial.println(ret);
delay(10000);
}
Основной скетч (HealthBand + Blynk)
#include <ifx_dps310.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial
char auth[] = "YourAuthToken";
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";
const unsigned char pressureLength = 50;
unsigned char pressureCount = 0;
long int pressure[pressureLength];
unsigned char temperatureCount = 0;
const unsigned char temperatureLength = 50;
long int temperature[temperatureLength];
// Пороги (подстроить под регион!)
int pressureFallingThresh = 1;
int pressureSleepingThresh = 4;
int tempFeverThresh = 39; // °C * 100? уточнить в коде
int pressureJogThresh = 5;
void setup() {
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
while (!Serial);
ifxDps310.begin(Wire);
ifxDps310.setInterruptPolarity(1);
ifxDps310.setInterruptSources(1, 0, 0);
ifxDps310.getIntStatusFifoFull();
pinMode(3, INPUT);
attachInterrupt(digitalPinToInterrupt(3), onFifoFull, RISING);
int temp_mr = 3, temp_osr = 2;
int prs_mr = 1, prs_osr = 3;
ifxDps310.startMeasureBothCont(temp_mr, temp_osr, prs_mr, prs_osr);
}
void loop() {
Blynk.run();
delay(500);
if (pressureCount == pressureLength && temperatureCount == temperatureLength) {
for (int i = 0; i < temperatureCount; i++) {
Serial.print(temperature[i]); Serial.println(" °C");
if (temperature[i] > tempFeverThresh) feverEmail();
}
for (int i = 0; i < pressureCount; i++) {
Serial.print(pressure[i]); Serial.println(" Pa");
if (pressure[i] < pressureFallingThresh) fallEmail();
else if (pressure[i] < pressureSleepingThresh) wakingUpEmail();
}
pressureCount = 0;
temperatureCount = 0;
}
}
void feverEmail() {
Blynk.email("your_email@mail.com", "Subject: Fever alert", "Patient has fever");
}
void fallEmail() {
Blynk.email("your_email@mail.com", "Subject: Fall detected", "Patient fell, needs help");
}
void wakingUpEmail() {
Blynk.email("your_email@mail.com", "Subject: Left bed", "Patient left bed unexpectedly");
}
void onFifoFull() {
ifxDps310.getIntStatusFifoFull();
unsigned char prsFree = pressureLength - pressureCount;
unsigned char tmpFree = temperatureLength - temperatureCount;
ifxDps310.getContResults(&temperature[temperatureCount], tmpFree, &pressure[pressureCount], prsFree);
pressureCount += prsFree;
temperatureCount += tmpFree;
}
Результаты и выводы
- Температура на запястье ~36°C vs 36.8°C в подмышке — допустимая погрешность.
- Счётчик шагов после калибровки работает точно.
- Определение состояния (сон/бодрствование/спорт) дорабатывается.
- Бабушка носит браслет 2 недели без помощи — успешно.
- Алерты о падении/лихорадке не тестировались в реальности, но логика рабочая.
Проект открыт для улучшений (3D-корпус, доп. сенсоры).
Схемы
- Фото собранной схемы
- Файл для Fritzing:
nrf24_led_ring_o2Gij5oigT.fzz(название может не соответствовать, проверьте)
Производственный процесс
- Освоение стандартов питания IEC для проектирования умных бытовых приборов
- Умные шторы: автоматическое управление светом на Arduino с солнечной энергией
- Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
- Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Измерение массы Земли с Arduino: пошаговое руководство по DIY
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Максимизация ROI в умном производстве: окупаемость и успех на основе данных
- Hardware-независимое ПО: ключевые выгоды для умных фабрик
- Ручная ленточная пила: долговечное, портативное решение для резки любого проекта