Electronique > Réalisations > Coeur clignotant 002

Dernière mise à jour : 30/06/2024

Présentation

Ce coeur est différent de mon premier coeur clignotant. Il ne se met pas automatiquement en route à la tombée de la nuit, mais il présente une caractéristique que ne possède pas son ancètre : il affiche un battement caractéristique de type "boum-boum...boum-boum...".

coeur_clignotant_002_pcb_3d_front  coeur_clignotant_002b_pcb_3d_top  coeur_clignotant_002c_pcb_3d_top

Trois versions sont proposées, toutes avec un microcontrôleur PIC 12F675 :
- Schéma 002 : version de base pour 1 ou 2 LED (pas de dessin lumineux de coeur)
- Schéma 002b : avec LED en forme de coeur, pour LED ordinaires
- Schéma 002c : avec LED en forme de coeur, pour LED haute luminosité

Une réalisation à base de composants non programmable permettant d'obtenir les mêmes résultats visuels était tout à fait envisageable, mais dans le cas présent, j'ai opté pour un petit microcontrôleur PIC, car il fallait pouvoir intégrer le circuit 002 dans un socle de faibles dimensions. Le choix d'utiliser un composant programmable n'a donc été dicté ici que dans un soucis de simplification maximale au niveau matériel, tout du moins pour la version de base 002. Les deux versions 002b et 002c occupent plus d'espace et leur message est plus "évident". 

Schéma 002 - Pour une ou deux LED

Si ce montage est d'une complexité abominable, c'est parce qu'il comporte quatre potentiomètres de réglage.

coeur_clignotant_002

La particularité de ce montage réside dans un réglage indépendant des temps forts et faibles du "battement cardiaque", ce qui justifie la présence des quatre terribles potentiomètres RV1 à RV4. On peut en effet régler les temps suivants :

Le cavalier JP1/Mode permet de définir le type de transition entre allumage et extinction (et inversement) :

Le principe général de fonctionnement est très simple. Il consiste à lire la tension appliquée sur les quatre lignes d'entrée/sortie AN0 à AN3 du PIC par les potentiomètres RV1 à RV4 et à utiliser les valeur lues pour définir les quatre durées caractéristiques. Les tensions lues étant des valeurs analogiques, le PIC doit les convertir grâce à son CAN intégré (CAN = Convertisseur Analogique Numérique, ADC en anglais pour Analog to Digital Convertor). Le CAN du PIC12F675 est un modèle 10 bits (1024 échelons). Les valeurs numérisée sont ensuite utilisées pour retarder l'action suivante dans la séquence en cours et donc pour définir la durée des événements, de manière individuelle.

Le détail du programme sera vu plus loin, après présentation des autres schémas (programme identique pour toutes les versions).

   

Schéma 002b - Pour LED en forme de coeur (avec LED ordinaires)

Dans cette version, le nombre de LED a été porté à 18, c'est suffisant pour former le dessin d'un coeur. 
   
coeur_clignotant_002b
   
Le PIC à lui seul n'est pas en mesure de fournir une grande intensité de courant sur une ligne configurée en sortie (en général entre 20 mA et 25 mA maximum). Pour cette raison, il faut ajouter un transistor pour pouvoir commander plusieurs LED ordinaires branchées en parallèle (rappelons qu'une LED ordinaire requière environ 20 mA et qu'en en branchant plusieurs en parallèle, le courant consommé augmente).

Nous avons donc ici le transistor Q1 qui fait office de "tampon" entre le PIC et le paquet de LED trop gourmand. Q1 peut être un BC237 ou n'importe quel autre transistor NPN basse puissance capable de commuter un courant d'au moins 200 mA (BC547, BC517, 2N2222, etc). La valeur des résistances R2 à R7 dépend des LED utilisées et de la tension d'alimentation appliquée sur le connecteur J101. Si par exemple on dispose d'une tension de 9V et que les LED sont de type "rouges 1,6V / 20 mA", alors on devra utiliser des résistances de valeur égale à :

Rx = 9 - (3 * 1,6) / 0,02 = 480 ohms (valeur la plus proche = 470R)

Voir page Alimentation d'une LED pour plus de détails.

   

Schéma 002c - Pour LED en forme de coeur (avec LED haute luminosité)

Avec des LED haute luminosité, le courant de la LED peut être abaissé à 1 mA tout en garantissant un éclairement tout à fait suffisant. Ainsi, même avec 18 LED branchées en parallèle, le courant total ne sera que de 18 mA. On peut donc se passer du transistor tampon Q1 présent dans le schéma 002b et brancher toutes les LED directement sur la sortie du PIC (à travers une résistance série, tout de même).
   
coeur_clignotant_002c
   
La valeur des résistances R2x à R7x dépend toujours du type de LED utilisé et de la tension d'alimentation du PIC qui ici est fixée à 5 V. Si par exemple les LED sont de type "bleues 4,0V / 20 mA" et qu'on les fait travailler à 1 mA, on devra utiliser des résistances de valeur égale à :

Rx = (5 - 4,0) / 0,001 = 1000 ohms (1k)

Certaines LED haute luminosité ont un rendement lumineux tel qu'elles arrivent à éclairer de manière fort convenable avec un courant de seulement 0,1 mA (100 uA). Dans ce cas, des résistances de limitation de courant de 10k conviennent très bien :

Rx = (5 - 4,0) / 0,0001 = 10000 ohms (10k)

Voir page Alimentation d'une LED pour plus de détails.

   

Programme du PIC (base commune à toutes les versions)

Le programme complet (langage Pascal, éditeur-compilateur MikroPascal de Mikroe) est visible ci-après (version sans fondu ni Auto-off) :

   

var
  An0, An1, An2, An3: word;
  Out_LED: sbit at GPIO.5;

procedure CPU_Init;
begin
  CMCON := %00011111;   // comparators OFF
  NOT_GPPU_bit := 1;    // disable global pullup
  WPU := $00;           // disable pullup for GPIO
  TRISIO := %00011111;
  ANSEL  := %00011111;  // use of ADC
  ADFM_bit := 1;        // right justified
  ADC_Init;
end;

procedure ADC_GetValues;
begin
  An0 := ADC_Get_Sample(0) shr 1;
  An1 := ADC_Get_Sample(1) shr 1;
  An2 := ADC_Get_Sample(2) shr 1;
  An3 := ADC_Get_Sample(3);
end;

procedure Main_HeartBeat;
begin
  Out_LED := 1;
  VDelay_ms(An0);
  Out_LED := 0;
  VDelay_ms(An1);
  Out_LED := 1;
  VDelay_ms(An2);
  Out_LED := 0;
  VDelay_ms(An3);
end;

begin
  CPU_Init;
  while true do
  begin
    ADC_GetValues;
    Main_HeartBeat;
  end; 
end.

   

Chacune des quatre données numérisées An0 à An3 peut prendre n'importe quelle valeur entre 0 et 1023 (CAN 10 bits => 1024 échelons) et être directement utilisée pour créer un délai exprimé en millisecondes. Ainsi, une tension de 2,5 V correspond dans le cas présent à une valeur numérique de 511 et cette valeur peut servir pour créer un délai (retard) de 511 ms. 
   

Remarques

   

Transitions franches ou progressives

Les transitions entre allumage et extinction de la ou des LED peuvent être franches (directes) ou douce (avec fondu FadeIn et FadeOut). Pour obtenir des transitions progressives, deux solutions peuvent être mises en oeuvre :

La solution adoptée ici est purement logicielle : un signal PWM (de faible résolution mais suffisant pour cette application) est créé pour donner l'illusion que la lumière émise par les LED croît et décroît progressivement à chaque "pulsation cardiaque".

   

Extinction automatique (auto-off)

La fonction d'extinction automatique (auto-off) a été prévue pour limiter la consommation électrique au cas où on oublie d'éteindre le coeur clignotant et que ce dernier est alimenté avec une pile de 9 V. Cette fonction provoque la mise en veille profonde du système au bout de quelques minutes. Quand le circuit est en veille, la consommation électrique du PIC est très réduite, de l'ordre de 3 nA (0,003 uA). Pour cela, la fonction de mise en sommeil (SLEEP) est précédée de la désactivation des modules qui ne servent plus, à savoir la référence de tension (VREN=0), le convertisseur AD (ADON=0) et le Timer1 (TMR1ON=0).

Important : pour bénéficier d'une consommation globale très réduite, le régulateur de tension U101 doit lui aussi présenter une consommation propre très faible. Le 78L05 que j'ai utilisé consomme à lui seul 3 mA, ce qui ruine les efforts obtenus avec la mise en veille du PIC. Pour bénéficier pleinement des bienfaits de la mise en sommeil, il faut utiliser un régulateur de tension à très faible consommation, par exemple le STLQ50C50R de Texas Instrument dont le courant de repos est de seulement 3 uA (courant max de sortie de 50 mA, amplement suffisant pour notre application).

A noter que la mise en veille n'est pas "directe". Avant d'y entrer, le coeur réduit la fréquence des battements comme indiqué ci-après :
- entre la mise en route et la 2è minute de fonctionnement, les battements suivent la cadence réglée par l'utilisateur
- entre la 2è et la 4è minute, les battements sont espacés de 2 secondes
- entre la 4è et la 6è minute, les battements sont espacés de 5 secondes
- à la 6è minute, le système entre en mode sommeil (toutes LED éteintes, consommation minimale)

Pour réarmer le coeur, il suffit de l'éteindre et de le rallumer.

Comme il n'y avait plus de broche libre sur le PIC, j'ai été contraint de proposer plusieurs versions de logiciels. Une fois le programme de votre choix flashé dans le PIC, la fonction sera ou non présente et non modifiable (sauf bien sûr par reprogrammation du PIC).

   

Suppression des quatre potentiomètres ?

Il est possible de remplacer les quatre potentiomètres ajustable RV1 à RV4 par quatre ponts diviseurs résistifs fixes, si on accepte une vitesse de clignotement (battement) fixe. Dans ce cas, à vous de déterminer les valeurs de résistances qui vous conviennent le mieux.

Il est également possible de supprimer totalement lesdits potentiomètres (sans les remplacer par quoi que ce soit), là encore en acceptant une vitesse de clignotement fixe. Mais dans ce cas, le logiciel doit être modifié en donnant aux variables An0 à An3 une valeur fixée "en dur" que vous déterminerez expérimentalement. Vous pouvez le faire vous-même, puisque le code source est fourni et que la taille du programme est inférieure à la limite imposée par la version gratuite de MikroPascal.

   

Logiciel(s) du PIC

Programme compilé (*.hex) disponible en libre service dans l'archive zip suivante (code source version sans fondu dans le texte ci-devant) :
Coeur clignotant 002 - 12F675 - 24/06/2024

Trois fichiers compilés sont mis à disposition :
- electronique_coeur_clignotant_002_12f675_wo-fade.hex : version sans fondu et sans Auto-off (version d'origine)
- electronique_coeur_clignotant_002_12f675_w-fade_wo-autooff.hex : version avec fondu et sans Auto-off
- electronique_coeur_clignotant_002_12f675_w-fade_w-autooff.hex : version avec fondu et avec Auto-off

Pour les programmes avec fondu (*w-fade*), la présence de JP1 est requise (il ne faut pas laisser la ligne GP3/MCLR en l'air).

Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

   

Prototypes

Circuits 002 et 002b réalisés selon implantation visible plus loin.

   
coeur_001_proto_rm_001a coeur_001_proto_rm_001b coeur_001_proto_rm_001c
   
Testé OK avec la version logicielle intégrant la fonction de fondu. Je trouve l'effet sympa et "réaliste" avec les réglages adéquats, mais nul doute que le rendu est nettement mieux avec les LED en forme de coeur.

coeur_002b_proto_rm_001a coeur_002b_proto_rm_001c coeur_002b_proto_rm_001d coeur_002b_proto_rm_001e

A noter les supports/entretoises de LED que j'ai placés pour deux raisons : d'une part pour aligner les LED en hauteur, d'autre part pour étendre la surface éclairée (les LED éclairent en effet un peu en dessous). Vu de face, c'est un peu trop fort, la valeur des résistances de limitation de courant que j'ai placées (6 x 470R) gagnerait ici à être augmentée. Les LED sont données pour une tension nominale de 3V0 à 3V6, je ne pensais pas qu'elles éclaireraient autant en étant sous-alimentées (calcul R pour 2V8 sur chaque LED et courant de 1,2 mA).

   

Circuits imprimés (PCB)

PCB réalisés en double face pour les trois versions 002, 002b et 002c. Je n'ai pas inclus (volontairement) de connecteur ICSP sur les circuits, le PIC doit donc être programmé "à côté" (on peut se le permettre pour un projet de ce type).
   
coeur_clignotant_002_pcb_components_top
Version 002 pour 1 ou 2 LED
   
coeur_clignotant_002b_pcb_components_top coeur_clignotant_002c_pcb_components_top
Version 002b et 002c pour LED en forme de coeur
 
Dessins PCB au format PDF

   

Historique

30/06/2024
- Ajout fonction d'extinction automatique (Auto-off) dans le programme du PIC. Détails dans le texte.

23/06/2024
- Ajout photos prototype version 002b (avec 18 LED en forme de coeur).

09/06/2024
- Ajout photos prototype version 002 (avec une seule LED).

26/05/2024
- Ajout mode fondu pour transitions douces dans le programme du PIC (même programme pour versions 002, 002b et 002c).
- Ajout schéma et PCB version 002b (avec dessin de coeur, pour LED standard).
- Ajout schéma et PCB version 002c (avec dessin de coeur, pour LED haute luminosité).

19/05/2024
- Première mise à disposition.