Βιβλιοθήκη Arduino για παρακολούθηση καρδιακών παλμών με παλμικό οξύμετρο

Βιβλιοθήκη Arduino για παρακολούθηση καρδιακών παλμών με παλμικό οξύμετρο

Βιβλιοθήκη Arduino για παρακολούθηση καρδιακών παλμών με παλμικό οξύμετρο

Μία από τις παραμέτρους που παρακολουθούνται στο έργο διαχείρισης ύπνου μου

Είναι ο παλμός. να το μετρήσω Ανέπτυξα μια συσκευή βασισμένη στη συμπεριφορά της αιμοσφαιρίνης και της οξυαιμοσφαιρίνης σε διαφορετικά μήκη κύματος φωτός. Ουσιαστικά πρόκειται για τη μέτρηση του πόσο φως ενός συγκεκριμένου τύπου μπορεί να περάσει ή να αντανακλάται σε μια καλά ποτισμένη περιοχή του σώματος. Η συχνότητα με την οποία εμφανίζεται ένας πλήρης κύκλος αυτού του φαινομένου επιτρέπει τη μέτρηση του παλμός.

Πίνακας Περιεχομένων

    Στη φάση σχεδιασμού και δοκιμής του συσκευή μέτρησης παλμών Ανέπτυξα μερικά μικρά προγράμματα για να με βοηθήσουν να επαληθεύσω ότι η συναρμολόγηση ήταν σωστή. Πρώτα έγραψα τον παρακάτω κώδικα, ο οποίος έπαιρνε τις μετρούμενες τιμές από καιρό σε καιρό (τουλάχιστον κάθε MAXIMUM_MEASUREMENT_TIME και το πολύ το καθένα MINIMUM_MEASUREMENT_TIME) όταν διέφεραν ένα ελάχιστο μεταξύ του ενός και του προηγούμενου (την τιμή που αντιστοιχεί MINIMUM_SIZE) και το παρακολουθείται από υπολογιστή με εφαρμογή Python για να μπορέσουμε να τα αναλύσουμε αργότερα.

    Μόλις οι τιμές προσαρμόστηκαν (ξεκινώντας με πολύ πυκνές μετρήσεις) έλαβα μια συλλογή τιμών από το παλμικό οξύμετρο με την πάροδο του χρόνου μπορούσα να γράψω γραφικά χρησιμοποιώντας ένα υπολογιστικό φύλλο, LibreOffice Υπολογισμός de LibreOffice, συγκεκριμένος.

    γράφημα μετρήσεων παλμικού οξύμετρου με

    Με τα δεδομένα που συλλέχθηκαν, όπως απεικονίζονται στην παραπάνω εικόνα, η επόμενη ενέργεια ήταν να προσδιοριστεί εάν η πυκνότητα των τιμών μας επέτρεπε να υπολογίσουμε με αξιόπιστο αλλά «οικονομικό» τρόπο (χωρίς δειγματοληψία περισσότερα από τα απαραίτητα δεδομένα) την τιμή του παλμός; Όπως φαίνεται στο παρακάτω γράφημα, τα μέτρα που ελήφθησαν φάνηκε να επιτυγχάνουν τα αποτελέσματα που είναι λογικά αναμενόμενα.

    .

    μέτρηση της παρουσίας οξυαιμοσφαιρίνης με την πάροδο του χρόνου με παλμικό οξύμετρο

    Στη συνέχεια, με τις πληροφορίες από τη δειγματοληψία δεδομένων, ήταν απαραίτητο να αναπτυχθεί ένας αλγόριθμος που θα μετρούσε τον ρυθμό παλμού. Επιμένοντας στο γράφημα ότι, για λόγους απλότητας, θεωρείται ότι αντιπροσωπεύει μια διάταξη παρόμοια με το Σύμπλεγμα QRS, το πιο απλό πράγμα φαίνεται να είναι να μετρήσουμε τους χρόνους μεταξύ των πιο εμφανών τμημάτων, με υψηλότερες τιμές (που αντιστοιχεί στη ζώνη qRs εκπόλωσης των κοιλιών), απορρίπτοντας την πιο επίπεδη και πιο «θορυβώδη» ζώνη, που είναι επομένως πιο δύσκολη να μετρήσετε. Η λύση που υιοθετήθηκε, η οποία αντιστοιχεί στον παρακάτω κώδικα δοκιμής, λειτουργεί σύμφωνα με την ακόλουθη διαδικασία:

    • Εντοπίστε την περιοχή που μετράται σε κάθε περίπτωση για να παρακολουθείτε μόνο τις κορυφές τιμών qRs και πετάξτε την κοιλάδα. Για να γίνει αυτό, θα μπορούσαν να μετρηθούν τιμές υψηλότερες από μια ορισμένη σταθερά, αλλά υπάρχει ο κίνδυνος ένα άτομο ή/και περιστάσεις, αν και αναλογικά, να αυξήσουν ή να μειώσουν τις τιμές. Για να αποφευχθεί αυτό, μια τιμή στην περιοχή θεωρείται μεγαλύτερη από αυτή που υπερβαίνει τη μέση τιμή κατά ένα συγκεκριμένο συντελεστή. Με αυτόν τον τρόπο, η μέτρηση αυτο-βαθμονομείται με ευαισθησία και θα μπορούσε να προσαρμοστεί ακόμη περισσότερο με μικρορύθμιση του συντελεστή, τον οποίο στην περίπτωσή μου έχω πετύχει πειραματικά κατά τη διάρκεια των δοκιμών.

      Επιλέξτε τις τιμές της φθίνουσας ζώνης για τη μέτρηση (Rs) της κορυφής qRs, όσο το δυνατόν πιο κοντά στο μέγιστο της καμπύλης. Για να γνωρίζετε ότι η αύξουσα ζώνη εγκαταλείπεται, αρκεί να επαληθεύσετε ότι μια νέα τιμή είναι μικρότερη από την προηγούμενη και να επαληθεύσετε ότι η τιμή που αναζητήσατε δεν έχει βρεθεί ακόμη, καθώς, γενικά, υπάρχουν πολλές τιμές στην φθίνουσα ζώνη του qRs ανάλογα με την πυκνότητα δειγματοληψίας. Για να χρονομετρηθεί ο παλμός, αποθηκεύεται η τιμή της στιγμής στην οποία βρέθηκε το σημείο (τα χιλιοστά του δευτερολέπτου που επιστρέφονται από χιλιοστά ()) και το συγκρίνει με το επόμενο.

      Για να διασφαλιστεί ότι η τιμή που μετρήθηκε είναι η μεγαλύτερη στην φθίνουσα ζώνη της υψηλότερης καμπύλης, χρησιμοποιείται μια μεταβλητή boolean (μέτρο_παλμό σε αυτό το παράδειγμα και ενεργός_παλμός_μέτρηση στη βιβλιοθήκη) που ενεργοποιείται κατά την είσοδο στην αύξουσα ζώνη της κύριας καμπύλης και απενεργοποιείται μόλις βρεθεί η πρώτη φθίνουσα τιμή, που είναι η χρονομετρημένη.

      Όπως είναι σύνηθες να αντιπροσωπεύεται η διάρκεια του παλμού ως παλμοί ανά λεπτό (ppm), η τιμή του χρόνου μεταξύ των παλμών που λαμβάνονται διορθώνεται με υπολογισμό διαιρώντας τον συνολικό χρόνο της αναπαράστασης (ένα λεπτό, 60000 χιλιοστά του δευτερολέπτου) με το διάστημα που προκύπτει από αφαιρώντας τα τρέχοντα χιλιοστά του δευτερολέπτου (της τρέχουσας τιμής) από αυτά που είχαν προηγουμένως χρονομετρηθεί.

      Για την αποφυγή λανθασμένων μετρήσεων (όπως η συσκευή που μετράει σε κενό, για παράδειγμα), επαληθεύεται ότι το αποτέλεσμα είναι μεταξύ μέγιστων και ελάχιστων τιμών πριν θεωρηθεί δεδομένο. Αν και θεωρείται ως μέσος όρος ότι μια κανονική τιμή για έναν υγιή ενήλικα σε κατάσταση ηρεμίας είναι μεταξύ 60 και 100 ppm, υπάρχουν αποδεκτές τιμές παρακάτω, είναι εύκολο να βρεθούν 40 ppm σε έναν αθλητή σε κατάσταση ηρεμίας, έως και 200 ​​ppm κατά τη διάρκεια έντονη άσκηση και περισσότερα 100 ppm σε καθιστικούς ενήλικες σε καταστάσεις ενθουσιασμού, ακριβώς ένας ενδιαφέρον παράγοντας για το έργο διαχείρισης ύπνου που με οδηγεί να το αναπτύξω αυτό συσκευή μέτρησης παλμών. Για το λόγο αυτό, καλό είναι να χαλαρώσετε πολύ αυτές τις τιμές για να μην χαθούν τα άκρα, τα οποία θα μπορούσαν να δείξουν με ακρίβεια σχετικές πτυχές.

      Η νέα μέση τιμή υπολογίζεται μειώνοντας τη συνάφεια του τρέχοντος μέσου όρου με βάση τον αριθμό των τιμών που δειγματοληπτήθηκαν και προστίθεται η τελευταία τιμή, επίσης σταθμισμένη με έναν συντελεστή που τη μειώνει περισσότερο όσο περισσότερες τιμές έχουν μετρηθεί μέχρι τώρα .

    Τέλος, χρησιμοποιώντας τον αλγόριθμο που περιγράφηκε προηγουμένως, ανέπτυξα τη βιβλιοθήκη για τον υπολογισμό του παλμού ανιχνεύοντας την παρουσία του αιμοσφαιρίνη o οξυαιμοσφαιρίνη (ανάλογα με το μήκος κύματος του φωτός που χρησιμοποιείται) από τον παρακάτω κώδικα.

    Η βιβλιοθήκη αναμένει ότι η συνάρτηση δειγματοληψίας θα καλείται περιοδικά monitor_pulse() για τον υπολογισμό του παλμού, τον οποίο μπορείτε να συμβουλευτείτε με τη συνάρτηση last_pulse() ή με τη συνάρτηση μέσος_παλμός() ο μέσος παλμός. Εκτός από περιορισμένος πόρος, απέκλεισα τη χρήση διακοπών επειδή δεν χρειαζόμουν άμεσες τιμές αλλά μάλλον σταθερές με την πάροδο του χρόνου για να παρακολουθώ τις παλμός στο έργο μου διαχείρισης ύπνου

    . Σε κάθε περίπτωση από τα τεστ που έχω κάνει δεν φαίνεται να χρειάζεται? είτε από τη συσκευή είτε από τη συμπεριφορά του παλμός, η δειγματοληψία σε μια συγκεκριμένη συχνότητα προσφέρει αρκετές πληροφορίες και δεν λαμβάνονται πολύ περισσότερες (σχετικές) αυξάνοντάς τις, ούτε είναι δυνατόν να μειωθούν πολύ χωρίς να χαθούν τα σχετικά δεδομένα για τον υπολογισμό. σε πρώιμες εκδόσεις του κώδικα για την παρακολούθηση της ανάγνωσης του παλμικό οξύμετρο Ανακάλυψα ότι δεν ήταν απαραίτητο να επιμείνω σε έναν μέγιστο χρόνο μέτρησης, καθώς, αν ληφθούν σωστά υπόψη οι διακυμάνσεις των διαδοχικών τιμών, ήταν πολύ κοντά στο ελάχιστο.

    Το ακόλουθο παράδειγμα προγράμματος δείχνει πώς να χρησιμοποιήσετε την προηγούμενη βιβλιοθήκη για τη μέτρηση του παλμός με ένα παλμικό οξύμετρο. Εκτός από τη δημιουργία της τάξης Pulso παρακολούθηση του επιπέδου των οξυαιμοσφαιρίνη/αιμοσφαιρίνη και με μικρότερη περιοδικότητα η τιμή του παλμός υπολογισμένο και μέσο όρο.

    Για να διασφαλιστεί ότι οι μετρήσεις είναι σχετικές, προγραμματίζεται μια αναμονή πριν εμφανιστεί οποιαδήποτε τιμή. Καθώς η τιμή μπορεί να είναι λανθασμένη (για παράδειγμα, εάν ο χρήστης αφαιρέσει τη συσκευή), οι τιμές εμφανίζονται μόνο εάν βρίσκονται εντός του εύρους εκείνων που θεωρούνται έγκυρες.

    Δημοσίευση σχολίου

    Μπορεί να έχετε χάσει