1. A breve aggiorneremo la piattaforma di Reboot per risolvere alcuni problemi con i plug-in, quindi chiediamo ancora un po' di pazienza, Lo staff di Reboot

Misurare il battito cardiaco tramite Arduino e un dischetto piezoelettrico

Discussione in 'Arduino tutorial' iniziata da StandardBus, 20 Mar 2015.

  1. StandardBus

    StandardBus Staff Alan Staff

    Iscritto:
    15 Dic 2014
    Messaggi:
    4.092
    Like ricevuti:
    5.298
    [​IMG]
    È un progetto così semplice che non ho potuto fare a meno di proporvelo sotto forma di articolo: Thomas Novotny stava costruendo tramite Arduino un dispositivo in grado di rilevare se l'acqua fluisce in un tubo. Per farlo ha usato un dischetto piezoelettrico come quello che vedete in foto.
    Per fare una prova, ha appoggiato il dischetto al suo dito e il risultato è stato quello di leggere il suo battito cardiaco. La vera sorpresa è stata che i dati raccolti avevano pochissimo rumore.
    Come potete osservare dal grafico qui sotto, i battiti sono ben distinti e leggibili.

    [​IMG]
    Il piezo utilizzato è quello venduto da DFrobot, ma funziona anche collegando ad Arduino il solo dischetto piezoelettrico, sicuramente più facile da reperire.

    Il codice base utilizzato da Thomas è il seguente:
    Codice:
    void setup() {
      Serial.begin(57600);
    }
    void loop() {
      int avg = 0;
      for(int i=0;i<64;i++){
        avg+=analogRead(A2);
      }
      Serial.println(avg/64,DEC);
      delay(5);
    }
    Se utilizzate un piezo come quello di DFRobot andrà collegato in questo modo:
    Analog out :arrowright: Arduino pin A2
    5V :arrowright: Arduino 5V
    GND :arrowright: Arduino GND
    Mentre se utilizzate un piezo "in solitaria" basterà collegarlo tra il pin A2 di Arduino e GND.

    Thomas ha poi riadattato il codice per riuscire a calcolare i battiti al minuto (BPM) analizzando il tempo intercorso tra gli ultimi 16 battiti rilevati da Arduino e poi calcolandone la media:
    Codice:
    int threshold = 60;
    int oldvalue = 0;
    int newvalue = 0;
    unsigned long oldmillis = 0;
    unsigned long newmillis = 0;
    int cnt = 0;
    int timings[16];
    
    void setup() {
      Serial.begin(57600);
    }
    
    void loop() {
      oldvalue = newvalue;
      newvalue = 0;
      for(int i=0; i<64; i++){ // Average over 16 measurements
        newvalue += analogRead(A2);
      }
      newvalue = newvalue/64;
      // find triggering edge
      if(oldvalue<threshold && newvalue>=threshold){
        oldmillis = newmillis;
        newmillis = millis();
        // fill in the current time difference in ringbuffer
        timings[cnt%16]= (int)(newmillis-oldmillis);
        int totalmillis = 0;
        // calculate average of the last 16 time differences
        for(int i=0;i<16;i++){
          totalmillis += timings[i];
        }
        // calculate heart rate
        int heartrate = 60000/(totalmillis/16);
        Serial.println(heartrate,DEC);
        cnt++;
      }
      delay(5);
    }
    Il risultato dell'operazione verrà comunicato al PC (o a qualsiasi altro dispositivo) tramite interfaccia seriale.


     
    #1
    Ultima modifica: 20 Mar 2015
    A iostream, zoomx, matvid e 2 altri utenti piace questo elemento.
  2. robbe

    robbe Livello 1

    Iscritto:
    20 Mar 2015
    Messaggi:
    1
    Like ricevuti:
    0
    ciao,
    molto interessante, da provare.
    Forse si riesce ad ottenere anche il grafico del segnale senza quella media pesante ma con un filtro a mediana che toglie un po' di rumore ma lascia i picchi.

    Ho visto però lo schema del DFrobot e *non* è amplificato: è un semplice dischetto piezoelettrico come hai collegato tu, con in più un diodo zener di protezione da 5,1 V ed una resistenza da 1M in parallelo al piezo.
    Il collegamento ai +5V di Arduino non è quindi necessario.
    ciao
     
    #2
  3. StandardBus

    StandardBus Staff Alan Staff

    Iscritto:
    15 Dic 2014
    Messaggi:
    4.092
    Like ricevuti:
    5.298
    Grazie mille per la precisazione, mi ero documentato su come usare il piezo da solo ma non avevo cercato lo schema di quello venduto da DFRobot.
    Correggo subito :wink:
     
    #3
    Ultima modifica: 20 Mar 2015
  4. ManuelX

    ManuelX Staff Armaiolo Staff

    Iscritto:
    16 Dic 2014
    Messaggi:
    325
    Like ricevuti:
    235
    Questa proprio mi mancava!
     
    #4
  5. Step

    Step Livello 1

    Iscritto:
    23 Gen 2015
    Messaggi:
    8
    Like ricevuti:
    8
    Dovrebbe funzionare sullo stesso principio del laringofono, la capsula piezo capta le vibrazioni sulla pelle dovute al flusso sanguigno e questo non è costante, ma impulsivo. In ogni modo è una bella trovata...quasi quasi provo!
     
    #5
    A StandardBus piace questo elemento.
  6. matvid

    matvid Livello 3

    Iscritto:
    14 Apr 2015
    Messaggi:
    48
    Like ricevuti:
    7
  7. matvid

    matvid Livello 3

    Iscritto:
    14 Apr 2015
    Messaggi:
    48
    Like ricevuti:
    7
    Come faccio a far venire il display con il grafico??
     
    #7
  8. RyujiAndy

    RyujiAndy Staff ᗧ͇̿ · · ᗣ͇̿ᗣ͇̿ᗣ͇̿ᗣ͇̿ Staff

    Iscritto:
    15 Dic 2014
    Messaggi:
    558
    Like ricevuti:
    390
  9. matvid

    matvid Livello 3

    Iscritto:
    14 Apr 2015
    Messaggi:
    48
    Like ricevuti:
    7
  10. rando

    rando Livello 1

    Iscritto:
    4 Mar 2017
    Messaggi:
    2
    Like ricevuti:
    0
    Ciao a tutti,

    Volevo chiedere se qualcuno avesse già provato il circuito e dirmi se tutto funzioni correttamente.

    Grazie.
     
    #10
  11. iostream

    iostream Phoenix Wright

    Iscritto:
    13 Ago 2016
    Messaggi:
    4.895
    Like ricevuti:
    1.617
    Sì funziona. Ma, perché non provi? Non ti fidi di questo forum?
     
    #11
  12. rando

    rando Livello 1

    Iscritto:
    4 Mar 2017
    Messaggi:
    2
    Like ricevuti:
    0
    Forum nuovo, legittimo chiedere. Solo dubitando si può conoscere xD.

    Grazie mille!!
     
    #12
  13. iostream

    iostream Phoenix Wright

    Iscritto:
    13 Ago 2016
    Messaggi:
    4.895
    Like ricevuti:
    1.617
    Tranquillo, questo è uno dei migliori (a parer mio) forum italiani
     
    #13
  14. zoomx

    zoomx Livello 19

    Iscritto:
    12 Set 2015
    Messaggi:
    892
    Like ricevuti:
    339
    Se usate gli ultimi IDE Arduino è presente il serial plotter nel menù tools. Dovrebbe funzionare anche se non ho provato.
    Io mesi fa ho provato il circuito ma mi par di ricordare che il segnale non era molto evidente come quello del grafico.
     
    #14

Condividi questa Pagina