Bibliothèque Arduino pour la surveillance de la fréquence cardiaque avec oxymètre de pouls

Bibliothèque Arduino pour la surveillance de la fréquence cardiaque avec oxymètre de pouls

Bibliothèque Arduino pour la surveillance de la fréquence cardiaque avec oxymètre de pouls

Un des paramètres surveillés dans mon projet de gestion du sommeil

C'est le pouls. pour le mesurer J'ai développé un appareil basé sur le comportement de l'hémoglobine et de l'oxyhémoglobine face à différentes longueurs d'onde de la lumière.. Fondamentalement, il s'agit de mesurer la quantité de lumière d'un certain type qui peut traverser ou se refléter dans une zone bien irriguée du corps. La fréquence à laquelle se produit un cycle complet de ce phénomène permet de mesurer pulso.

Table des matières

    Dans la phase de conception et de test du appareil de mesure du pouls J'ai développé quelques petits programmes pour m'aider à vérifier que l'assemblage était correct. Tout d'abord, j'ai écrit le code ci-dessous, qui prenait les valeurs mesurées de temps en temps (au moins tous les MAXIMUM_MEASUREMENT_TIME et au plus chacun MINIMUM_MEASUREMENT_TIME) lorsqu'ils variaient un minimum entre l'un et le précédent (la valeur qui correspond à MINIMUM_SIZE) et les surveillé depuis un ordinateur avec une application Python pour pouvoir les analyser plus tard.

    Une fois les valeurs ajustées (en commençant par des mesures très denses) j'ai obtenu une collection de valeurs du oxymètre de pouls au fil du temps, j'ai pu tracer un graphique à l'aide d'une feuille de calcul, Calcul de LibreOffice de LibreOffice, spécifique.

    gr%C3%A1fica-de-las-medidas-del-ox%C3%ADmetro-de-pulso-con-Calc-de-LibreOffice Librería Arduino para monitorización de la frecuencia cardíaca con oxímetro de pulso

    Avec les données collectées, comme représenté dans l'image ci-dessus, l'opération suivante consistait à déterminer si la densité de valeurs permettait de calculer de manière fiable mais "économique" (en n'échantillonnant pas plus que les données nécessaires) la valeur du pulso; Comme le montre le graphique ci-dessous, les mesures prises semblent permettre d'obtenir les résultats qu'il est raisonnable d'attendre.

    .

    medida-de-la-presencia-de-oxihemoglobina-a-lo-largo-del-tiempo-con-un-ox%C3%ADmetro-de-pulso Librería Arduino para monitorización de la frecuencia cardíaca con oxímetro de pulso

    Ensuite, avec les informations issues de l’échantillonnage des données, il a été nécessaire de développer un algorithme permettant de mesurer la fréquence du pouls. S'en tenir au graphique qui, par souci de simplicité, est supposé représenter une disposition similaire à celle du Complexe QRS, le plus simple semble être de mesurer les temps entre les parties les plus saillantes, avec des valeurs plus élevées (qui correspondent à la zone qRs de dépolarisation des ventricules) en écartant la zone la plus plate et la plus "bruyante", donc plus difficile à mesure. La solution adoptée, qui correspond au code de test ci-dessous, fonctionne selon la procédure suivante :

    • Détectez la zone mesurée dans chaque cas pour ne prêter attention qu'aux pics de valeur QRS et jette la vallée. Pour ce faire, des valeurs supérieures à une certaine constante pourraient être mesurées, mais il existe un risque qu'un individu et/ou des circonstances puissent, bien que proportionnellement, augmenter ou diminuer les valeurs. Pour éviter cela, une valeur dans la zone est considérée comme supérieure à celle qui dépasse la valeur moyenne d'un certain coefficient. De cette façon, la mesure est auto-calibrée avec sensibilité et peut être encore ajustée en ajustant le coefficient, ce que j'ai obtenu expérimentalement dans mon cas lors des tests.

      Choisissez les valeurs de la zone descendante pour la mesure (Rs) du sommet QRS, le plus près possible du maximum de la courbe. Pour savoir que la zone ascendante est en train d'être abandonnée, il suffit de vérifier qu'une nouvelle valeur est inférieure à la précédente et de vérifier que la valeur recherchée n'a pas encore été trouvée puisque, en général, il y a plusieurs valeurs dans la zone descendante. zone de QRS en fonction de la densité d'échantillonnage. Pour chronométrer l'impulsion, la valeur de l'instant auquel le point a été trouvé est stockée (les millisecondes renvoyées par millis ()) et le compare avec le suivant.

      Pour que la valeur mesurée soit la plus grande dans la zone descendante de la courbe la plus haute, une variable est utilisée booléen (mesure_impulsion dans cet exemple et active_pulse_measurement dans la bibliothèque) qui s'active en entrant dans la zone ascendante de la courbe majeure et se désactive une fois trouvée la première valeur descendante, qui est celle temporisée.

      Comme il est habituel de représenter la durée de l'impulsion en battements par minute (ppm), la valeur du temps entre les impulsions obtenue est corrigée en calculant en divisant la durée totale de la représentation (une minute, 60000 XNUMX millisecondes) par l'intervalle obtenu par en soustrayant les millisecondes actuelles (de la valeur actuelle) parmi celles précédemment chronométrées.

      Para evitar medidas falsas (como el dispositivo midiendo en vacío, por ejemplo) se verifica que el resultado se encuentra entre unos valores máximos y mínimos antes de darlo por cierto. Aunque se considera como media que un valor normal para un adulto sano en reposo se encuentra entre 60 y 100 ppm, hay valores admisibles por debajo, es fácil encontrar 40 ppm en un atleta en reposo, hasta 200 ppm sometido a un ejercicio intenso y más de 100 ppm en adultos sedentarios en estados de excitación, precisamente un factor interesante para el proyecto de gestión del sueño que me lleva a desarrollar este appareil de mesure du pouls. Pour cette raison, il est conseillé d'assouplir considérablement ces valeurs afin de ne pas perdre les extrêmes, qui pourraient précisément montrer des aspects pertinents.

      La nouvelle valeur moyenne est calculée en diminuant la pertinence de la moyenne actuelle en fonction du nombre de valeurs échantillonnées et la dernière valeur est ajoutée, également pondérée avec un coefficient qui la réduit d'autant plus qu'il y a de valeurs mesurées jusqu'à présent. .

    Enfin, en utilisant l'algorithme décrit précédemment, j'ai développé la bibliothèque pour calculer le pouls en détectant la présence du l'hémoglobine ou la oxyhémoglobine (en fonction de la longueur d'onde de la lumière utilisée) à partir du code ci-dessous.

    La bibliothèque s'attend à ce que la fonction d'échantillonnage soit appelée périodiquement moniteur_pulse() pour calculer le pouls, consultable avec la fonction dernière_impulsion() ou avec la fonction moyenne_pulse() le pouls moyen. En plus d'être une ressource limitée, j'ai exclu le recours aux interruptions car je n'avais pas besoin de valeurs immédiates mais plutôt soutenues dans le temps pour suivre l'évolution de la situation. pulso dans mon projet de gestion du sommeil

    . En tout cas, d'après les tests que j'ai effectués, cela ne semble pas nécessaire ; soit par l'appareil, soit par le comportement du pulso, l'échantillonnage à une certaine fréquence offre suffisamment d'informations et on n'obtient pas beaucoup plus (pertinent) en l'augmentant, et il n'est pas non plus possible de la diminuer beaucoup sans perdre de données pertinentes pour le calcul ; dans les premières versions du code pour surveiller la lecture du oxymètre de pouls J'ai découvert qu'il n'était pas nécessaire de s'en tenir à un temps de mesure maximum puisque, si l'on considérait correctement les variations de valeurs successives, il était très proche du minimum.

    L'exemple de programme suivant montre comment utiliser la bibliothèque précédente pour mesurer le pulso avec oxymètre de pouls. En plus d'instancier la classe Pouls surveillance du niveau de oxyhémoglobine/l'hémoglobine et avec une périodicité plus petite la valeur du pulso calculé et moyen.

    Pour garantir la pertinence des mesures, une attente est programmée avant d'afficher une valeur. Comme la valeur peut être incorrecte (par exemple si l'utilisateur retire l'appareil), les valeurs ne sont affichées que si elles se situent dans la plage de celles considérées comme valides.

    Poster un commentaire

    Vous avez peut-être manqué

    Accélérateur de séraphiniteOptimisé par Seraphinite Accelerator
    Active le site à haute vitesse pour être attrayant pour les personnes et les moteurs de recherche.