Nel precedente articolo “Progetto di un sistema di monitoraggio IoT della frequenza cardiaca e della temperatura corporea - Parte 3” abbiamo fatto un riepilogo del progetto e descritto in dettaglio i componenti del sistema di monitoraggio della frequenza cardiaca e della temperatura corporea. In questo articolo vedremo come realizzare il prototipo del nostro progetto e creeremo lo sketch con il codice del progetto mediante l’IDE di Arduino.
Realizzazione del prototipo
Seguendo lo schema elettrico di Figura 1, su una breadboard sperimentale realizzate i collegamenti dei componenti utilizzando dei jumper.
Elenco dei componenti
U1 Scheda Arduino UNO
U2 Sensore LM35
U3 Sensore di pulsazioni cardiache
U4 Modulo WiFi ESP-01
R1 Resistore 10 Kohm
P1 Pulsante
N. 2 Morsettiere 3 posti
N. 1 Morsettiera 2 posti
BAT1 Pacco batterie 5xAAA 1,5 V
Jumper
Piastra sperimentale
Inserite nella board le tre morsettiere, il pulsante P1 e il resistore R1. Utilizzate i pin dell’ESP-01 per i collegamenti con gli altri componenti. Per utilizzare l’LM35 per la misura della temperatura corporea, dovrete saldare tre conduttori abbastanza lunghi ai tre pin del sensore LM35 isolandoli con spezzoni di tubetto termo restringente o con nastro isolante per evitare cortocircuiti accidentali dei pin fra loro. Se invece della temperatura corporea volete utilizzare il sensore per misurare la temperatura ambiente, potete collegare i tre pin direttamente alla morsettiera CN3. Non collegate ancora il sensore di frequenza cardiaca alla morsettiera CN2. Preparate un pacco batterie con 5 batterie AAA da 1,5V, che collegherete al connettore di alimentazione CN1 in fase di collaudo. In Figura 2 il prototipo realizzato su breadboard.
Installazione del software
Installate nel computer l’IDE di Arduino scaricandolo dal sito ufficiale www.arduino.cc (in questo articolo si fa riferimento alla versione software Arduino 1.8.15).
Installazione del firmware dell’ESP8266
Dall’IDE di Arduino installate la scheda ESP8266. Da File > Impostazioni, alla voce “URL aggiuntive per il Gestore schede” inserite il link http://arduino.esp8266.com/stable/package_esp8266com_index.json separandolo con una virgola da link che avete inserito in precedenza. Poi, con Strumenti > Scheda > Gestore Schede, digitate “esp8266” nella barra di ricerca. Selezionate e installate il firmware di gestione della scheda ESP8266 “ESP8266 by ESP8266 Community“.
Installazione della libreria PulseSensorPlayground
Per la gestione del sensore di frequenza cardiaca utilizzeremo la libreria “Pulse rate sensor” che potete scaricare da questo sito:
https://github.com/WorldFamousElectronics/PulseSensorPlayground. In fondo alla pagina cliccate su “PulseSensor Playground”, poi su “Source code (zip)” per avviare il download del file “PulseSensorPlayground-1.6.1.zip” della libreria. Decomprimete il file “PulseSensorPlayground-1.6.1.zip” che avete scaricato e rinominate la cartella ottenuta “PulseSensorPlayground-1.6.1” in “PulseSensorPlayground”. Copiate la cartella “PulseSensorPlayground” nella cartella “libraries” contenuta nella cartella del programma d’installazione di Arduino, ad esempio “C:\Program Files (x86)\Arduino\libraries”.
Approfondiamo questa importante libreria!
Riteniamo propedeutico descrivere le funzioni della libreria che ritroveremo nel codice del progetto. La libreria PulseSensorPlayground è stata creata in modo da renderla facile da usare e da personalizzare. Di seguito, viene descritto sinteticamente come funziona PulseSensorPlayground attraverso una sintetica descrizione delle sue funzioni che spiegheremo nei dettagli nel prossimo articolo.
PulseSensorPlayground
Si inizia con la creazione di un'istanza che possa accedere a tutte le funzioni di PulseSensorPlayground:
begin()
Inizia a leggere e ad elaborare i dati dal sensore di pulsazioni.
pause()
Spegne il timer e interrompe la lettura e l'elaborazione dei dati del sensore di pulsazioni. Questa funzione è utile se si devono eseguire altre operazioni sensibili alla temporizzazione. Restituisce “true” in caso di successo.
resume()
Attiva il timer e inizia a leggere ed elaborare i dati del sensore di pulsazioni. Questa funzione viene utilizzata dopo aver chiamato pause() per riprendere Pulse Sensor. Restituisce “true” in caso di successo.
isPaused()
Ritorna “true” mentre il sensore di pulsazioni è in pausa, “false” mentre il sensore di pulsazioni è in funzione.
sawNewSample()
Restituirà “true” se è stato letto un nuovo campione. Type = boolean.
analogInput(int)
Imposta il pin a cui è collegato il sensore di pulsazioni.
blinkOnPulse(int)
Imposta il pin collegato al led che si accenderà in corrispondenza di un battito cardiaco.
fadeOnPulse(int)
Imposta pin “fade” (predisposto per la funzionalità PWM) in modo che l’intensità del led corrisponda al battito cardiaco.
setSerial(Serial)
La libreria PulseSensorPlayground non trasmette in uscita automaticamente i dati seriali. Quindi, se si desidera ottenere i dati di impulsi seriali, occorre includere questa funzione.
setOutputType(int)
Per impostazione predefinita, Playground visualizzerà i dati seriali nel formato SERIAL_PLOTTER (con Arduino), ma è possibile sostituirlo con PROCESSING_VISUALIZER (con Processing).
setThreshold(int)
Imposta un valore di soglia che il segnale del sensore di pulsazioni deve superare quando aumenta la frequenza degli impulsi. La regolazione può essere utile per neutralizzare il rumore.
getLatestSample()
Restituisce l'ultimo valore analogico letto dal sensore di pulsazioni. Type = int.
getBeatsPerMinute()
Restituisce gli ultimi battiti al minuto. Type = int.
getInterBeatIntervalMs()
Restituisce l'ultimo intervallo inter-beat (IBI) in millisecondi. Type = int.
getPulseAmplitude()
Restituisce l'ampiezza dell'ultimo impulso. Il valore viene calcolato dall'ultimo picco dell'onda dell'impulso meno l'ultima depressione dell'onda dell'impulso. Type = int.
getLastBeatTime()
Restituisce il numero del campione quando è stato rilevato l'ultimo battito. Il numero del campione si basa sulla funzione millis() e ha una risoluzione di 2 ms. Type = unsigned long.
sawStartOfBeat()
Restituisce “true” se è stato rilevato un nuovo battito cardiaco. Type = boolean.
isInsideBeat()
Restituisce “true” nel momento in cui un'onda del segnale del battito cardiaco misurata è al di sopra del valore di soglia impostato dalla funzione setThreshold() e “false” è al di sotto della soglia. Type = boolean.
outputSample()
Invia l'ultimo campione sulla porta seriale. Se lo sketch richiede di tracciare campioni, dovrebbe chiamare questa funzione ogni tanto.
outputBeat()
Invia gli ultimi valori BPM e IBI sulla porta seriale.
outputToSerial(char, int)
Viene utilizzata esclusivamente con il visualizzatore Pulse Sensor Processing.
Utilizzo degli interrupt del sensore di pulsazioni
E’ possibile utilizzare gli interrupt nel codice del sensore di pulsazioni per ottenere dati della frequenza cardiaca (Beats Per Minute (BPM) e Inter-Beat Interval (IBI) molto precisi). Nello sketch devono essere inserite queste due righe:
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2003 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.