Guida n. 90
Tre elettrodi, un modulo AD8232 e Arduino UNO: il tracciato del cuore sul Plotter seriale e una stima dei battiti al minuto. Per imparare, non per controllare la salute.
A cura di Ada Intelisano · redazione tecnica di informaticait.it
- L'AD8232 amplifica e filtra il debolissimo segnale elettrico del cuore; Arduino lo legge su A0.
- Non è un dispositivo medico: niente diagnosi, niente controlli sulla salute. Per i dubbi si va dal medico.
- Elettrodi addosso solo con Arduino a batteria o collegato a un portatile con il caricatore staccato.
- Il Plotter seriale disegna il tracciato; i battiti al minuto calcolati sono indicativi.
A ogni battito il cuore produce un impulso elettrico che arriva, debolissimo, fino alla pelle. L'AD8232 lo amplifica e lo ripulisce, Arduino lo disegna sul Plotter seriale. Serve a capire come funziona un elettrocardiogramma, e a niente di più.
- Non è un dispositivo medico. SparkFun e DFRobot lo scrivono nelle schede dei loro moduli: non serve a fare diagnosi né a curare. Quindi niente controlli sulla salute tua o di altri, e niente notizie sul cuore cercate nel tracciato: per qualsiasi dubbio si va dal medico. Analog Devices ricorda che un apparecchio medico vero segue norme di sicurezza apposite.
- Elettrodi addosso solo con tutto a batteria: Arduino collegato a un portatile con il caricatore staccato, oppure a una pila da 9 V. Mai un PC fisso, mai il portatile in carica, nessun altro cavo verso qualcosa che sta nella presa (monitor, hub USB con alimentatore).
- Perché: con il gel gli elettrodi fanno un ottimo contatto con la pelle. Con il circuito collegato alla rete a 230 V di solito non succede niente, ma in rari casi si crea un anello di corrente con la rete e chi porta gli elettrodi ne fa parte. Per questo SparkFun consiglia la batteria e M5Stack stampa sul suo modulo ECG di usare un'alimentazione isolata.
1Il materiale
- il modulo SparkFun SEN-12650, che arriva senza pin: salda una fila di sei pin sui fori da GND a SDN (guida n. 70). Con lui il cavo SparkFun CAB-12970 e tre elettrodi monouso;
- oppure il kit AD8232: stessa scheda e stessi pin, cavo ed elettrodi nella confezione;
- Arduino UNO con il cavo USB, cinque cavetti femmina-maschio, un portatile che funzioni a batteria.
2Come funziona e come si collega
È un ECG a una derivazione: si misura la tensione tra braccio destro (RA) e sinistro (LA); il terzo elettrodo (RL, gamba destra) serve all'AD8232 per tenere basso il disturbo. La scheda SparkFun segue lo schema «cardiac monitor» di Analog Devices: segnale 1100 volte più grande, solo frequenze tra 0,5 e 40 Hz. OUTPUT oscilla attorno a 1,65 V, per Arduino circa 340 (calcolo nostro).
- 3.3v → 3.3V, mai al 5V: l'AD8232 lavora da 2 a 3,5 V e regge al massimo 3,6 V.
- LO+ → A1, LO− → A2: salgono a 3,3 V quando si stacca LA (LO+) o RA (LO−). Un pin digitale dell'UNO vede di
sicuro un «alto» solo da 3 V in su (datasheet ATmega328P), quindi li leggiamo con
analogRead: circa 675 (calcolo nostro) con l'elettrodo staccato, quasi 0 con l'elettrodo attaccato. - SDN resta libero (una resistenza sulla scheda tiene acceso il chip). Mai a un pin dell'UNO: i suoi 5 V superano il massimo del chip.
3Lo sketch
// Il segnale del cuore con l'AD8232 e Arduino UNO. Solo per imparare: NON è un // dispositivo medico. Elettrodi addosso solo con tutto a batteria. #include <Arduino.h> const bool HA_LO = true; // false per il DFRobot SEN0213 (LO+ e LO- non escono) const byte OGNI = 10; // una riga al Plotter ogni 10 letture (IDE 1.8: metti 1) const int SALTO = 100; // quanto il picco R deve superare la media (si regola) long somma; // media mobile delle letture, moltiplicata per 64 unsigned long ultimaLettura, ultimoBattito; bool sopra = false; // il segnale è già sopra la soglia? int bpm = 0, massimo = 0; byte contate = 0; void setup() { Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); // il LED L lampeggia a ogni battito somma = analogRead(A0) * 64L; ultimaLettura = micros(); } void loop() { if (micros() - ultimaLettura < 4000) return; // una lettura ogni 4 ms ultimaLettura += 4000; int valore = analogRead(A0); // OUTPUT del modulo somma += valore - somma / 64; // la media segue la linea di base int soglia = somma / 64 + SALTO; unsigned long adesso = millis(); // LO+ (A1) e LO- (A2): circa 675 se un elettrodo è staccato, quasi 0 se è attaccato if (HA_LO && (analogRead(A1) > 400 || analogRead(A2) > 400)) { valore = soglia = bpm = 0; // sul Plotter: linea piatta a zero } else if (!sopra && valore > soglia) { // picco R: un battito sopra = true; unsigned long intervallo = adesso - ultimoBattito; if (intervallo > 300) { // sotto 0,3 s non è un nuovo battito if (intervallo < 2000) bpm = 60000UL / intervallo; ultimoBattito = adesso; } } else if (valore < soglia) { sopra = false; } digitalWrite(LED_BUILTIN, adesso - ultimoBattito < 100); // acceso per 0,1 s // al Plotter la lettura più alta di ogni gruppo: così il picco R non si perde if (contate == 0 || valore > massimo) massimo = valore; if (++contate < OGNI) return; contate = 0; Serial.print(F("ECG:")); Serial.print(massimo); Serial.print(F(",Soglia:")); Serial.print(soglia); Serial.print(F(",BPM:")); Serial.println(bpm); }
Arduino legge OUTPUT 250 volte al secondo: oltre la soglia (SALTO punti sopra la media) c'è un picco R
e il LED L si accende. Al Plotter va una riga ogni dieci letture perché quello dell'IDE 2, lo dice il suo codice, mostra solo le
ultime 50 righe: due secondi. Con il vecchio IDE 1.8 (500 righe) metti OGNI = 1.
4Dove vanno gli elettrodi
SparkFun indica due posizioni: avambracci e coscia destra (A) oppure petto vicino alle spalle e fianco destro sopra l'anca (B); più sono vicini al cuore, meglio è. Sul cavo SparkFun RA è nero, LA blu, RL rosso: gli altri cavi hanno altri colori, guarda le sigle.
- Aggancia i bottoni prima di attaccare gli elettrodi.
- Pelle pulita e asciutta: i peli non conducono.
- Elettrodi nuovi a ogni prova: usati una volta non fanno più un buon contatto.
- Controlla che RA e LA siano dalla parte giusta del cuore.
- Stai fermo e rilassato, respira normalmente.
5Guarda il tracciato
Caricatore staccato, sketch caricato, elettrodi attaccati: apri il Plotter seriale (menu Strumenti o pulsante in alto a destra) a 115200 baud.
L'onda P è l'impulso che parte dagli atri. Nel complesso QRS, con il picco R, i ventricoli spingono il sangue: è il «bip» dei monitor, scrive SparkFun. L'onda T arriva quando si rilassano.
- Linea piatta a zero: un elettrodo è staccato.
- Tracciato confuso: ti muovi, tendi i muscoli o respiri forte; prova a spostare un po' gli elettrodi.
- Molti disturbi fitti: DFRobot consiglia di toccare qualcosa di metallo (elettricità statica).
6I battiti al minuto: un esercizio
Fra due picchi R passa un battito: 800 millesimi di secondo
fanno 60 000 ÷ 800 = 75 al minuto. È il conto della colonna BPM (scarta picchi più vicini di 0,3 s e
intervalli oltre i 2 s). La soglia va a metà dei picchi R, sopra le onde T: abbassa o alza SALTO finché è così.
- Il numero è indicativo: movimenti, onde T alte o un elettrodo che si stacca lo falsano. Serve a capire come si conta un ritmo: non confrontarlo con un apparecchio medico e non trarne conclusioni.
7Gli altri moduli
- Kit AD8232: stessa scheda, stessi pin, stesso sketch. Bottoni senza sigle? Con un tester: nello schema SparkFun la punta dello spinotto è RL, l'anello LA, il corpo RA.
- DFRobot SEN0213 (cavo ed elettrodi inclusi): da 3,3 a 6 V, consigliati 5 V. VCC al 5V, GND al GND, A ad
A0; LO+ e LO− non escono sul connettore, quindi
HA_LO = false.
- Confronta le posizioni A e B, poi stringi un pugno.
- Con la pila da 9 V guarda il LED L.
- l'AD8232 amplifica e filtra il segnale;
- due picchi R danno una stima dei battiti;
- elettrodi addosso solo a batteria.
Prodotti utili
Altre guide
- Codice colori delle resistenze e tolleranze
- MOSFET a canale N e a canale P
- Transistor bipolare (BJT) o MOSFET?
- Il relè: come comandarlo e quanto assorbe
- Componenti THT e SMD/SMT
- Pinout delle schede XIAO
- LED: tensione diretta e resistenza in serie
- Il multimetro: misurare tensione e corrente
- Wemos D1 mini: primi passi
- Modulo MOSFET con Arduino ed ESP32
- Modulo relè con Arduino ed ESP32
- Filamenti per stampa 3D: PLA, PETG e versioni con fibre
- Analogico e digitale: le differenze
- ADS1115: convertitore a 16 bit con Arduino ed ESP32
- Da bit a valore reale: convertire le letture dei sensori
- Orologio RTC DS3231 con Arduino ed ESP32
- Regolatore lineare o switching: quale scegliere
- Step-down, step-up e buck-boost: scegliere il modulo giusto
- Partitore di tensione: leggere tensioni più alte di 5 V o 3,3 V
- Pull-up, pull-down e rimbalzo: collegare un pulsante come si deve
- Livelli logici 3,3 V e 5 V: far parlare ESP32 e Arduino
- Il bus I²C: indirizzi, pull-up e lo scanner
- Batterie al litio: tensioni, carica e protezione
- Consumi e deep sleep dell'ESP32: quanto dura la batteria
- Sensori di temperatura a confronto
- ESP32: quali pin usare e quali evitare
- Primi passi con l'ESP32 in Arduino IDE 2 e PlatformIO
- Display OLED SSD1306 e LCD 16×2 I²C con Arduino ed ESP32
- Sensore di movimento PIR e sensore a ultrasuoni HC-SR04
- Data e ora da Internet con l'ESP32: NTP, fuso italiano e ora legale
- Data logger su microSD: salvare le misure in CSV
- ESP32 a pannello solare: pannello, caricatore e conti per l'Italia
- Web server sull'ESP32: comandare un relè dal telefono
- Il tuo primo LED: collegarlo e farlo lampeggiare
- Il pulsante: far decidere ad Arduino
- Il potenziometro: girare una manopola e leggerne il valore
- Luce morbida: regolare la luminosità di un LED
- Il cicalino: suonare note e melodie
- Il semaforo: tre LED in sequenza
- Il termometro: leggere la temperatura con il TMP36
- Il servomotore: muovere un braccetto con Arduino
- La luce notturna: la fotoresistenza e la prima decisione
- Il relè: accendere una lampadina con Arduino
- Il display LCD: far scrivere Arduino
- Il dado elettronico: il primo progetto completo
- Il LED RGB: tutti i colori con tre luci
- Il joystick: comandi a due assi con uno shield
- L'anello di LED: dodici colori con un solo pin
- Il motore DC: farlo girare con un MOSFET
- L'umidità del terreno: la pianta che chiede acqua
- Il motore passo-passo: girare di quanto vuoi tu
- Il sensore di parcheggio: bip sempre più veloci
- Il display a 7 segmenti: numeri grandi e luminosi
- L'irrigazione automatica: la pianta si annaffia da sola
- Il tastierino: la serratura con il codice segreto
- Stazione meteo in rete: valori e grafico sul telefono
- Un bot Telegram sull'ESP32: casa tua dal telefono
- MQTT con l'ESP32: la lingua degli oggetti connessi
- Aggiornare l'ESP32 via Wi-Fi (OTA)
- ESP-NOW: due ESP32 che si parlano senza router
- WebSocket con l'ESP32: il LED che segue il cursore
- Le letture su un foglio Google, con il deep sleep
- WiFiManager: il Wi-Fi si sceglie dal telefono
- Bluetooth LE con l'ESP32: il telefono senza rete
- La fotocamera nel browser con l'ESP32-S3
- Una cassa Bluetooth portatile, fatta da te
- Diffusori Bluetooth da scrivania, 2 × 20 W
- Lettore MP3 stereo con due pulsanti
- La mensola che suona: un exciter Visaton
- Come si salda bene
- Quanto consuma? Corrente e potenza con l'INA219
- Bilancia con cella di carico e HX711
- Semaforo della CO2: quando aprire le finestre
- Apriporta con tessera RFID
- GPS: registratore di percorso su microSD
- LoRa: fin dove arriva? Prova di portata con due schede
- Cartello meteo a batteria con display e-paper
- Radio web con ESP32 e amplificatore I2S
- Primi passi con il Raspberry Pi Pico 2 in MicroPython
- Il primo amplificatore: LM386 e un altoparlante
- Arduino che parla: il modulo di sintesi vocale DFR0760
- Lo spettro della musica su una matrice di LED
- Disegnare con 64 LED: la matrice 8×8 con il MAX7219
- Una tensione vera: il DAC MCP4725 a 12 bit