2016-04-05 8 views
0

ich den TSD200 Photoplethysmogramms Sensor von BIOPAC zu einem Arduino Uno und lesen Werte zwischen 0 und 1023.Bestimmen Sie den Herzschlag mit Arduino mit einem Photoplethysmogramms Sensor

enter image description here

ich die seriellen Daten zu verwenden, versuchen verbinden verwaltet vom Sensor gesendet, um die Anzahl der Herzschläge innerhalb eines bestimmten Zeitintervalls (z. B. 30 Sekunden) zu bestimmen. Ich habe versucht, den tatsächlichen Wert mit dem vorherigen Wert zu vergleichen, aber diese Messung ist absolut unzuverlässig, da die Daten oszillieren, selbst wenn der Finger nicht auf dem Sensor platziert ist.

int val = 0; 
int prev; 

void setup() 
{ 
    Serial.begin(9600); 
} 

void loop() 
{   
    prev = val; 
    val = analogRead(A0); 

    if(val != prev) 
    { 
     Serial.println("Heartbeat"); 
    } 

    delay(1); 
} 

Obliviously schaue ich aus dem falschen Blickwinkel. Ich schätze wirklich jede Hilfe ...

+1

Der Sensorausgang ist 20mV Spitze zu Spitze (was eine AC-Wellenform bedeutet). Der Arduino erwartet eine Eingabe zwischen 0 und 5V. Die Auflösung am Arduino-Eingang beträgt 5 mV. Um dies zu erreichen, benötigen Sie kundenspezifische Hardware, die AC das Eingangssignal koppelt, vorspannt und verstärkt. – user3386109

+0

Oh, aber wie ist es möglich, dass ich Werte zwischen 700 und 850 lesen kann, wenn ich den Finger auf den Sensor setze? –

+0

Ihr Finger kann Hunderte oder sogar Tausende von Volt für eine sehr kurze Zeit erzeugen. Sie erleben das als Stromschlag, wenn die Luftfeuchtigkeit sehr niedrig ist. Aber selbst bei normaler Luftfeuchtigkeit, wenn Sie die Erschütterungen nicht spüren, erreicht das elektrische Potenzial Ihres Körpers leicht 5V (es sei denn, Sie stehen auf einem Metallboden in nackten Füßen oder tragen einen [statischen Gurt] (https: // en .wikipedia.org/wiki/Antistatic_device # Antistatic_wrist_strap)). – user3386109

Antwort

2

Der Herzschlag ist kein Spike (den Sie versuchen zu erkennen). Ein typisches Plethysmogramm ist eher eine Sinuswelle. Sie müssen entweder Peaks/Täler/Nulldurchgänge finden (mehr oder weniger einfach, aber fehleranfällig) oder Fourier transformieren die Samples und erhalten eine dominante Frequenz (empfohlen, aber involviert).

Eine Bias-Verstärkungsschaltung, wie Benutzer3386109 erwähnt, wird ebenfalls empfohlen.

+0

Kannst du mir bitte ein paar Tutorials zeigen, in denen ich nachlesen kann, wie man 'peaks/troils/zero crossings' findet - genau das brauche ich. Es ist mir jetzt klar, dass der 'TSD200' Sensor, der für' BIOPAC' gebaut wurde, nicht gut für 'Arduino' ist. Ich werde nach einem anderen suchen. –

+0

@ F.Gran Ich kenne kein bestimmtes Tutorial. Die Idee ist ziemlich einfach: Lassen Sie die Samples durch einen Tiefpassfilter laufen und finden Sie heraus, wo sich eine Sequenz zuverlässig von steigend zu fallend ändert. Bestimmen Sie einen "max" Wert. Das ist ein Höhepunkt. Trog ist andersherum. Sobald "max" und "min" identifiziert sind, interpolieren Sie, wo die Probe "(max - min)/2" sein soll. Dies sind Nulldurchgänge. Sie sollten zweimal pro Periode passieren. Herzschlag ist halb weniger häufig. Das ist so ziemlich alles. – user58697

+0

Ich werde mehr darüber lesen, was Sie gerade gesagt haben! Es ist ein guter Anfang! Vielen Dank. –

0

haben Sie schon versucht, die Signalkonditionierung zu verwenden? Fügen Sie die erste Signalkonditionierungsschaltung zwischen dem Sensorausgang und dem Eingangsarduino hinzu. Der Ausgang des Sensors muss vergrößert werden, da der Bereich des ADC auf arduino 0-5 V

+1

Ich habe es noch nicht versucht ... Kannst du bitte etwas näher ausführen? Ich versuche wirklich zu verstehen. Vielen Dank. –