Electronique > Réalisations > Coeur clignotant 002

Dernière mise à jour : 09/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 dans un socle de petites 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 (commun à toutes les versions)

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

   

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".

   

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 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 - 20/05/2024

Deux fichiers compilés sont mis à disposition :
- electronique_coeur_clignotant_002_12f675_wo_fade.hex : version sans fondu, présence de JP1 non requise
- electronique_coeur_clignotant_002_12f675_w_fade.hex : version avec fondu, présence de JP1 requise

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

   

Prototype

Circuit 002 réalisé 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 serait encore mieux avec les LED en forme de coeur. Chaque chose en son temps...

   

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

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.