- Composants requis
- Capteur d'impulsions SEN-11574
- Schéma de circuit pour l'interfaçage du capteur d'impulsions avec le microcontrôleur PIC
- Explication du code PIC16F877A pour le moniteur de rythme cardiaque
La fréquence cardiaque est le paramètre le plus important pour surveiller la santé de toute personne. À l'ère moderne des appareils portables, il existe de nombreux appareils capables de mesurer le rythme cardiaque, la tension artérielle, les pas, les calories brûlées et bien d'autres choses. Ces appareils ont un capteur de pouls à l'intérieur pour détecter la fréquence du pouls. Aujourd'hui, nous allons également utiliser un capteur de pouls avec microcontrôleur PIC pour compter les battements cardiaques par minute et l'intervalle entre les battements, ces valeurs seront ensuite affichées sur l'écran LCD 16x2 caractères. Nous utiliserons le microcontrôleur PIC16F877A PIC dans ce projet. Nous avons déjà interfacé le capteur de pouls avec Arduino pour le système de surveillance des patients.
Composants requis
- Microcontrôleur PIC16F877A
- Cristal 20 Mhz
- Condensateur 33pF 2 pièces
- Résistance 4.7k 1 pcs
- LCD 16 x 2 caractères
- Pot 10K pour le contrôle du contraste de l'écran LCD
- SEN-11574 Capteur d'impulsions
- Bande velcro
- Adaptateur secteur 5V
- Breadboard et fils de raccordement
Capteur d'impulsions SEN-11574
Pour mesurer le rythme cardiaque, nous avons besoin d'un capteur cardiaque. Ici, nous avons sélectionné le capteur cardiaque SEN-11574 qui est facilement disponible dans les magasins en ligne ou hors ligne. Nous avons utilisé ce capteur car il existe des exemples de codes fournis par le fabricant, mais il s'agit d'un code Arduino. Nous avons converti ce code pour notre microcontrôleur PIC.
Le capteur est vraiment petit et parfait pour lire le rythme cardiaque sur le lobe de l'oreille ou sur le bout du doigt. Il mesure 0,625 ”de diamètre et 0,125” d'épaisseur du côté rond du PCB.
Ce capteur fournit un signal analogique et le capteur peut être entraîné avec 3V ou 5V, la consommation de courant du capteur est de 4 mA, ce qui est idéal pour les applications mobiles. Le capteur est livré avec trois fils avec un long câble de raccordement de 24 ”et un connecteur mâle berg à l'extrémité. En outre, le capteur est livré avec une sangle velcro pour le porter sur le bout du doigt.
Le schéma du capteur d'impulsions est également fourni par le fabricant et également disponible sur sparkfun.com.
Le schéma du capteur se compose d'un capteur optique de fréquence cardiaque, d'un circuit RC à annulation de bruit ou de filtres, qui peuvent être vus dans le schéma de principe. R2, C2, C1, C3 et un amplificateur opérationnel MCP6001 sont utilisés pour une sortie analogique amplifiée fiable.
Il existe peu d'autres capteurs pour la surveillance du rythme cardiaque, mais le capteur cardiaque SEN-11574 est largement utilisé dans les projets électroniques.
Schéma de circuit pour l'interfaçage du capteur d'impulsions avec le microcontrôleur PIC
Ici, nous avons connecté le capteur de pouls à travers une 2 ème broche de l' unité de microcontrôleur. Comme le capteur fournit des données analogiques, nous devons convertir les données analogiques en signal numérique en effectuant les calculs nécessaires.
L' oscillateur à cristal de 20Mhz est connecté à travers deux broches OSC de l'unité de microcontrôleur avec deux condensateurs en céramique 33pF. L' écran LCD est connecté via le port RB du microcontrôleur.
Explication du code PIC16F877A pour le moniteur de rythme cardiaque
Le code est un peu complexe pour les débutants. Le fabricant a fourni des exemples de codes pour le capteur SEN-11574, mais il a été écrit pour la plate-forme Arduino. Nous devons convertir le calcul de notre puce, PIC16F877A. Le code complet est donné à la fin de ce projet avec une vidéo de démonstration. Et les fichiers C de support peuvent être téléchargés à partir d'ici.
Notre flux de code est relativement simple et nous avons effectué les étapes à l'aide d'un boîtier de commutation . Selon le fabricant, nous devons obtenir les données du capteur toutes les 2 millisecondes. Nous avons donc utilisé une routine de service d'interruption de minuterie qui déclenchera une fonction toutes les 2 millisecondes.
Notre flux de code dans l' instruction switch ressemblera à ceci:
Cas 1: lire l'ADC
Cas 2: Calculez le rythme cardiaque et l'IBI
Cas 3: afficher le rythme cardiaque et IBI sur l'écran LCD
Cas 4: IDLE (ne rien faire)
À l'intérieur de la fonction d'interruption de la minuterie, nous changeons l'état du programme en Cas 1: Lire l'ADC toutes les 2 millisecondes.
Ainsi, dans la fonction principale , nous avons défini l'état du programme et tous les cas de commutation .
void main () { system_init (); main_state = READ_ADC; while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 est le numéro de canal main_state = CALCULATE_HEART_BEAT; Pause; } case CALCULATE_HEART_BEAT: { Calculate_heart_beat (adc_value); état_principal = SHOW_HEART_BEAT; Pause; } case SHOW_HEART_BEAT: { if (QS == true) {// Un battement de cœur a été trouvé // BPM et IBI ont été déterminés // Quantified Self "QS" true quand Arduino trouve un battement de cœur QS = false; // réinitialise l'indicateur Quantified Self pour la prochaine fois // 0.9 utilisé pour obtenir de meilleures données. ne doit en fait pas être utilisé 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; Pause; cas IDLE: { pause; } par défaut: { } } } }
Nous utilisons deux périphériques matériels du PIC16F877A: Timer0 et ADC.
Dans le fichier timer0.c, TMR0 = (uint8_t) (masque_tmr0 & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Ce calcul fournit l'interruption de minuterie de 2 millisecondes. La formule de calcul est
// TimerCountMax - (((délai (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Si nous voyons la fonction timer_isr , c'est-
void timer_isr () { main_state = READ_ADC; }
Dans cette fonction, l'état du programme est changé en READ_ADC toutes les 2 ms.
Ensuite, la fonction CALCULATE_HEART_BEAT est tirée de l'exemple de code Arduino.
void Calculate_heart_beat (int adc_value) { Signal = adc_value; sampleCounter + = 2; // garder une trace de l'heure en mS avec cette variable int N = sampleCounter - lastBeatTime; // surveiller le temps écoulé depuis le dernier battement pour éviter le bruit // trouver le pic et le creux de l'onde de pouls if (Signal <seuil && N> (IBI / 5) * 3) {// éviter le bruit dichrotique en attendant 3/5 du dernier IBI si (Signal <T) {// T est le creux T = Signal; // garder une trace du point le plus bas de l'onde de pouls } } …………. ………………………..
De plus, le code complet est donné ci-dessous et bien expliqué par les commentaires. Ces données de capteur de rythme cardiaque peuvent être téléchargées dans le cloud et surveillées sur Internet de n'importe où, ce qui en fait un système de surveillance des battements de cœur basé sur l'IoT, suivez le lien pour en savoir plus.
Téléchargez les fichiers C de support pour ce projet PIC Pulse Sensor à partir d'ici.