Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Health Band: умный браслет для мониторинга пожилых людей на Arduino Nano и DPS310

Компоненты и расходные материалы

Компонент Количество
Датчик давления Infineon DPS310 1
Arduino Nano R3 1
ESP8266 ESP-01 (WiFi) 1
Перемычки 1 набор
LiPo аккумулятор 3.7 В 1

Инструменты

Приложения и сервисы

О проекте

Мотивация

14.5% населения США — пожилые люди, к 2030 г. их будет 74 млн. Уход за пожилыми (особенно с алцгеймером) требует много времени. Автор создал носимый ассистент для своей бабушки, который отслеживает активность, падения, температуру и отправляет уведомления родственникам через Blynk.

Концепция и компоненты

В центре — Arduino Nano, подключённый по I2C к DPS310 (барометр/термометр). Данные передаются через ESP8266 в облако Blynk. Всё помещается в компактный браслет из поролона и холста с липучками.

Функции браслета

Схема подключения

DPS310 → Arduino Nano (I2C)

Arduino Nano → ESP8266

Важно: ориентация модулей соответствует фото в проекте.

Изготовление браслета

  1. Вырежьте поролон под ширину запястья.
  2. Разместите компоненты, вырежьте окончательную форму, скруглите края.
  3. Впрессуйте контакты в поролон, сделайте карман для батареи.
  4. Переверните, припаяйте провода, проверьте работу.
  5. Приклейте липучки, обтяните холстом на клеевой пистолет.

Планируется обновление с 3D-печатью корпуса.

Необходимые библиотеки

  1. Wire (встроена) — I2C
  2. DPS310 Pressure Sensor — GitHub
  3. Blynk — GitHub

Установка: Sketch → Include Library → Add .ZIP Library.

Настройка Blynk

  1. Установите приложение Blynk.
  2. Создайте проект: Board = Arduino Nano, Connection = WiFi.
  3. Получите Auth Token на email, вставьте в код.
  4. Добавьте виджеты: 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;
}

Результаты и выводы

Проект открыт для улучшений (3D-корпус, доп. сенсоры).

Схемы

Производственный процесс

  1. Освоение стандартов питания IEC для проектирования умных бытовых приборов
  2. Умные шторы: автоматическое управление светом на Arduino с солнечной энергией
  3. Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
  4. Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
  5. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  6. Измерение массы Земли с Arduino: пошаговое руководство по DIY
  7. DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
  8. Максимизация ROI в умном производстве: окупаемость и успех на основе данных
  9. Hardware-независимое ПО: ключевые выгоды для умных фабрик
  10. Ручная ленточная пила: долговечное, портативное решение для резки любого проекта