Arduino-Bibliothek zur Herzfrequenzüberwachung mit Pulsoximeter

Arduino-Bibliothek zur Herzfrequenzüberwachung mit Pulsoximeter

Arduino-Bibliothek zur Herzfrequenzüberwachung mit Pulsoximeter

Einer der Parameter, die in meinem Schlafmanagementprojekt überwacht werden

Es ist der Puls. um es zu messen Ich habe ein Gerät entwickelt, das auf dem Verhalten von Hämoglobin und Oxyhämoglobin gegenüber verschiedenen Lichtwellenlängen basiert. Im Grunde geht es darum, zu messen, wie viel Licht einer bestimmten Art einen gut durchströmten Bereich des Körpers durchdringen bzw. dort reflektiert werden kann. Die Häufigkeit, mit der ein vollständiger Zyklus dieses Phänomens auftritt, ermöglicht die Messung Pulso.

Inhaltsverzeichnis

    In der Entwurfs- und Testphase des Pulsmessgerät Ich habe einige kleine Programme entwickelt, die mir dabei helfen, zu überprüfen, ob der Zusammenbau korrekt war. Zuerst habe ich den folgenden Code geschrieben, der von Zeit zu Zeit (zumindest alle) die Messwerte erfasst MAXIMUM_MEASUREMENT_TIME und höchstens jeder MINIMUM_MEASUREMENT_TIME), wenn sie ein Minimum zwischen einem und dem vorherigen variierten (der Wert, der entspricht MINDESTGRÖSSE) und das von einem Computer aus mit einer Python-Anwendung überwacht werden um sie später analysieren zu können.

    Nachdem die Werte angepasst wurden (beginnend mit sehr dichten Messungen), erhielt ich eine Sammlung von Werten aus dem Pulsoximeter Mit der Zeit konnte ich mithilfe einer Tabellenkalkulation eine grafische Darstellung erstellen. LibreOffice-Rechner de LibreOffice, Spezifisch.

    Diagramm der Pulsoximetermessungen mit

    Mit den gesammelten Daten, wie im Bild oben dargestellt, bestand der nächste Schritt darin, zu bestimmen, ob die Wertedichte es uns ermöglichte, den Wert auf zuverlässige, aber „wirtschaftliche“ Weise (ohne mehr als die erforderlichen Daten abzufragen) zu berechnen Pulso; Wie in der folgenden Grafik zu sehen ist, schienen die ergriffenen Maßnahmen dazu zu dienen, die vernünftigerweise zu erwartenden Ergebnisse zu erzielen.

    .

    Messung des Vorhandenseins von Oxyhämoglobin im Zeitverlauf mit einem Pulsoximeter

    Als nächstes musste mit den Informationen aus der Datenerfassung ein Algorithmus entwickelt werden, der die Pulsfrequenz messen würde. Der Einfachheit halber wird davon ausgegangen, dass das Diagramm ein ähnliches Layout wie das Diagramm darstellt QRS-KomplexAm einfachsten scheint es zu sein, die Zeiten zwischen den markantesten Teilen mit höheren Werten zu messen (was der qRs-Depolarisationszone der Ventrikel entspricht) und die flachere und „verrauschtere“ Zone zu verwerfen, was daher schwieriger ist messen. Die gewählte Lösung, die dem untenstehenden Testcode entspricht, funktioniert nach folgendem Verfahren:

    • Erfassen Sie jeweils den zu messenden Bereich, um nur die Wertespitzen zu berücksichtigen qRs und wirf das Tal weg. Zu diesem Zweck könnten Werte gemessen werden, die über einer bestimmten Konstante liegen, es besteht jedoch das Risiko, dass eine Person und/oder Umstände die Werte, wenn auch proportional, erhöhen oder senken könnten. Um dies zu vermeiden, wird ein Wert in der Fläche als größer angesehen als derjenige, der den Durchschnittswert um einen bestimmten Koeffizienten überschreitet. Auf diese Weise ist die Messung empfindlich selbstkalibriert und könnte durch eine Feinabstimmung des Koeffizienten noch weiter angepasst werden, was ich in meinem Fall experimentell während der Tests erreicht habe.

      Wählen Sie die Werte der absteigenden Zone für die Messung (Rs) des Gipfels qRs, so nah wie möglich am Maximum der Kurve. Um zu wissen, dass die aufsteigende Zone verlassen wird, reicht es aus, zu überprüfen, ob ein neuer Wert kleiner als der vorherige ist, und zu überprüfen, ob der gesuchte Wert noch nicht gefunden wurde, da es im Allgemeinen mehrere Werte in der absteigenden Zone gibt Zone von qRs abhängig von der Probendichte. Zur Zeitmessung des Impulses wird der Wert des Zeitpunkts gespeichert, zu dem der Punkt gefunden wurde (die von zurückgegebenen Millisekunden). millis ()) und vergleicht es mit dem nächsten.

      Um sicherzustellen, dass der gemessene Wert im abfallenden Bereich der höchsten Kurve am größten ist, wird eine Variable verwendet boolesch (Measure_pulse in diesem Beispiel und active_pulse_measurement in der Bibliothek), der beim Betreten der aufsteigenden Zone der Hauptkurve aktiviert und deaktiviert wird, sobald der erste absteigende Wert gefunden wird, der zeitgesteuert ist.

      Da es üblich ist, die Dauer des Impulses in Schlägen pro Minute (ppm) darzustellen, wird der erhaltene Wert der Zeit zwischen den Impulsen korrigiert, indem die Gesamtzeit der Darstellung (eine Minute, 60000 Millisekunden) durch das erhaltene Intervall dividiert wird Subtrahieren der aktuellen Millisekunden (des aktuellen Werts) von den zuvor gemessenen.

      Um Fehlmessungen zu vermeiden (z. B. wenn das Gerät im Vakuum misst), wird zunächst überprüft, ob das Ergebnis zwischen Maximal- und Minimalwert liegt, bevor es als gegeben angenommen wird. Obwohl man davon ausgeht, dass ein normaler Wert für einen gesunden Erwachsenen im Ruhezustand zwischen 60 und 100 ppm liegt, gibt es zulässige Werte darunter, so kann man bei einem Sportler im Ruhezustand leicht 40 ppm finden, im Ruhezustand bis zu 200 ppm intensiver körperlicher Betätigung und mehr. von 100 ppm bei sitzenden Erwachsenen in Erregungszuständen, genau ein interessanter Faktor für das Schlafmanagementprojekt was mich dazu bringt, dies zu entwickeln Pulsmessgerät. Aus diesem Grund empfiehlt es sich, diese Werte stark zu lockern, damit die Extreme nicht verloren gehen, die relevante Aspekte präzise aufzeigen könnten.

      Der neue Durchschnittswert wird berechnet, indem die Relevanz des aktuellen Durchschnitts basierend auf der Anzahl der erfassten Werte verringert und der letzte Wert hinzugefügt wird, ebenfalls gewichtet mit einem Koeffizienten, der ihn umso weiter reduziert, je mehr Werte bisher gemessen wurden .

    Schließlich habe ich unter Verwendung des zuvor beschriebenen Algorithmus die Bibliothek entwickelt, um den Puls durch Erkennen des Vorhandenseins von zu berechnen Hämoglobin oder Oxyhämoglobin (abhängig von der Wellenlänge des verwendeten Lichts) aus dem folgenden Code.

    Die Bibliothek erwartet, dass die Sampling-Funktion regelmäßig aufgerufen wird monitor_pulse() um den Puls zu berechnen, der mit der Funktion konsultiert werden kann last_pulse() oder mit der Funktion Average_pulse() der durchschnittliche Puls. Abgesehen davon, dass es sich um eine begrenzte Ressource handelt, schloss ich die Verwendung von Unterbrechungen aus, da ich zur Überwachung keine unmittelbaren Werte, sondern über einen längeren Zeitraum hinweg nachhaltige Werte benötigte Pulso in meinem Schlafmanagementprojekt

    . Den von mir durchgeführten Tests zufolge scheint dies jedenfalls nicht notwendig zu sein; entweder durch das Gerät oder durch das Verhalten des PulsoDie Abtastung mit einer bestimmten Häufigkeit liefert genügend Informationen und durch Erhöhen erhält man nicht viel mehr (relevantes), und es ist auch nicht möglich, sie stark zu verringern, ohne relevante Daten für die Berechnung zu verlieren. in frühen Versionen des Codes, um das Lesen des zu überwachen Pulsoximeter Ich habe festgestellt, dass es nicht notwendig ist, sich an eine maximale Messzeit zu halten, da diese bei korrekter Berücksichtigung der Schwankungen aufeinanderfolgender Werte sehr nahe am Minimum liegt.

    Das folgende Beispielprogramm zeigt, wie die vorherige Bibliothek zum Messen verwendet wird Pulso mit einem Pulsoximeter. Zusätzlich zur Instanziierung der Klasse Pulso Überwachung des Niveaus von Oxyhämoglobin/Hämoglobin und mit einer kleineren Periodizität der Wert des Pulso berechnet und gemittelt.

    Um sicherzustellen, dass die Messungen relevant sind, ist eine Wartezeit programmiert, bevor ein Wert angezeigt wird. Da der Wert falsch sein kann (z. B. wenn der Benutzer das Gerät entfernt), werden Werte nur angezeigt, wenn sie im Bereich der als gültig angesehenen Werte liegen.

    Geben Sie Anmerkung

    Sie können vermisst haben