- Απαιτούμενα συστατικά
- Αισθητήρας σφυγμού SEN-11574
- Διάγραμμα κυκλώματος για διασύνδεση αισθητήρα παλμού με μικροελεγκτή PIC
- Επεξήγηση κώδικα PIC16F877A για την παρακολούθηση καρδιακών παλμών
Ο καρδιακός ρυθμός είναι η πιο σημαντική παράμετρος για την παρακολούθηση της υγείας κάθε ατόμου. Στη σύγχρονη εποχή των φορητών συσκευών, υπάρχουν πολλές συσκευές που μπορούν να μετρήσουν τον καρδιακό παλμό, την αρτηριακή πίεση, τα βήματα, τις θερμίδες που καίγονται και πολλά άλλα. Αυτές οι συσκευές έχουν αισθητήρα παλμού μέσα τους για να αισθανθούν τον ρυθμό παλμού. Σήμερα, θα χρησιμοποιήσουμε επίσης έναν αισθητήρα παλμού με τον μικροελεγκτή PIC για να μετρήσουμε τον καρδιακό παλμό ανά λεπτό και το Inter-Beat Interval, αυτές οι τιμές θα εμφανίζονται περαιτέρω σε οθόνη LCD 16x2 χαρακτήρων. Σε αυτό το έργο θα χρησιμοποιήσουμε τον μικροελεγκτή PIC16F877A PIC. Έχουμε ήδη διασυνδέσει τον αισθητήρα παλμών με το Arduino για το σύστημα παρακολούθησης ασθενών.
Απαιτούμενα συστατικά
- Μικροελεγκτής PIC16F877A
- 20 Mhz Crystal
- Πυκνωτής 33pF 2 τεμ
- 4.7k αντίσταση 1 τεμ
- LCD χαρακτήρων 16x2
- 10K δοχείο για έλεγχο αντίθεσης της οθόνης LCD
- SEN-11574 Αισθητήρας παλμού
- Λουράκι Velcro
- Προσαρμογέας ισχύος 5V
- Σύρματα ψωμιού και αγκίστρωσης
Αισθητήρας σφυγμού SEN-11574
Για να μετρήσουμε τον καρδιακό παλμό χρειαζόμαστε έναν αισθητήρα παλμών. Εδώ έχουμε επιλέξει τον αισθητήρα παλμού SEN-11574, ο οποίος είναι εύκολα διαθέσιμος σε καταστήματα στο διαδίκτυο ή εκτός σύνδεσης. Χρησιμοποιήσαμε αυτόν τον αισθητήρα καθώς υπάρχουν δείγματα κωδικών που παρέχονται από τον κατασκευαστή, αλλά αυτός είναι ένας κωδικός Arduino. Μετατρέψαμε αυτόν τον κωδικό για τον μικροελεγκτή PIC.
Ο αισθητήρας είναι πολύ μικρός και ιδανικός για ανάγνωση του καρδιακού παλμού σε όλο το λοβό του αυτιού ή στο δάχτυλο. Έχει διάμετρο 0,625 "και πάχος 0,125" από τη στρογγυλή πλευρά PCB.
Αυτός ο αισθητήρας παρέχει ένα αναλογικό σήμα και ο αισθητήρας μπορεί να οδηγηθεί με 3V ή 5V, η τρέχουσα κατανάλωση του αισθητήρα είναι 4 mA, κάτι που είναι ιδανικό για κινητές εφαρμογές. Ο αισθητήρας έρχεται με τρία καλώδια με μακρύ καλώδιο σύνδεσης 24 ιντσών και αρσενική κεφαλίδα berg στο τέλος. Επίσης, ο αισθητήρας έρχεται με Velcro Finger Strap για να το φορέσει σε όλη την άκρη του δακτύλου.
Το Pulse Sensor schematic παρέχεται επίσης από τον κατασκευαστή και διατίθεται επίσης στο sparkfun.com.
Το σχηματικό αισθητήρα αποτελείται από οπτικό αισθητήρα καρδιακού ρυθμού, κύκλωμα RC ακύρωσης θορύβου ή φίλτρα, τα οποία φαίνονται στο σχηματικό διάγραμμα. Τα R2, C2, C1, C3 και ένας λειτουργικός ενισχυτής MCP6001 χρησιμοποιούνται για αξιόπιστη ενισχυμένη αναλογική έξοδο.
Υπάρχουν λίγοι άλλοι αισθητήρες για παρακολούθηση καρδιακού παλμού, αλλά ο αισθητήρας παλμού SEN-11574 χρησιμοποιείται ευρέως σε έργα Ηλεκτρονικής.
Διάγραμμα κυκλώματος για διασύνδεση αισθητήρα παλμού με μικροελεγκτή PIC
Εδώ έχουμε συνδέσει τον αισθητήρα παλμών σε ένα 2 ος pin του μικροελεγκτή μονάδας. Καθώς ο αισθητήρας παρέχει αναλογικά δεδομένα, πρέπει να μετατρέψουμε τα αναλογικά δεδομένα σε ψηφιακό σήμα κάνοντας τους απαραίτητους υπολογισμούς.
Ο Crystal ταλαντωτής των 20Mhz συνδέεται σε δύο ακίδες OSC της μονάδας μικροελεγκτή με δύο κεραμικούς πυκνωτές 33pF. Η LCD συνδέεται μέσω της θύρας RB του μικροελεγκτή.
Επεξήγηση κώδικα PIC16F877A για την παρακολούθηση καρδιακών παλμών
Ο κωδικός είναι λίγο περίπλοκος για αρχάριους. Ο κατασκευαστής παρείχε δείγματα κωδικών για τον αισθητήρα SEN-11574, αλλά γράφτηκε για την πλατφόρμα Arduino. Πρέπει να μετατρέψουμε τον υπολογισμό για το μικροτσίπ μας, PIC16F877A. Πλήρης κωδικός δίνεται στο τέλος αυτού του έργου με ένα βίντεο επίδειξης. Μπορείτε να κατεβάσετε τα υποστηρικτικά αρχεία C από εδώ.
Η ροή κώδικα είναι σχετικά απλή και κάναμε τα βήματα χρησιμοποιώντας μια θήκη διακόπτη . Σύμφωνα με τον κατασκευαστή, πρέπει να λαμβάνουμε τα δεδομένα από τον αισθητήρα σε κάθε 2 χιλιοστά του δευτερολέπτου. Έτσι, χρησιμοποιήσαμε μια ρουτίνα υπηρεσίας διακοπής χρονοδιακόπτη, η οποία ενεργοποιεί μια λειτουργία κάθε 2 χιλιοστά του δευτερολέπτου.
Η ροή κώδικα στη δήλωση διακόπτη θα έχει ως εξής:
Περίπτωση 1: Διαβάστε το ADC
Περίπτωση 2: Υπολογίστε τον καρδιακό παλμό και το IBI
Περίπτωση 3: Εμφάνιση του καρδιακού παλμού και του IBI σε LCD
Περίπτωση 4: IDLE (Μην κάνετε τίποτα)
Μέσα στη λειτουργία διακοπής χρονοδιακόπτη, αλλάζουμε την κατάσταση του προγράμματος σε Περίπτωση 1: Διαβάστε το ADC σε κάθε 2 χιλιοστά του δευτερολέπτου.
Έτσι, στην κύρια λειτουργία, ορίσαμε την κατάσταση του προγράμματος και όλες τις περιπτώσεις διακοπτών .
void main () { system_init (); main_state = READ_ADC; ενώ (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 είναι ο αριθμός καναλιού main_state = CALCULATE_HEART_BEAT; Διακοπή; } υπόθεση CALCULATE_HEART_BEAT: { calcul_heart_beat (adc_value); main_state = SHOW_HEART_BEAT; Διακοπή; } υπόθεση SHOW_HEART_BEAT: { if (QS == true) {// Βρέθηκε ένας καρδιακός παλμός // Το BPM και το IBI έχουν προσδιοριστεί // Ποσοτικός εαυτός "QS" αληθινός όταν ο Arduino βρίσκει έναν καρδιακό παλμό QS = false; // επαναφέρετε την επισήμανση ποσοτικής μόνης για την επόμενη φορά // 0,9 χρησιμοποιείται για τη λήψη καλύτερων δεδομένων. στην πραγματικότητα δεν πρέπει να χρησιμοποιείται BPM = BPM * 0,9; IBI = IBI / 0,9; lcd_com (0x80); lcd_puts ("BPM: -"); lcd_print_number (BPM); lcd_com (0xC0); lcd_puts ("IBI: -"); lcd_print_number (IBI); } } main_state = IDLE; Διακοπή; υπόθεση IDLE: { break; } προεπιλογή: { } } } }
Χρησιμοποιούμε δύο περιφερειακά υλικού του PIC16F877A: Timer0 και ADC.
Μέσα στο αρχείο timer0.c, TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Αυτός ο υπολογισμός παρέχει τη διακοπή του χρονοδιακόπτη των 2 χιλιοστών του δευτερολέπτου. Ο τύπος υπολογισμού είναι
// TimerCountMax - (((καθυστέρηση (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Εάν δούμε τη συνάρτηση timer_isr , είναι-
void timer_isr () { main_state = READ_ADC; }
Σε αυτήν τη λειτουργία, η κατάσταση προγράμματος αλλάζει σε READ_ADC σε κάθε 2ms.
Στη συνέχεια, η συνάρτηση CALCULATE_HEART_BEAT λαμβάνεται από τον κώδικα Arduino.
άκυρο calcul_heart_beat (int adc_value) { Signal = adc_value; sampleCounter + = 2; // παρακολουθήστε τον χρόνο σε mS με αυτήν τη μεταβλητή int N = sampleCounter - lastBeatTime; // παρακολουθήστε τον χρόνο από τον τελευταίο ρυθμό για να αποφύγετε τον θόρυβο // βρείτε την κορυφή και την κοιλότητα του παλμικού κύματος εάν (Σήμα <thresh && N> (IBI / 5) * 3) {// αποφύγετε τον διχρωτικό θόρυβο περιμένοντας 3/5 του τελευταίου IBI εάν (Σήμα <T) {// T είναι η κατώτατη τιμή T = Σήμα. // παρακολουθήστε το χαμηλότερο σημείο στο παλμικό κύμα } } …………. ………………………..
Επιπλέον, ο πλήρης κωδικός δίνεται παρακάτω και εξηγείται καλά από τα σχόλια. Αυτά τα δεδομένα αισθητήρα καρδιακού παλμού μπορούν να μεταφορτωθούν περαιτέρω στο cloud και να παρακολουθούνται μέσω Διαδικτύου από οπουδήποτε, γεγονός που το καθιστά έτσι το σύστημα παρακολούθησης καρδιακών παλμών με βάση το IoT, ακολουθήστε τον σύνδεσμο για να μάθετε περισσότερα.
Κατεβάστε αρχεία υποστήριξης C για αυτό το έργο PIC Pulse Sensor από εδώ.