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.

    graphique des mesures de l'oxymètre de pouls avec

    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.

    .

    mesure de la présence d'oxyhémoglobine au fil du temps avec un oxymètre de pouls

    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.

      Pour éviter les fausses mesures (comme l'appareil mesurant dans le vide par exemple), on vérifie que le résultat est compris entre les valeurs maximales et minimales avant de le prendre pour acquis. Bien qu'on considère en moyenne qu'une valeur normale pour un adulte en bonne santé au repos se situe entre 60 et 100 ppm, il existe des valeurs admissibles ci-dessous, il est facile de trouver 40 ppm chez un sportif au repos, jusqu'à 200 ppm pendant exercice intense et plus de 100 ppm chez des adultes sédentaires en état d'excitation, justement un facteur intéressant pour le projet de gestion du sommeil ce qui m'amène à développer ceci 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é