Electronique > Réalisations > Affichage / Mesures > Indicateur battements de coeur 001

Dernière mise à jour : 08/02/2015

Présentation

Cet indicateur a été conçu pour répondre aux besoins suivants :
Peu de personnes le savent et moi-même ne l'ai appris qu'en 2011, un rythme cardiaque aux variations régulières est très bon signe, alors qu'un rythme cardiaque parfaitement régulier est un signe inquiétant ! Je ne fais pas allusion aux variations brutales de rythme (arythmie) qui elles aussi ne sont pas vraiment bon signe... L'appareil décrit ici permet de façon totalement autonome de visualiser les variations de rythme. Il dispose en outre d'une sortie RS232 qui permet d'envoyer des données aptes à dessiner une courbe en temps réel sur un ordinateur, par exemple avec le logiciel (freeware) IndicBattCoeur que j'ai développé pour l'occasion.

Avertissement

Cet appareil ne peut pas être utilisé en milieu médical !

Schéma

Le schéma met en oeuvre un PIC, c'est une solution élégante que j'ai trouvée pour concentrer les fonctions demandées (calculs mathématiques) en peu de place. L'étage d'entrée demande quant à lui un peu plus de composants car il faut traiter une information qui est loin d'être un simple signal logique TTL. Ceci dit l'ensemble n'est tout de même pas si impressionnant que ça.

indic_batt_coeur_001

Pincipe général de fonctionnement
La captation de l'information du rythme cardiaque s'effectue avec un émetteur de lumière et un capteur de lumière. Entre les deux, un doigt. Un étage d'entrée adapté au récepteur de lumière met en forme des variations de tension liées à des variations de lumière qui corresponde à chaque battement du coeur. Une fois les informations lumineuses traduites en informations logiques propres, ces dernières sont envoyées à un PIC qui assurent les fonctions suivante :

Etage d'entrée (amplification)
Pour ce qui est de l'émission de lumière, on ne va s'embetter, une simple LED émettant assez de lumière conviendra très bien - c'est pourquoi j'ai opté pour une LED haute luminosité (LED-HL). On aurait aussi pu s'orienter vers une captation d'impulsions électriques avec des électrodes posées aux bons endroits du corps, mais c'est un peu plus complexe à réaliser d'un point de vue électronique (un filtrage sérieux est requis pour ne pas être embêté par les parasites environnants), et les électrodes qui donnent de bons résultats (qui sont faites pour cet usage) ne se trouvent pas si facilement. Le récepteur de lumière (ici une LDR mais on aurait pu aussi utiliser une photo-diode ou un photo-transistor) reçoit un flux lumineux dont l'intensité varie à chaque pulsation cardiaque, car la lumière émise par la LED passe au travers du doigt et des veines, lesquelles deviennent plus "foncées" lors d'un afflux sanguin provoqué par chaque coup de pompe. Les variations de flux lumineux captées par le récepteur de lumière sont très faibles (quelques mV), et il faut prendre quelques précautions pour les amplifier sans trop les perturber en même temps. Mais ça reste assez facilement réalisable, sinon on n'en parlerait pas ici de cette façon. D'ailleurs, le montage auquel on a recourt ici est un simple amplificateur de tension alternative, dont le gain est suffisement élevé pour porter les quelques mV de variation électrique captée au niveau de la LDR, à un signal électrique de quelques volts pour s'adapter aux niveaux logiques des portes qui suivent. L'amplification totale est assurée par deux amplificateurs, un dont le gain est fixé à +40 dB (40 dB = rapport de 100 en tension), l'autre dont le gain est ajustable entre 0 dB et +40 dB. On peut ainsi disposer d'un gain total ajustable entre +40 dB et +80 dB (80 dB = rapport de 10000 en tension). En réalité un gain global de 80 dB se révèle trop élevé, mais on a de la sorte une bonne marge de manoeuvre. Les variations de signal observées aux bornes de la LDR une fois amplifiées aboutissent au point A, que l'on raccorde à l'entrée du monostable de mise en forme qui fait suite.

Monostable et mise en forme
Les signaux amplifiés obtenus en sortie de l'amplificateur d'entrée sont encore sous leur forme "analogique" et il n'est pas conseillé de les laisser en l'état car à ce stade ils sont quelque peu "dérangés" et ne se ressemblent pas forcement d'un coup de coeur à l'autre. Il convient donc de les nettoyer et de leur donner une forme respectable, travail qui ne pose aucun problème au monostable U2:A de type CD4538. Ce dernier est déclanchable sur un front descendant ou montant, j'ai choisi ici de façon arbitraire de le faire déclancher sur des fronts montants. Les variations de tension issues de la LDR (battement de coeur) se traduisent par des variations de tension de plusieurs centaines de mV ou de plusieurs volts au point A, un coup au dessus de la tension de repos de +2,5 V, un autre coup en dessous de cette valeur. C'est la hausse de tension qui ici est intéressante car c'est elle qui déclanche le monostable, lequel fournit sur sa sortie Q (broche 6 de U2:A) une "impulsion" positive propre et calibrée en temps. Ce temps dépend de la valeur donnée à C3 et R12, il est ici voisin de 180 ms (vous pouvez adopter pour C3 toute valeur comprise entre 100 nF et 220 nF). Voilà un signal enfin digne d'être avalé par un microcontrôleur, transit via point B sur le schéma.

Affichage autonome (précision grossière)
Un barreau de 9 LED permet de suivre les variations de rythme cardiaque en temps réel, la mise à jour est effectuée à chaque nouveau battement de coeur.

indic_batt_coeur_001_proto_001k

Au repos, la LED centrale est allumée, et au fil du temps ce sont les LED de gauche ou de droite qui s'allument plus ou moins, signalant respectivement une décélération ou une accélération du rythme. Mais comment définir le niveau milieu, sachant que le rythme moyen n'est pas connu quand on commence l'analyse ? Simplement en attendant un peu. Au bout d'un dizaine de battements (nombre arbitraire mais pas totalement irréfléchi), on dispose d'une moyenne suffisement pertinente qui sert de valeur de référence. A partir de cette valeur de référence, les autres LED indiquent des écarts relatifs de -40 à +40 avec un pas de 10, ou des écarts relatifs de -20 à +20 avec un pas de 5%.
A chaque nouveau battement de coeur, un nouveau calcul est effectué sur les derniers intervalles de temps observés et on oublie les plus anciens. Le nombre maximal de points de mesures utilisés pour établir la moyenne est de 8 (tiens, c'est une puissance de 2, sûrement une coïncidence). Une LED "Over" s'allume quand aucune impulsion n'est décelée pendant au moins 5 secondes consécutives, elle est branchée sur la broche RA4 du PIC qui est en collecteur (ou drain) ouvert. Donc cathode LED côté PIC et anode branchée sur le +5 V (avec résistance de limitation de courant, ça va presque de soi).

Affichage sur ordinateur (précision fine)
Les données calculées par le PIC sont précises mais le nombre volontairement limité des LED ne permet pas d'en profiter pleinement, même si l'information de tendance peut suffire pour rendre l'appareil utilisable. C'est pourquoi j'ai aussi prévu l'envoi des données brutes sur une liaison série RS232 dans un format de type Hexa (côté matériel, un MAX232 pour l'interfaçage TTL/RS232, mais on pourrait aussi fort bien se contenter de quelques composants classiques). Je disposais de deux approches possibles pour les données à envoyer :
C'est la deuxième option que j'ai choisie ici, car il me semble que même un PC un peu ancien est capable de s'en sortir. L'unique octet est donc transmis à chaque nouveau battement de coeur, et sa valeur correspond à la dernière valeur calculée qui représente le nombre de battements par minute. 

indicbattcoeur_main_001_tn
Freeware IndicBattCoeur

Le logiciel (freeware) IndicBattCoeur est on ne peut plus simple, on spécifie le numéro de port série sur lequel les données (octets) arrivent et il s'occupe du reste.

Prototype

Réalisé sur plaque d'expérimentation sans soudure pour la partie étage d'entrée et monostable. Testé avec trois LDR différentes (sur la troisième photo ci-après et en partant de la gauche, une LDR05, une LDR de récup. modèle inconnu et une LDR03).

indic_batt_coeur_001_proto_001a indic_batt_coeur_001_proto_001b indic_batt_coeur_001_proto_001c

Test étage d'entrée et monostable
La source lumineuse est ici une LED blanche très haute luminosité (15000 mcd / 25 mA). Ca fonctionne bien. Très bien même. A tel point que lorsque j'ai fini d'assembler les composants et effectué les premiers tests, la nuit tombait. Alors forcement j'ai allumé la lampe du plafond... qui est du type à incandescence. Vous imaginez ce qui s'est alors passé ? Et oui, les fluctuations de lumière liées au secteur 50 Hz étaient captées par la LDR et le monostable était continuellement redéclanché. Du coup j'ai du finir mes tests dans la pénombre. Bien sûr pour le montage final il faut faire en sorte que la cellule LDR ne soit pas soumise à une source de rayonnement externe. En ce qui concerne le gain total requis pour ce prototype, la valeur "idéale" était comprise entre +50 dB et +70 dB, selon le type de LDR testé et selon l'épaisseur du doigt - pouce et auriculaire ne permettent pas les mêmes "performances" pour un réglage de gain donné. Au début je trouvais le positionnement du doigt assez critique, mais c'est parce que le gain n'était pas assez élevé. Avec un ajustage correct obtenu de façon expérimental (comment pourrions-nous faire autrement), ça fonctionne vraiment bien et de façon reproductible. La LDR qui a nécessité le moins de gain pour un fonctionnement correct est celle dont je ne connais pas la référence (celle au centre de la photo ci-avant). Avec ce composant et en poussant un peu le gain, le système affichait non pas un clignotement (T...T...T...T) pour chaque pulsation cardiaque, mais deux clignotements rapprochés (T.T...T.T...T.T...T.T). C'est dire la précision à laquelle on peut arriver au niveau de la détection de changement d'opacité du doigt ! Dans notre cas une telle sensibilité n'est pas requise mais en plus elle est préjudiciable au bon fonctionnement du système puisque le calcul qui va suivre va travailler avec le double d'impulsions. Il faut donc faire en sorte que le système ne détecte qu'une seule variation d'opacité à chaque pouls, et au besoin augmenter le temps de l'impulsion du monostable de sorte que même à un pouls lent les deux impulsions successives de déclenchement soient "noyées" dans une seule impulsion de sortie. Pour ma part j'ai décidé de conserver la durée de l'impulsion à 200 ms environ et faire en sorte qu'une seule impulsion de déclenchement n'arrive au monostable à chaque pulsation cardiaque.

Remarques

Source lumineuse : LED ou ampoule à incandescence ?
A la suite de mes divers tests, je serais presque tenté de dire que l'ampoule à incandescence est mieux que la LED. Mais il serait plus sage d'ajouter que c'est plutôt vrai "pendant les tests", quand la source de lumière et la LDR sont susceptibles de bouger. Avec un couple LED + LDR parfaitement stable, ça fonctionne très bien avec les deux méthodes, du moment que - comme je le disais avant - la LED émette un flux lumineux suffisant. C'est par unique curiosité que j'ai essayé avec quelques ampoules à incandescence basse tension, histoire de voir ce que ça rendait.

indic_batt_coeur_001_proto_001d indic_batt_coeur_001_proto_001e indic_batt_coeur_001_proto_001findic_batt_coeur_001_proto_001g

Le verdict est le même que pour la LED : pour un fonctionnement correct, il faut assez de lumière pour que le doigt paraisse bien rouge par transparence quand on l'éclaire. Ce qui m'a le plus gêné pendant les tests (avec LED et ampoules incandescence) est que le fonctionnement n'était pas fiable si on bougeait un tout petit peu la source de lumière ou son capteur associé. Pas si simple de tenir l'ampoule ou la LED et en même temps de poser un doigt sur la LDR sans bouger du tout ! Une fois le tout bien mis en place dans un boîtier (fixation rigide - comme vous pouvez le voir sur la vidéo présentée plus loin - et à l'abri de la lumière ambiante), ça roule et il n'y a même pas besoin de retoucher aux réglages entre essais avec doigts d'adulte et doigts d'enfants.

Et avec des infrarouges ?
J'ai également fait des tests avec un système optique infrarouge fonctionnant par réflexion de type OPB706, où les parties émission et réception sont incluses dans un boîtier plastique unique et séparées d'un petit millimètre.

indic_batt_coeur_001_proto_001h
(OPB706 déconnecté puis remis en place juste pour la photo)

Résultats guère concluants en mode indicateur battements coeur, mais bon détecteur de proximité (distance 15 à 20 cm). Puis j'ai essayé avec une LED d'émission IR de type LED55C associée à un phototransistor BPW42.

indic_batt_coeur_001_proto_001i indic_batt_coeur_001_proto_001j

Et là ça fonctionne vraiment très bien (testé sur moi et sur ma fille de 6 ans), je trouve même que le réglage est beaucoup plus souple qu'avec le sysème à lumière visible. La LED55C accèpte un courant continu permanent de 100 mA, mais je l'ai limité ici à 35 mA environ, c'est amplement suffisant. Pour ma version définitive, j'opterai pour ce couple de composants.

Vidéo de démonstration
Cette vidéo montre le montage en fonctionnement avec système lumière visible. C'est filmé dans la pénombre car je n'ai pas fini le boîtier de rangement final et les fluctuations de la lumière ambiante (soleil / nuages) gênaient le fonctionnement du montage.

indicbattcoeur_001_proto_001_tn  Vidéo YouTube

Tests du programme du PIC
Premiers tests réalisés avec le PIC seul dans son coin (sans le détecteur lumineux et son circuit de mise en forme), avec ma platine EasyPic 4 reliée via port série à un PC portable équipé de mes logiciels ComTools et IndicBattCoeur. Tout est OK. Bon j'avoue que les premiers tests m'ont fait me gratter un peu la tête car seules deux ou trois interruptions étaient détectées quand j'appliquais une tension positive de +5 V sur l'entrée RB0 du PIC. A partir de la troisième impulsion, tout se bloquait et les impulsions suivantes n'étaient plus vues et donc plus aucune donnée n'était transmise sur la sortie RB2/TX. Il m'a fallu près d'une heure pour me rendre compte que j'avais tout simplement oublié une résistance de rappel entre la broche RB0 et la masse... Quelle idée aussi d'avoir un montage qui fonctionne pendant un certain temps et puis plus après, ça n'aide pas vraiment à localiser la source du problème !
Seconde série de tests réalisés avec ma platine EasyPic7, pour la version de PIC du 22/09/2013 (ajout fonction réglage d'échelle pour la partie affichage autonome).

indic_batt_coeur_001_proto_001l indic_batt_coeur_001_proto_001m indic_batt_coeur_001_proto_001n

Cette fois, j'ai utilisé un module USB/RS232 (FTDI232) pour établir une liaison série virtuelle (VCP, virtual com port) entre le PIC et l'ordinateur où était installé mon logiciel IndicBattCoeur. J'aurais bien sûr pu utiliser le module USB/RS232 prévu sur la platine de développement, mais tant qu'à faire, montrons ce qu'on peut mettre en oeuvre quand on ne possède pas une telle platine de développement et que le PC utilisé ne possède pas de port COM/RS232. Pour la simulation des battements (pas envie de refaire le proto de l'époque), j'ai utilisé mon générateur BF, dont un des inconvénients est de ne pas pouvoir descendre très bas en fréquence avec une grande précision. Je me suis contenté des valeurs qu'il m'imposait, suffisantes pour les besoins du tests. Sur la photo qui suit, on voit que la fréquence du signal en sortie du générateur est de 1,49 Hz, ce qui correspond à une valeur d'environ 90 battements par minute (1,49 * 60).

indic_batt_coeur_001_proto_001o indic_batt_coeur_001_proto_001p

Le circuit fonctionne bien après modif (ajout échelle écarts), et je reconnais que l'échelle +/-20 est plus "logique" que l'échelle +/-40 (on visualise mieux les variations qui souvent ne sont pas si énormes que ça). Ces nouveaux tests m'ont permis de déceler un petit bug dans mon logiciel IndicBattCoeur, qui bénéficie du coup d'une petite cure de rajeunissement.

Prototype d'Alain D.
Alain a réalisé ce prototype et m'en a fait un retour très complet, avec graphes oscillo à l'appui (sortie phototransisor avant et après monostable).

indic_batt_coeur_001_proto_ad_001a indic_batt_coeur_001_proto_ad_001c

indic_batt_coeur_001_proto_ad_001da indic_batt_coeur_001_proto_ad_001db

Retours d'Alain :
Mon capteur est composé d'une pince à linge équipée d'une LED IR SFH4253 et d'un phototransistor QTLP610. La position du capteur qui a donné les meilleurs résultats (signal d'amplitude la plus élevée en sortie du phototransistor) est sur la lunule de l'ongle ou de l'index. Ce montage marche parfaitement bien. L’utilisation d'un capteur Infra Rouge permet de travailler à lumière ambiante sans perturbation., mais le capteur doit bouger le moins possible. Pour la suite je ferai des essais avec un autre capteur : le tcrt1000 qui est un émetteur/récepteur IR qui fonctionne par reflection. Cela permettra de prendre le pouls sur des zones non traversantes comme le poignet ou la carotide.
Merci pour tout ça !

Logiciel du PIC

Le fichier binaire compilé (*.hex) et le code source sont disponibles dans l'archive dont le lien suit. Ecriture / compilation avec MikroPascal Pro V5.30.
Indicateur battements coeur 001 - 16F628A - 22/09/2013
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Circuit imprimé

Non réalisé.

Historique

08/02/2015
- Ajout commentaires et photos du prototype de Alain D., que je remercie.
22/09/2013
- Ajout possibilité de choisir entre deux échelles pour l'indication autonome par LED des écarts de rythme cardiaque (utilisation de la broche RA5 pour le choix de l'échelle). A celle d'origine +/-40 s'ajoute celle de +/-20.
30/10/2011
- Ajout du condensateur C6 de 47 nF en parallèle sur [RV1 + R8] pour limiter un peu plus la bande passante dans le haut du spectre (filtrage passe-bas plus énergique). Le réglage de RV1 s'en trouve facilité et les petits mouvements de doigt entre source d'émission et capteur sont moins problématiques (impulsions délivrées plus stables).
- Essais avec élements d'émission et de réception infrarouge combinés (OPB706) et discrets (LED55C et BPW42).
02/10/2011
- Ajout vidéo présentation.