Health Band: slimme weerebare assistant voor senioren
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Infineon DPS310 (druksensor) | 1 |
| Arduino Nano R3 | 1 |
| Espressif ESP8266 ESP-01 (WiFi-module) | 1 |
| Draadjes (jumper wires) | 1 set |
| 3.7V LiPo-accu | 1 |
Benodigde tools en machines
- Solderbout (standaard)
Apps en online diensten
- Arduino IDE
- Blynk
Over dit project
Woont je geliefde alleen en is oud? Geen zorgen. Met Infineon's DPS310-druksensor hebben we een virtuele assistant ontwikkeld die netjes om de arm past in de vorm van een band, die deze tijdrovende taak overneemt en je geliefde in veilige handen weet.
"Ouderen vertegenwoordigen momenteel ongeveer 14,5% van de Amerikaanse bevolking, en bij 2030 zullen er ongeveer 74 miljoen ouderen zijn. Naarmate gezondheidszorgkosten stijgen en druk op instellingen toeneemt, zijn nieuwe oplossingen voor het managen van gezondheid van senioren van vitaal belang."
Na een snelle zoekopdracht en de schokkende cijfers te hebben gezien, is dit onze poging om ouderen te helpen!
HET VERHAAL
Mijn oma lijdt al enkele jaren aan de vroege tekenen van Alzheimer en haar toestand verergerert. Dit leidt tot onverwachte problemen:
- Waandelen naar 'werk' (ondanks advies om niet te gaan)
- Maltijden overslaan of dubbel eten
- Oefeningen niet doen
Alles door geheugenproblemen en onwetendheid over haar toestand. Mijn moeder moest bijna de hele dag, zeven dagen per week bij haar zijn. Dit was uitputtend en tijdrovend. Daarom bedachten we een virtuele assistant die het gedrag en de activiteiten van mijn oma monitort, en bij noodgevallen een familielid alerteert. Mijn moeder krijgt rust en de patiënt blijft in veilige handen!
ONDERDELEN EN CONCEPT
Hoewel dit systeem zich richt op Alzheimer-patiënten, hebben we veel andere functies geïntegreerd die alle ouderen helpen hun dagelijkse obstakels zelfstandig te overwinnen.

Een van de hoofdfuncties van Infineon's druksensor is de grootte! Dit maakt het component draagbaar en veelzijdig. In het hart van ons systeem zit de Arduino Nano, verbonden met de DPS310 via de I2C-bus. Acties en gedrag worden gecodeerd om de beweging van de patiënt te simuleren. Aan hand van deze grafieken/waarden bepalen we de toestand van de patiënt en sturen we bij noodgevallen een waarschuwing. De data wordt weergegeven in een kleine app via Blynk.
Het hele systeem wordt geïntegreerd in een compacte, mooie weerebare band, naadloos geïntegreerd in het leven van de patiënt.
FUNCTIES EN MOGELIJKHEDEN

Valdetectie
Studies tonen aan dat het grootste probleem bij ouderen vallen is. Vaak zijn patiënten onmachtig en komt hulp pas later. De Health Band detecteert een plotselinge drukdaling en stuurt automatisch een bericht naar familie voor hulp, zodat letsels erger worden voorkomen.

Bewegingsmotivatie
Voor ouderen is het lastig om te bewegen of te wandelen, hoewel dit gezond is. We motiveren hen door het aantal stappen of wandeltijd te tonen. In mijn oma's geval adviseerde de dokter 1000 stappen per dag; ze is wel bereid maar verliest de telling. Een teller helpt haar!
Zodra de band een 'golfbeweging' detecteert, concludeert hij dat de patiënt begint met oefenen. Piep naar piep of dal naar dal markeert één cyclus. Bij elke stap worden cycli gegenereerd en getoond – je eigen stapteller.

Koortsdetectie
De sensor meet ook temperatuur. De band zit op de arm en geeft de live temperatuur. Pieken of dalingen worden automatisch via bericht gerapporteerd aan familie.

Toestand (State)
Vertelt familie de live toestand van de patiënt. Als de band weinig drukverandering detecteert, kan de patiënt slapen. We hebben drie toestanden: Slapend, Wakker en Oefenen (nog niet perfect, soms verkeerde toestanden; we plannen meer toestanden toe te voegen).
SCHAKELING
De DPS310 kan via Bluetooth met een app gesynchroniseerd worden. De app geeft live visualisaties. Maar voor ons concept had dit beperkingen.
Om toegang te krijgen tot de datastroom van de sensor, hebben we een Arduino Nano via de I2C-bus aangesloten. Hierdoor konden we de data verwerken en scenario's afleiden.
Vervolgens hebben we de Arduino verbonden met een ESP8266 WiFi-module voor communicatie met een mobiele app.
INSTELLING


Voordat je alles instelt, moet je pinnen aan de sensor solderen. Knip twee stukken van 7 pinnen en solder ze vast. Een breadboard maakt het makkelijker.

DPS310 naar Arduino Nano (I2C)

LET OP: De oriëntatie van de sensor is zoals in de afbeelding.
- Pin 1 (SDA) op sensor → Analoge pin A4 op Arduino
- Pin 2 (SCL) op sensor → Analoge pin A5 op Arduino
- Pin 8 (GND) op sensor → GND op Arduino
Arduino Nano naar ESP8266 (WiFi-module)


LET OP: De oriëntatie van de module is zoals in de afbeelding.
- Pin 1 op WiFi-module → Digitale pin 11 op Arduino
- Pin 2 op WiFi-module → Digitale pin 10 op Arduino
- Pin 7 (GND) op WiFi-module → GND op Arduino
- Pin 8 (Power) op WiFi-module → 3V3 op Arduino
DE BAND MAKEN
Alle componenten zijn klein en passen op je pols. Voor de band gebruikten we canvas en schuim om de componenten in te bedden, en kletrband voor de riemen.


Knip schuim in de breedte van je hand. Rangschik de sensoren, knip de finale vorm uit. Rond de af voor een nettere look. Druk pinnen in het schuim (bescherming en grip), en bed de accu in een klein gat.

Keer de band om en soldeer de verbindingen; de pinnen steken net uit. Doe een testrun om te controleren of alles werkt.

Voeg kletrbandstripjes toe voor de riemen. Wikkel de band in canvas en plak met lijm pistool voor een nette afwerking!




Omdat we geen 3D-printer hebben, willen we deze prototype in de toekomst upgraden met een 3D-geprint model met perfecte sleuven voor alle componenten voor een ergonomisch ontwerp!
***We zullen dit project updaten wanneer we ons finale 3D-geprinte model hebben, met foto's en printbestanden***
DE ALGORITMES PROGRAMMEREN
Voordat we beginnen met programmeren, zijn er bibliotheken die je moet installeren:
- Wire-bibliotheek (meestal al geïnstalleerd; voor communicatie tussen Arduino Nano en DPS310) – GitHub
- DPS310-druksensorbibliotheek – GitHub
- Blynk-bibliotheek (voor communicatie met Blynk-cloud) – GitHub
Installatie voor elke bibliotheek: open Arduino IDE → Sketch → Bibliotheek gebruiken → .ZIP-bibliotheek toevoegen. Navigeer naar het gedownloade bestand en klik Openen. Herhaal voor alle drie.
Download nu de testcode en check of het compileert. Upload naar je Arduino Nano en open de Seriële Monitor (monitor-icoon rechtsboven) om live data te zien.
Als dat werkt, upload de hoofdcode en begin met je app bouwen.
DE APP BOUWEN
Voor internetverbinding gebruiken we Blynk, te downloaden uit de Android Play Store. Er zijn talloze voorbeelden in Arduino IDE onder Bestanden → Voorbeelden → Blynk.
Link naar Blynk-app: Google Play

We gebruikten de app voor gebruiksvriendelijke datarepresentatie.
_Cwhoz8GktO.jpeg?auto=compress%2Cformat&w=680&h=510&fit=max)

Selecteer Arduino Nano als microcontroller en WiFi als verbindingstype. Je ontvangt een e-mail met de "auth token" die je in de code moet invoeren.


We voegden widgets toe: een Meter voor live temperatuur, een Waardeweergave voor de stapteller en een LCD-weergave voor de toestand. Dit zijn de basisbouwstenen; je kunt veel meer functies toevoegen.
CONCLUSIE: OVER HET GEHELE SUCCESVOL!

Het project had enkele fouten en mismetingen. De lichaamstemperatuur gemeten door de Health Band was 36°C (pols) terwijl een medische thermometer 36,8°C (oksels) meet.
Onze algoritmes voor stappen gaven eerst verkeerde tellingen, maar na meerdere aanpassingen werkten ze redelijk accuraat. Een ander probleem was de toestandsfunctie; we voegden meer variabelen en voorwaarden toe.
Uiteindelijk losten we de problemen op door herkalibratie en de Health Band verzamelt nu de benodigde data. Mijn oma is de afgelopen twee weken zonder assistent geweest en de band werkt prima!
Val- of koortsberichten zijn nog niet getest (gelukkig geen dergelijke situaties), maar theoretisch zouden ze werken.
Dit is een geweldig project dat relatief eenvoudig te implementeren is. We hopen dat deze band levens kan redden en ouderen in veilige handen houdt!
Code
Data-generatie test (Arduino)
Na installatie van de bibliotheken, voer dit programma uit om te testen. Je zou een live stream van data/waarden op de seriële monitor moeten zien.
#include <ifx_dps310.h>
void setup() {
Serial.begin(9600);
while (!Serial);
ifxDps310.begin(Wire); // Standaard I2C-adres 0x77
// IMPORTANT NOTE:
// Als de DPS310 ~60°C aangeeft terwijl het ~20°C moet zijn (kamertemperatuur),
// heb je mogelijk een IC met een fuse-bit-probleem.
// Roep direct na begin() aan (alleen één keer na opstart):
// ifxDps310.correctTemp();
int temp_mr = 2; // temperatuur meetrate (0-7): 2^temp_mr metingen/seconde
int temp_osr = 2; // temperatuur oversampling rate (0-7): 2^temp_osr interne metingen/resultaat
int prs_mr = 2; // druk meetrate (0-7)
int prs_osr = 2; // druk oversampling rate (0-7)
int ret = ifxDps310.startMeasureBothCont(temp_mr, temp_osr, prs_mr, prs_osr);
if (ret != 0) {
Serial.print("Init FAILED! ret = "); Serial.println(ret);
} else {
Serial.println("Init complete!");
}
}
void loop() {
unsigned char pressureCount = 20;
long int pressure[pressureCount];
unsigned char temperatureCount = 20;
long int temperature[temperatureCount];
int ret = ifxDps310.getContResults(temperature, temperatureCount, pressure, pressureCount);
if (ret != 0) {
Serial.println(); Serial.println();
Serial.print("FAIL! ret = "); Serial.println(ret);
} else {
Serial.println(); Serial.println();
Serial.print(temperatureCount); Serial.println(" temperatuurwaarden gevonden: ");
for (int i = 0; i < temperatureCount; i++) {
Serial.print(temperature[i]); Serial.println(" graden Celsius");
}
Serial.println();
Serial.print(pressureCount); Serial.println(" drukwaarden gevonden: ");
for (int i = 0; i < pressureCount; i++) {
Serial.print(pressure[i]); Serial.println(" Pascal");
}
}
delay(10000); // Wacht tot DPS310 buffer opnieuw gevuld is
}
HealthBand met Blynk-applicatie (Arduino)
Dit is het eindprogramma. Enkele variabelen en drempels moeten handmatig ingesteld worden voor optimale werking. Volg de commentaren en pas aan. Stel de widgets in de Blynk-app in volgens je behoeften en je assistant komt tot leven!
#include <ifx_dps310.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial
char auth[] = "YourAuthToken"; // Jouw Blynk auth token
char ssid[] = "YourNetworkName"; // Jouw WiFi-naam
char pass[] = "YourPassword"; // Jouw WiFi-wachtwoord
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];
// Deze drempels veranderen per locatie; deze waarden werkten in ons kustgebied (gem. 34°C)
int pressureFallingThresh = 1;
int pressureSleepingThresh = 4;
int tempFeverThresh = 39;
int pressureJogThresh = 5;
void setup() {
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
while (!Serial);
ifxDps310.begin(Wire);
int ret = ifxDps310.setInterruptPolarity(1);
ret = ifxDps310.setInterruptSources(1, 0, 0);
ifxDps310.getIntStatusFifoFull(); // clear interrupt flag
int interruptPin = 3;
pinMode(interruptPin, INPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin), onFifoFull, RISING);
int temp_mr = 3;
int temp_osr = 2;
int prs_mr = 1;
int prs_osr = 3;
ret = ifxDps310.startMeasureBothCont(temp_mr, temp_osr, prs_mr, prs_osr);
if (ret != 0) {
Serial.print("Init FAILED! ret = "); Serial.println(ret);
} else {
Serial.println("Init complete!");
}
}
void loop() {
Blynk.run();
Serial.println("loop running");
delay(500);
if (pressureCount == pressureLength && temperatureCount == temperatureLength) {
Serial.println(); Serial.println();
Serial.print(temperatureCount); Serial.println(" temperatuurwaarden gevonden: ");
for (int i = 0; i < temperatureCount; i++) {
Serial.print(temperature[i]);
if (temperature[i] > tempFeverThresh) { feverEmail(); }
Serial.println(" graden Celsius");
}
Serial.println();
Serial.print(pressureCount); Serial.println(" drukwaarden gevonden: ");
for (int i = 0; i < pressureCount; i++) {
Serial.print(pressure[i]);
if (pressure[i] < pressureFallingThresh) { fallEmail(); }
else if (pressure[i] < pressureSleepingThresh && pressure[i] < pressureFallingThresh) { wakingUpEmail(); }
Serial.println(" Pascal");
}
Serial.println(); Serial.println();
pressureCount = 0;
temperatureCount = 0;
}
}
void feverEmail() {
Serial.println("Button is pressed.");
Blynk.email("your_email@mail.com", "Subject: your patient has fever", "your patient has a fever and his/ her body temp is", temperature);
}
void fallEmail() {
Serial.println("Button is pressed.");
Blynk.email("your_email@mail.com", "Subject: your patient just had a fall", "your patient just had a fall and requires assistance");
}
void wakingUpEmail() {
Serial.println("Button is pressed.");
Blynk.email("your_email@mail.com", "Subject: your patient has just left his/her bed", "your patient has a just left the bed for unknown reasons, he/she needs assistance");
}
void onFifoFull() {
Serial.println("Interrupt handler called");
ifxDps310.getIntStatusFifoFull(); // clear interrupt flag
unsigned char prs_freespace = pressureLength - pressureCount;
unsigned char temp_freespace = temperatureLength - temperatureCount;
ifxDps310.getContResults(&temperature[temperatureCount], temp_freespace, &pressure[pressureCount], prs_freespace);
pressureCount += prs_freespace;
temperatureCount += temp_freespace;
}
Schema's
Productieproces
- Slimme Jaloezieën: Geautomatiseerd Lichtbeheer met Arduino & Zonne-energie
- Bouw een Slimme IoT Pot met ESP8266, Arduino & Ultrasonische Sensor – Real-time Monitoring
- Een Arduino Iron Man bouwen: onderdelen, sensoren en stapsgewijze handleiding
- Find Me: Slimme Item Locator met Arduino en Bluetooth
- De massa van de aarde meten met Arduino: een stapsgewijze DIY-gids
- DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
- Bouw een Aangepaste Arduino Joystick Stuurwiel voor Gaming
- Handmatige bandzaag: duurzame, draagbare snijoplossing voor elk project
- Hardware-onafhankelijke software: cruciale voordelen voor slimme fabrieken
- ROI Maximaliseren in Slimme Productie: Terugverdientijd & Data-gedreven Succes
- IEC-voedingsstandaarden beheersen voor slimme huishoudelijke apparaten