home

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

Scarica il PDF (A4, 5 pagine) Stampabile e condivisibile, senza modifiche — CC BY-ND 4.0
In breve
  • 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.
Tempo: un'oraLivello: un passo avantiPrima: guide n. 21 e 36

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ù.

Prima di tutto: sicurezza
  • 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.
Con gli elettrodi addosso: niente collegamenti alla presaUNOAD8232elettrodispina staccataCosì sì: portatile a batteriaUNOAD8232elettrodipresa 230 VCosì no: collegato alla presainformaticait.it
Con gli elettrodi addosso:niente collegamenti alla presaUNOAD8232elettrodispina staccataCosì sì: portatile a batteriaUNOAD8232elettrodipresa 230 VCosì no: collegato alla presainformaticait.it

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).

I collegamenti: cinque fili tra il modulo e ArduinoSCLSDAAREFGND131211109876543210IOREFRESET3.3V5VGNDGNDVINDIGITAL (PWM ~)POWERANALOG INUNOAD8232ACPZGND3.3vOUTPUTLO-LO+SDNRLLARAAD8232Heart MonitorLEDsparkfun3.3VGNDA0 A1 A2RALARLaglielettrodiArduino UNOSparkFun SEN-12650 (AD8232)3.3v → 3.3VGND → GNDOUTPUT → A0LO+ → A1LO− → A2SDN resta liberoinformaticait.it
  • 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.

Dove vanno gli elettrodi (posizioni SparkFun)RALARLRALARLA. avambracci e coscia destraB. petto e fianco destrola persona ti guarda: la sua destra è a sinistra nel disegnoinformaticait.it
  • 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.

Un battito sul Plotter: onda P, complesso QRS, onda TsogliaPRQST0,8 sesempio: 60 ÷ 0,8 = 75 battiti al minutoforma indicativa, non una registrazioneinformaticait.it

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.

✓ Cosa devi vedereA ogni battito un picco alto e stretto, con la soglia arancione poco sotto le punte. Il LED L dell'Arduino e il LED nel cuore della scheda SparkFun lampeggiano a tempo.
Se non funziona
  • 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ì.

Attenzione
  • 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.
M5Stack ECG Module13.2 (M034): si impila sotto un M5Stack Core, non su Arduino UNO. Un STM32 conta già i battiti e li manda in seriale a 115200 bps; la parte che tocca la persona è isolata. Solo 5 V; esempio ufficiale su GitHub (M5-ProductExampleCodes, Module/ECG). Le regole di sicurezza non cambiano.
Prova tu
  • Confronta le posizioni A e B, poi stringi un pugno.
  • Con la pila da 9 V guarda il LED L.
✓ Cosa hai imparato
  • l'AD8232 amplifica e filtra il segnale;
  • due picchi R danno una stima dei battiti;
  • elettrodi addosso solo a batteria.
Fonti: Analog Devices, datasheet AD8232 Rev. D · SparkFun, SEN-12650: pagina prodotto, hookup guide, file Eagle v10; cavo CAB-12970; manuale MyoWare AT-04-001 · DFRobot, wiki SEN0213 · M5Stack, ECG Module13.2 · Arduino, Serial Plotter, analogRead(), arduino-serial-plotter-webapp 0.2.0 · Microchip, ATmega328P · Guide n. 21, 36 e 70

Prodotti utili

Altre guide

Tutte le nostre guide →
Caricamento in corso ...
Torna all'inizio