Libreria Arduino per il monitoraggio della frequenza cardiaca con pulsossimetro

Libreria Arduino per il monitoraggio della frequenza cardiaca con pulsossimetro

Libreria Arduino per il monitoraggio della frequenza cardiaca con pulsossimetro

Uno dei parametri monitorati nel mio progetto di gestione del sonno

E' il polso. per misurarlo Ho sviluppato un dispositivo basato sul comportamento dell'emoglobina e dell'ossiemoglobina rispetto a diverse lunghezze d'onda della luce. Fondamentalmente si tratta di misurare quanta luce di un certo tipo è in grado di attraversare o di essere riflessa in una zona del corpo ben irrigata. La frequenza con cui si verifica un ciclo completo di questo fenomeno permette di misurare la Pulso.

Sommario

    Nella fase di progettazione e test del dispositivo di misurazione del polso Ho sviluppato alcuni piccoli programmi per aiutarmi a verificare che l'assemblaggio fosse corretto. Per prima cosa ho scritto il codice qui sotto, che prendeva di volta in volta i valori misurati (almeno ogni MAXIMUM_MEASUREMENT_TIME e al massimo ciascuno MINIMUM_MEASUREMENT_TIME) quando variavano un minimo tra uno e il precedente (il valore che corrisponde a MINIMO_SIZE) e il monitorato da un computer con un'applicazione Python per poterli analizzare in seguito.

    Una volta regolati i valori (iniziando con misurazioni molto dense) ho ottenuto una raccolta di valori dal file pulsossimetro nel tempo ho potuto rappresentare graficamente utilizzando un foglio di calcolo, Libre Office Calc de LibreOffice, specifica.

    grafico delle misurazioni del pulsossimetro con

    Con i dati raccolti, come rappresentati nell'immagine sopra, l'operazione successiva è stata quella di determinare se la densità di valori consentisse di calcolare in modo affidabile ma "economico" (non campionando più dei dati necessari) il valore del Pulso; Come si può vedere nel grafico sottostante, le misure adottate sembrano servire ad ottenere i risultati che è ragionevole aspettarsi.

    .

    misurazione della presenza di ossiemoglobina nel tempo con pulsossimetro

    Successivamente, con le informazioni provenienti dal campionamento dei dati, è stato necessario sviluppare un algoritmo in grado di misurare la frequenza del polso. Attenendoci al grafico che, per semplicità, si assume rappresenti un layout simile a quello Complesso QRS, la cosa più semplice sembra essere misurare i tempi tra le parti più prominenti, con valori più alti (che corrisponde alla zona qRs di depolarizzazione dei ventricoli), scartando la zona più piatta e "rumorosa", quindi più difficile misurare. La soluzione adottata, che corrisponde al codice di test riportato di seguito, funziona secondo la seguente procedura:

    • Rilevare rispettivamente l'area da misurare per occuparsi solo dei picchi di valore qRs e buttare via la valle. Per fare questo si potrebbero misurare valori superiori ad una certa costante, ma c’è il rischio che un individuo e/o le circostanze possano, seppur proporzionalmente, alzare o abbassare i valori. Per evitare ciò, un valore nell'area viene considerato maggiore di quello che supera il valore medio di un certo coefficiente. In questo modo la misura è sensibilmente autocalibrata e può essere ulteriormente aggiustata mettendo a punto il coefficiente, che nel mio caso ho ottenuto sperimentalmente durante le prove.

      Scegliere i valori della zona discendente per la misurazione (Rs) del picco qRs, il più vicino possibile al massimo della curva. Per sapere che si sta abbandonando la zona ascendente è sufficiente verificare che un nuovo valore sia inferiore al precedente e verificare che il valore cercato non sia stato ancora trovato poiché, in generale, ci sono più valori nella zona discendente zona di qRs a seconda della densità di campionamento. Per cronometrare l'impulso viene memorizzato il valore dell'istante in cui è stato trovato il punto (i millisecondi restituiti da millis ()) e lo confronta con quello successivo.

      Per garantire che il valore misurato sia maggiore nella zona discendente della curva più alta, viene utilizzata una variabile booleano (misura_impulso in questo esempio e misurazione_pulse_attiva nella libreria) che si attiva quando si entra nella zona ascendente della curva maggiore e si disattiva una volta trovato il primo valore discendente che è quello temporizzato.

      Poiché si è soliti rappresentare la durata dell'impulso in battiti al minuto (ppm), il valore del tempo tra gli impulsi ottenuto viene corretto calcolando dividendo il tempo totale della rappresentazione (un minuto, 60000 millisecondi) per l'intervallo ottenuto da sottraendo i millisecondi attuali (del valore corrente) tra quelli precedentemente cronometrati.

      Per evitare false misurazioni (come ad esempio il dispositivo che misura nel vuoto), si verifica che il risultato sia compreso tra i valori massimo e minimo prima di darlo per scontato. Sebbene si consideri mediamente che un valore normale per un adulto sano a riposo sia compreso tra 60 e 100 ppm, di seguito sono riportati i valori ammissibili, è facile trovare 40 ppm in un atleta a riposo, fino a 200 ppm durante esercizio fisico intenso e superiore a 100 ppm in adulti sedentari in stati di eccitazione, proprio un fattore interessante per il progetto di gestione del sonno il che mi porta a sviluppare questo dispositivo di misurazione del polso. Per questo motivo è opportuno allentare molto questi valori affinché non si perdano gli estremi, che potrebbero appunto mostrare aspetti rilevanti.

      Il nuovo valore medio viene calcolato diminuendo la rilevanza della media attuale in base al numero di valori campionati e viene aggiunto l'ultimo valore, anch'esso ponderato con un coefficiente che lo riduce tanto più quanti sono i valori misurati finora .

    Infine, utilizzando l'algoritmo descritto prima, ho sviluppato la libreria per calcolare l'impulso rilevando la presenza del emoglobina o alla ossiemoglobina (a seconda della lunghezza d'onda della luce utilizzata) dal codice seguente.

    La libreria prevede che la funzione di campionamento venga chiamata periodicamente monitor_impulso() per calcolare la pulsazione, consultabile con la funzione ultimo_impulso() o con la funzione impulso_medio() il polso medio. Oltre ad essere una risorsa limitata, ho escluso di ricorrere alle interruzioni perché non avevo bisogno di valori immediati ma piuttosto sostenuti nel tempo per monitorare l'andamento Pulso nel mio progetto di gestione del sonno

    . In ogni caso, dalle prove che ho fatto, non sembra essere necessario; dal dispositivo o dal comportamento del Pulso, il campionamento ad una certa frequenza offre informazioni sufficienti e non si ottiene molto di più (rilevante) aumentandola, né è possibile diminuirla molto senza perdere dati rilevanti per il calcolo; nelle prime versioni del codice per monitorare la lettura del file pulsossimetro Scoprii che non era necessario attenersi ad un tempo massimo di misurazione poiché, se si consideravano correttamente le variazioni dei valori successivi, era molto vicino al minimo.

    Il seguente programma di esempio mostra come utilizzare la libreria precedente per misurare il file Pulso con uno pulsossimetro. Oltre a istanziare la classe Pulso monitoraggio del livello di ossiemoglobina/emoglobina e con una periodicità minore il valore del Pulso calcolato e medio.

    Per garantire che le misurazioni siano rilevanti, viene programmata un'attesa prima di visualizzare qualsiasi valore. Poiché il valore potrebbe essere errato (ad esempio se l'utente rimuove il dispositivo), i valori vengono visualizzati solo se rientrano nell'intervallo di quelli considerati validi.

    Invia commento

    Potresti aver perso