Costruiamo un saturimetro fai da te

L’epidemia di Coronavirus che abbiamo vissuto e in un certo senso stiamo ancora vivendo, ha fatto arrivare sulla bocca di tutti termini come polmonite interstiziale, ventilatore polmonare, terapia intensiva e saturimetro; cose che quotidianamente la stampa ha portato nelle nostre case e che fortunatamente sono sempre state estranee a chi non fosse un addetto ai lavori o un ammalato coinvolto direttamente. Ci ha fatto conoscere aspetti che probabilmente non avremmo mai voluto conoscere, ma come ogni accadimento della vita, anche il COVID-19 può essere l’occasione per imparare e fare tesoro di quanto abbiamo visto e sentito nostro malgrado. Vista l’attualità della cosa, abbiamo pensato di dare un volto a uno degli apparati clinici ormai in voga, per il ruolo che ha nel monitorare lo stato di salute di un paziente colto da quella che sembra essere una delle principali complicanze del COVID-19, ossia l’insufficienza respiratoria: intendiamo il saturimetro, che è un dispositivo medico in grado di rilevare il livello di ossigenazione del sangue e quindi la qualità degli scambi gassosi e l’efficienza dell’apparato respiratorio; il saturimetro elettronico funziona analizzando la trasparenza dei vasi periferici del polpastrello del dito, investito da un raggio di luce di cui si rileva il riflesso o l’attraversamento del dito. La qualità della radiazione giunta al diodo rivelatore di luce fornisce indicazioni sul tenore di ossigeno, giacché più il sangue è scuro e meno è ossigenato e, viceversa, più è chiaro (rosso vivo) e maggiore è la percentuale di ossigeno.

La saturazione si esprime in percentuale e quella massima è ovviamente è il 100%, mentre sono buoni valori sopra 92-93%. Naturalmente la percentuale rilevabile dipende, oltre che dallo stato dei polmoni, anche dalla qualità dell’aria inspirata e dalla presenza di fattori che possono ridurre la disponibilità dell’ossigeno presente nell’aria.

Il progetto

Vediamo dunque di cosa si tratta, analizzando il dispositivo che vi proponiamo: per realizzare il saturimetro che vi proponiamo, che ovviamente è elettronico, ci siamo avvalsi di un misuratore di ossigenazione del sangue e rilevatore del battito cardiaco a riflessione di luce su breakout board, basato sull’integrato MAX30100; per l’esattezza parliamo di un sensore per “pulsossimetria” ossia in grado di misurare, in maniera non invasiva e combinata, la quantità di emoglobina legata all’ossigeno nel sangue ed anche la frequenza delle pulsazioni (battito) cardiache attraverso la variazione del calibro dei vasi sanguigni.

Il sensore comunica via I²C-Bus i dati sulla saturazione ed anche quelli sulla pulsazione del sangue (che permetteranno di tracciare un grafico tipo elettrocardiogramma, nonché di desumere la frequenza del battito cardiaco) quindi abbiamo utilizzato una scheda Arduino per acquisire tali informazioni, elaborarle e trasformarle in un formato adatto a comandare un piccolo display IPS sul quale vedremo in alto un tracciato tipo ECG (elettrocardiogramma) sia pure non completo come quello ottenibile da un elettrocardiografo, e in basso la frequenza del battito (BPM, ossia battiti per minuto o, se preferite i termini anglosassoni, beats per minute…) a sinistra e la percentuale di saturazione dell’ossigeno, sulla destra.

Il rilevamento di ossigeno e battito

Il sensore della Maxim IC già montato su breakout board

Il sensore della Maxim IC già montato su breakout board

A differenza della gran parte dei sensori per saturimetria da applicare al polpastrello (che proiettano un raggio di luce sulla cute e rilevano l’illuminamento dalla superficie dell’unghia) questo trasduttore della Maxim IC funziona emettendo verso l’alto del chip la luce prodotta da due LED, uno rosso (luce rossa alla lunghezza d’onda di 660 nm) e l’altro infrarosso (emittente nell’infrarosso a 880 nm): appoggiandovi sopra il dito, una parte della luce penetrata in esso viene riflessa e l’ammontare della luce riflessa captato da un fotodiodo sulla stessa superficie da cui è emessa la luce combinata permette di determinare, sulla base della trasparenza e delle variazioni di trasparenza nel tempo sia l’andamento del flusso sanguigno, sia la percentuale di ossigeno in esso presente (la percentuale di emoglobina saturata dall’ossigeno).

Nello specifico, il segnale elettrico prodotto dal fotodiodo viene inviato ad uno stadio amplificatore low-noise e condizionatore del segnale, quindi ciò che ne risulta entra in un blocco di analog signal processing che permette di estrarre i dati sull’ossimetria e sul battito cardiaco. Quest’ultimo si ottiene analizzando le variazioni nell’andamento del flusso sanguigno attraverso la dilatazione e il restringimento dei vasi periferici determinati dalla pulsazione e dal rilascio dei ventricoli del cuore, che causano aumento e conseguente calo della pressione arteriosa.

Il componente Maxim dispone inoltre di una funzione di rilevamento della prossimità, per risparmiare energia e ridurre l’emissione di luce visibile quando il dito dell’utente non è sul sensore.

Il funzionamento del sensore MAX30100

Il funzionamento del sensore MAX30100

 

I segnali che vengono digitalizzati dal blocco signal processing diventano quindi numerici e sono inviati sul bus I²C, dal quale vengono letti dalla nostra Arduino Uno, il cui firmware, sfruttando una libreria specifica del sensore (chiamata MAX30100.h), può calcolare la frequenza cardiaca e la saturazione dell’ossigeno in valore percentuale.

I dati elaborati permettono di preparare i pacchetti di dati e i comandi con cui comandiamo poi il piccolo display OLED che sarà la nostra interfaccia utente, vale a dire il pannello sul quale vedremo il grafico dell’andamento della pressione del sangue (quindi l’effetto della pulsazione del cuore) la frequenza cardiaca e la saturazione rilevati dal sensore; il tutto aggiornato in tempo reale.

Il MAX30100 consente di impostare, attraverso il bus I²C e in fase di inizializzazione, il sample-rate e quindi il numero di campionamenti nell’unità di tempo che il converter analogico/digitale posto a valle dell’analog signal processor deve eseguire: una maggior frequenza determina un’analisi e una visualizzazione più accurata ma accresce il consumo di elettricità, mentre la riduzione della frequenza di campionamento (e perciò della precisione della misura) si traduce in una riduzione dei consumi; questo è apprezzabile e rappresenta un compromesso nelle applicazioni in cui si desidera realizzare un saturimetro portatile.

Il circuito al completo

Guardando lo schema di cablaggio vediamo che la breakout board su cui è montato il sensore Maxim si connette ad Arduino Uno mediante tre fili più la massa e l’alimentazione a 5V (prelevata rispettivamente da GND e il pin 5V della Arduino Uno); le tre linee sono SCL ed SDA del bus I²C e INT, ossia l’uscita di interrupt open-drain attiva a livello basso che segnala la disponibilità dei dati per la lettura. Sono open-drain anche le linee SDA ed SCL, ragion per cui è opportuno prevedere le resistenze di pull-up, che nella breakout board sono da 4,7 kohm ma terminanti sulla linea di alimentazione interna.

Le tre linee necessitano ciascuna di un resistore di pull-up da 4,7 kohm portato al positivo dei 5 volt, giacché la breakout board funziona a 5 volt, sebbene il MAX30100 operi fra 1,8 e 3,3V; questo perché a bordo della piccola scheda sono presenti i regolatori per il componente.

Per questa ragione, essendo Arduino Uno alimentata internamente a 5 volt ed avendo gli I/O funzionanti a tale tensione (ma comunque capaci di leggere livelli logici 1 di valore più basso) converrebbe rimuovere i resistori di pull-up interni e applicare quelli esterni terminanti sulla linea dei 5V di Arduino Uno, come mostra lo schema di cablaggio proposto in queste pagine.

Per visualizzare i parametri sulla frequenza cardiaca, la saturazione e il tracciato del battito cardiaco, ci siamo avvalsi di un display miniatura TFT/IPS da 1,44” di diagonale 128×128 pixel (l’area grafica è ampia 25,5×26,5mm, quindi praticamente quadrata) a interfaccia seriale a bus di tipo SPI.

Questo display riceve i dati da visualizzare preparati dallo sketch di Arduino Uno a partire da quelli ricevuti dal sensore MAX30100 e li visualizza.

Allo scopo il firmware inizializza gli I/O di Arduino Uno affinché funzionino come interfaccia SPI a quattro linee più reset.

Il display, essendo in tecnologia IPS LCD full-color, garantisce un ottimo contrasto, una profondità di colore eccellente e un ampio angolo di visione pari a ±80°.

La sua elettronica di controllo si basa sul collaudatissimo controller ST7735, dotato, appunto, di interfaccia dati SPI; la gestione firmware viene semplificata dall’apposita libreria Adafruit_ST7735.h.

L’alimentazione del modulo è a tensione compresa fra 3 e 5,5V e le connessioni avvengono mediante 8 piazzole poste sul lato inferiore, cui si possono saldare dei comuni pin strip per facilitarne le connessioni, giacché sono a passo 2,54 mm.

Il significato delle piazzole di connessione del display è il seguente:

GND = massa comune;
VCC = alimentazione positiva;
SCL = SPI clock;
SDA = SPI data line;
RES = reset;
DC = Data/command selection;
CS = Chip select signal, attivo a 0 logico;
BLK = comando backlight control.

Quest’ultima linea permette di accendere o spegnere la retroilluminazione e può essere lasciata aperta se non si desidera il backlight, mentre per accendere la retroilluminazione va posta a zero logico.

Il firmware

Bene, vediamo adesso di spendere qualche parola sullo sketch da caricare in Arduino Uno per far funzionare il nostro saturimetro; per esso abbiamo preso spunto a un’idea di Xtronical (www.xtronical.com/ColourHeartMonitor) che permette, oltre a quanto spiegato in queste pagine, anche di pilotare un cicalino piezo con elettronica per fargli emettere una nota ogni volta che viene rilevato il battito cardiaco, come se si stesse eseguendo un elettrocardiogramma. Il beep può essere utile ad esempio se utilizziamo lo strumento come monitor per attività sportiva.

Trovate lo sketch completo nel Listato 1; di esso notiamo l’inclusione delle librerie MAX30102.h per gestire la breakout board sensore, la MAX30102_PulseOximeter.h per impostare il range dello stesso, la Adafruit_GFX.h che è una libreria grafica per tracciare il diagramma cardiaco sul display e la Adafruit_ST7735.h per la comunicazione con il display stesso attraverso l’interfacciamento al controller ST7735.

Conclusioni

Bene, con questo riteniamo di avervi spiegato proprio tutto quello che serve per realizzare e utilizzare correttamente il saturimetro; oltre che in casa, come strumento di diagnosi fissa, potrete utilizzarlo nello sport all’aperto montandolo su un ditale in gomma, sostituendo Arduino Uno con una Arduino Micro o Nano da sistemare ad esempio in una custodia da mettere su un giubbino o applicata a una maglia (collegando il tutto con della piattina multifilare sottile) in modo da realizzare un vero e proprio cardiofrequenzimetro con saturimetro integrato, magari in grado di memorizzare i tracciati dell’attività fisica svolta in una sessione di allenamento.

Download

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Menu