Sommario:

Cardiofrequenzimetro IOT (ESP8266 e app Android): 5 passaggi
Cardiofrequenzimetro IOT (ESP8266 e app Android): 5 passaggi

Video: Cardiofrequenzimetro IOT (ESP8266 e app Android): 5 passaggi

Video: Cardiofrequenzimetro IOT (ESP8266 e app Android): 5 passaggi
Video: It's Easy to Connect the Mi WiFi Extender Pro 2024, Dicembre
Anonim
Image
Image

Come parte del mio progetto dell'ultimo anno, volevo progettare un dispositivo che monitorasse la tua frequenza cardiaca, archiviasse i tuoi dati su un server e ti avvisasse tramite notifica quando la tua frequenza cardiaca era anormale. L'idea alla base di questo progetto è nata quando ho provato a creare un'app fit-bit che avvisa un utente quando ha un problema cardiaco, ma non sono riuscito a trovare un modo per utilizzare le informazioni in tempo reale. Il progetto ha quattro parti principali compreso il circuito fisico per la misurazione del battito cardiaco, un modulo Wi-Fi ESP8266 con codice di elaborazione del segnale, il server per la memorizzazione del codice e un'app Android per la visualizzazione della frequenza cardiaca.

Un video che descrive in dettaglio il circuito fisico può essere visto sopra. Tutto il codice per il progetto può essere trovato sul mio Github.

Passaggio 1: il circuito

Il circuito
Il circuito

Esistono due metodi principali per misurare il battito cardiaco, ma per questo progetto ho deciso di utilizzare la fotopletismografia (PPG) che utilizza una sorgente di luce infrarossa o rossa che viene rifratta attraverso i primi strati della pelle. Un fotosensore viene utilizzato per misurare la variazione dell'intensità della luce (quando il sangue scorre attraverso un vaso). I segnali PPG sono incredibilmente rumorosi, quindi ho usato un filtro passa banda per filtrare le frequenze specifiche richieste. Un cuore umano batte tra 1 e 1,6 Hz di frequenza. L'amplificatore operazionale che ho usato era l'LM324 che aveva il miglior offset di tensione di tutti gli amplificatori operazionali a mia disposizione. Se stai ricreando questo progetto, un amplificatore operazionale di precisione sarebbe una scelta molto migliore.

È stato utilizzato un guadagno di soli due perché la tolleranza di tensione massima sull'ESP8266 è 3,3 V e non volevo danneggiare la mia scheda!

Segui il circuito sopra e prova a farlo funzionare su una breadboard. Se non hai un oscilloscopio a casa puoi collegare l'uscita a un Arduino e tracciarlo, ma assicurati che la tensione non sia superiore alla tolleranza dell'arduino o del microcontrollore.

Il circuito è stato testato su una breadboard ed è stato osservato un cambiamento nell'uscita quando un dito è stato posizionato sul LED e sul fototransistor. Ho quindi deciso di saldare insieme la scheda che non è stata mostrata nel video.

Passaggio 2: il codice di elaborazione del segnale e le comunicazioni del server

Image
Image
Il codice di elaborazione del segnale e le comunicazioni del server
Il codice di elaborazione del segnale e le comunicazioni del server

Ho deciso di utilizzare l'IDE Arduino su ESP8266 perché è così facile da usare. Quando il segnale è stato tracciato era ancora molto rumoroso, quindi ho deciso di ripulirlo con un filtro a media mobile FIR con un numero di campioni di dieci. Ho modificato un programma Arduino di esempio chiamato "smoothing" per farlo. Ho sperimentato un po' per trovare un modo per misurare la frequenza del segnale. Gli impulsi erano di lunghezza e ampiezza variabili a causa del cuore che aveva quattro diversi tipi di impulsi e delle caratteristiche dei segnali PPG. Ho scelto un valore medio noto che il segnale ha sempre incrociato come punto di riferimento per ogni impulso. Ho usato un buffer ad anello per determinare quando la pendenza del segnale era positiva o negativa. La combinazione di questi due mi ha permesso di calcolare il periodo tra gli impulsi quando il segnale era positivo ed era uguale a un valore specifico.

Il software ha prodotto un BPM abbastanza impreciso che non poteva essere effettivamente utilizzato. Con ulteriori iterazioni si poteva progettare un programma migliore, ma a causa dei limiti di tempo questa non era un'opzione possibile. Il codice lo trovi nel link sottostante.

Software ESP8266

Passaggio 3: il server e la comunicazione dei dati

Il server e le comunicazioni dati
Il server e le comunicazioni dati

Ho deciso di utilizzare Firebase per archiviare i dati in quanto è un servizio gratuito ed è molto facile da usare con le app mobili. Non esiste un'API ufficiale per Firebase con ESP8266, ma ho scoperto che la libreria Arduino ha funzionato molto bene.

C'è un programma di esempio che può essere trovato sulla libreria ESP8266WiFi.h che ti permette di connetterti a un router con l'SSID e la Password. Questo è stato utilizzato per connettere la scheda a Internet in modo da poter inviare i dati.

Sebbene l'archiviazione dei dati sia stata eseguita facilmente, ci sono ancora una serie di problemi con l'invio delle notifiche push tramite una richiesta HTTP POST. Ho trovato un commento su Github che utilizzava un metodo legacy per farlo tramite la messaggistica cloud di Google e la libreria HTTP per ESP8266. Questo metodo può essere visto nel codice sul mio Github.

Su Firebase ho creato un progetto e ho utilizzato l'API e le chiavi di registrazione nel software. La messaggistica cloud di Firebase è stata utilizzata con l'app per inviare notifiche push all'utente. Quando le comunicazioni sono state testate, i dati potrebbero essere visualizzati nel database mentre ESP8266 era in esecuzione.

Passaggio 4: l'app per Android

L'app per Android
L'app per Android

Un'app Android molto semplice è stata progettata con due attività. La prima attività ha eseguito l'accesso o la registrazione dell'utente utilizzando l'API Firebase. Ho ricercato la scheda tecnica e ho trovato vari tutorial su come utilizzare Firebase con un'app mobile. L'attività principale che mostrava i dati dell'utente era un ascoltatore di eventi in tempo reale, quindi non c'era un ritardo notevole nelle modifiche al BPM dell'utente. Le notifiche push sono state eseguite utilizzando la messaggistica cloud Firebase menzionata in precedenza. Ci sono molte informazioni utili sul foglio dati di Firebase su come implementarlo e l'app può essere testata inviando notifiche dalla dashboard sul sito Web di Firebase.

Tutto il codice per le attività e le modalità per la messaggistica in cloud si trovano nel mio Github Repository.

Passaggio 5: conclusione

Ci sono stati alcuni problemi importanti con la misurazione del BPM dell'utente. I valori variavano notevolmente e non erano utilizzabili per determinare la salute di un utente. Questo si riduceva al codice di elaborazione del segnale implementato su ESP8266. Dopo ulteriori ricerche ho scoperto che un cuore ha quattro impulsi diversi con periodi variabili, quindi non c'era da meravigliarsi se il software era impreciso. Un modo per combattere questo sarebbe prendere una media dei quattro impulsi in una matrice e calcolare il periodo del cuore su quei quattro impulsi.

Il resto del sistema era funzionante, ma questo è un dispositivo molto sperimentale che volevo costruire per vedere se l'oggetto era possibile. Il codice legacy utilizzato per inviare notifiche push sarà presto inutilizzabile, quindi se lo stai leggendo alla fine del 2018 o alla fine sarebbe necessario un metodo diverso. Questo problema si verifica solo con l'ESP, quindi se si desidera implementarlo su un Arduino compatibile con WiFi non sarebbe un problema.

Se hai domande o problemi, non esitare a inviarmi un messaggio su Instructables.

Consigliato: