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

3 Commenti

  1. Salve, vorrei sapere se il sensore รจ il max30100 o il max30102 e se รจ possibile acquistare il modulo giร  modificato come da articolo per l'utilizzo con resistori di pull-up esterni

Lascia un commento

Il tuo indirizzo email non sarร  pubblicato.

Menu