mercredi 2 mars 2016

Simple Heart Rate Measurement Using Pic

Simple Heart Rate Measurement Using PIC.

L'objectif de ce projet est comme indiqué au titre de cet article, non seulement afficher les battement cardiaque d’être humain mais d'afficher le nombre exacte de battement chaque minutes.


Définissons tout d'abord la notion du battement cardiaque du cœur.

Le rythme cardiaque, aussi appelé les pulsations cardiaques, est le nombre de fois que votre cœur bat par minute. Un rythme cardiaque normal dépend de l’individu, de son âge, de la taille de son corps, de son niveau de forme physique, de son état cardiovasculaire, s’il est debout ou assis, s’il prend ou non des médicaments et même de la température de l’air. Les émotions peuvent aussi avoir un impact sur le rythme cardiaque, étant donné que ce dernier s’élève quand un danger est détecté ou si l’on vit d’autres facteurs de stress.

Ceci tout le monde le connait, comme étant des électroniciens notre définition de ce dernier est comme ceci:

La fréquence cardiaque est le nombre de battements cardiaques (ou pulsations) par unité de temps (généralement la minute). C'est une notion quantitative qui peut aussi se définir en cycles par seconde, par l'inverse de la période.
La fréquence cardiaque au repos varie selon l'âge :
  • Nouveau-né : 140 +/- 50
  • 1–2 ans : 110 +/- 40
  • 3–5 ans : 105 +/- 35
  • 6–12 ans : 95 +/- 30
  • adolescent ou adulte : 70 +/- 10
  • personne âgée : 65 +/- 5.

Donc il s'agit d'un signal a haute fréquence et très faible amplitude a le faire mesurer afficher et calculer

Le Principe de faire adapter se petit signal au niveau visuel est basée sur le circuit photo transistor avec Led a coté.
Afficher l'image d'origine .
Comment ça fonctionne ? 
c'est tout a fait simple, en faite il s'agit d'une diode Led capable a convertir l'alimentation récu a travers son anode vers un rayonnement lumineux, ce dernier va se communiquer avec un photo transistor.
Un photo-transistor est un composant électronique capable de réagir à la lumière (photo en grec) en laissant passer plus ou moins de courant.
Comme les transistors, le photo-transistor est conçu selon une base, yb émetteur, un collecteur. Mais la base est sensible à la lumière et contrôle donc le passage du courant dans le collecteur. Certains modèles de transistors peuvent d’ailleurs être limés jusqu’à faire apparaitre leur base pour que la lumière agisse dessus.
Le photo-transistor est beaucoup plus sensible qu’une photo-diode. Un montage classique à base de photo-transistor est le Darlington : un photo-transistor contrôle un transistor classique, très efficace pour des barrières lumineuses ou des détections d’obstacles.

Alors imaginons qu'on va mettre le doigts d'un être humain entre ces deux composants électroniques, la sortie sur le collecteur de photo transistor va s’influencer directement avec le battement cardiaque réagit au doigts,
D'ici ça sorte le principe le reste c'est de savoir manipuler ce signal pour être affichable et mesurable simplement.
Pour ceci j'ai réalisé ce montage composé de quelques filtres et des amplificateurs opérationnelles fonctionnent en régime linéaire.

 Coté matériels et équipement nécessaire y a rien cher puisque il s'agit des petits résistances et des petits condensateurs pas plusse et j'ai basé mon amplification/filtrage sur le circuit intégré LM324 qui inclus dedans déjà 4 amplificateurs.
Pour le test sur isis j'ai remplacé le signal sortie du collecteur de transistor par un générateur simple de pulsation de valeur 3.4 Hz à peut prés du fréquence de battement optimal de cœur humain.

L'allure de signal Vout sur un oscilloscope est comme ceci indiqué au vidéo:



Coté Programmation tout est clair ici :

// Let's Electronic by Aymen Lachkhem
// Simple Heart Rate Mesurement Using PIC

  // PIC16F628A  et clack = 4Mhz


sbit IR_Tx at RA3_bit;  // Sortie de phototransistor vers port RA3 de pic
sbit DD0_Set at RA2_bit;  // Cablage 3digit  : 7 seg 1
sbit DD1_Set at RA1_bit;  // Cablage 3digit  : 7 seg 2
sbit DD2_Set at RA0_bit;  // Cablage 3digit  : 7 seg 3
sbit start at RB7_bit;
unsigned short j, DD0, DD1, DD2, DD3;
unsigned short pulserate, pulsecount;     // pulse count = baud rate in 15 secondes et pulse rate = pulse count * 4 (une minute)
unsigned int i;
///////////////////////////////////////// Configuration d'affichage de 7 seg 3 digit nombres /////////////
unsigned short mask(unsigned short num) {
 switch (num) {
 case 0 : return 0xC0;
 case 1 : return 0xF9;
 case 2 : return 0xA4;
 case 3 : return 0xB0;
 case 4 : return 0x99;
 case 5 : return 0x92;
 case 6 : return 0x82;
 case 7 : return 0xF8;
 case 8 : return 0x80;
 case 9 : return 0x90;
 } //case end
}
/////////////////////////////// delay d'amortissement //////////
void delay_debounce(){
 Delay_ms(300);
}
///////////////////////////// delay de refresh ////////////////////
void delay_refresh(){
 Delay_ms(5);
}
///////////////////////// fonction compter les pulsation ////////////
void countpulse(){
 IR_Tx = 1;                    ////////////////// activer la diode led du capteur ///////////////
 delay_debounce();            ////////////////// les deux delays///////////
 delay_debounce();
 TMR0=0;                   //   activer   le Timer de Pic
 Delay_ms(15000);  // Delay 15 Sec
 IR_Tx = 0;          // desactiver la diode led apres 15 secondes
 pulsecount = TMR0;   // lire la valeur de compteur
 pulserate = pulsecount*4;  // multiplier la valeur * 4
}
 ///////////////// fonction affichage //////////////
void display(){
  DD0 = pulserate%10;            //////////////// affichage de centaine sur le 7 seg 3
  DD0 = mask(DD0);
  DD1 = (pulserate/10)%10;      ///////////// affichage de disaine sur le 7 seg 2
  DD1 = mask(DD1);
  DD2 = pulserate/100;              ///////////// affichage de disaine sur le 7 seg 1
  DD2 = mask(DD2);
  for (i = 0; i<=180*j; i++) {        /////////////////// si le 7 digit que tu va utiliser est cathode commun remplace les 1 par des 0 et vis vers sa
    DD0_Set = 0;
    DD1_Set = 1;
    DD2_Set = 1;
    PORTB = DD0;
    delay_refresh();
    DD0_Set = 1;
    DD1_Set = 0;
    DD2_Set = 1;
    PORTB = DD1;
    delay_refresh();
    DD0_Set = 1;
    DD1_Set = 1;
    DD2_Set = 0;
    PORTB = DD2;
    delay_refresh();
    }
  DD2_Set = 1;
}

void main() {
 CMCON = 0x07;    // désactiver le comparateurs de pic pour fonctionner en regime complet
 TRISA = 0b00110000; // declaration de RA4 comme input = sortie de capteur AMPLIFEééé et STABLE ( pour la stabilisation j'ai utilisé lm324 de ST
 TRISB = 0b10000000; // declaration de RB7 comme entré = button qui enclenche la mesure de heart rate
 OPTION_REG = 0b00101000; // Activation de timer
 pulserate = 0;     // initialisation de pulse rate
 j = 1;             // initialisation de compteur
 display();        // test affichage = affiche 000 sur les 3 digit
 do {
  if(!start){            // le button rb7= start enclenche la mesure
   delay_debounce();      // delay
   countpulse();          // compter les pulsation
   j= 3;
   display();             // Affichage de valeur compter * 4
  }
 } while(1);  // boucle loop 
}

La vidéo si dessous vous aidera de plusse a connaitre le principe du fonctionnement:


















     

Aucun commentaire:

Enregistrer un commentaire