Table of Contents

Theodor STOICAN (66917) - Smart Health Surveillance

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul consta in realizarea unui device care poate monitoriza un pacient intr-un salon obisnuit din spital. Dupa o interventie chirurgicala, spre exemplu, sau in sectiile pentru arsi, fiecarui pacient ii sunt monitorizate semnele vitale si alti cativa parametri, care sunt ulterior afisate pe un monitor, langa patul pacientului. Astfel, un medic poate parcurge un drum destul de lung pana la pacient pentru a verifica starea acestuia. Prin acest proiect, imi propun sa creez un prototip prin care datele culese de la pacient sa fie centralizate, undeva, intr-o camera dedicata (sau pe un device, precum o tableta), asa incat un medic sa poata vedea starea mai multor pacienti simultan.

Descriere generală

Microcontroller-ul va colecta pulsul si date despre mediul ambiental de la cei 3 senzori, va aplica filtre pe datele colectate (pentru a obtine forma pulsului din semnal, de pilda), va trimite printr-un modul Bluetooth datele la o aplicatie Android, unde vor fi afisate intr-un format user-friendly.

Hardware Design

Lista de piese:

Denumire Cantitate
HC-05 Bluetooth Module 1
Microcontroller ATMega 1
SEN-11574 (senzor puls) 1
Modulul SNS-MQ135 (calitate aer) 1
Senzor brick pentru temperatura 1

Schema electrica

Am folosit un modul echivalent de la SPARKFUN pentru senzorul de puls, intrucat nu am gasit nicio biblioteca Eagle/schematic Eagle cu senzorul meu. Am notat in schema de mai jos ce reprezinta fiecare componenta.

Software Design

Mediu de dezvoltare

Biblioteci 3rd-party

Algoritmi and stuff

Surse si functii implementate

La nivelul aplicatiei Android, prin UART nu primesc pachete de dimensiune standard. Pur si simplu vin niste bytes, pe care eu trebuie sa ii incapsulez si sa ii trimit thread-ului de UI care ii parseaza si ii afiseaza. Practic, totul functioneaza dupa urmatorul mecanism:

int bytes_recv = 0;
receive_bytes(buffer); //un pachet de orice dimensiune
while (i < end(buffer) && buffer[i] != 'c') continue; //caut secventa de final a payload-ului
send_to_ui_thread(buffer[1:i]); //trimit thread-ului de UI toti acei bytes pana la secventa de final
for (j = i; j < length(buffer); i++)
{
     buffer[j-i] = buffer[j]; // copiez acei bytes pe care nu i-am trimis la inceputul buffer-ului
}
La nivelul parserului, pur si simplu ma uit dupa secventele delimitate de litera ''a'', apoi ''b'' si, respectiv, ''c''.

Rezultate Obţinute

Click on first image(only pulse wave - air quality and temperature disabled):

Concluzii

A fost un proiect interesant, din care am invatat lucruri multiple. Cel mai mult mi-a luat sa-mi dau seama, spre exemplu, ca daca receptionez eu date gresite, nu e necesermante obligatoriu sa fac eu o greseala in software. Conform principiului GARBAGE IN ~ GARBAGE OUT, senzorul poate fi vinovat de datele pe care le vizualizezi (in cazul meu, trebuia sa tin senzorul foarte fix si sa pun o folie de vinilin peste suprafata lui, pentru ca particulele de transpiratie - in mod surprinzator, daca strangi cu manseta degetul mai tare, transpiri - sa nu perturbe semnalul). Personal, sunt intersant de zona IoT si in mod particular de aplicatii in lumea medicala, iar acest proiect a fost un “good starting point”. Sper sa continui mai departe cu genul acesta de activitati si sa avansez cat mai mult :).

Download

Aplicatia Android –>bluetoothchat.zip

Sursele (C) pentru uC –> shs_tstoican.zip

Jurnal

One does not simply finish a project…

Bibliografie/Resurse