Electronique > Réalisations > Lampadaire multicolore 002

Dernière mise à jour : 25/04/2010

Présentation

Suite de mon lampadaire multicolore 001, après de nombreuses réactions et commentaires de la part des visiteurs du site. Cette version est basée sur l'utilisation d'un PIC de type 16F628A (une ancienne version avait été réalisée avec un 16F84), et le nombre de composants total est fortement revu à la baisse.

lampadaire_multicolore_002_pcb_3d_a

Il faut dire que la réalisation de ce second lampadaire a été pour moi l'occasion de me pencher un peu plus sur la programmation des PICs, puisqu'il s'agissait d'un de mes premiers montages utilisant ce genre de composant.

Avertissements

La première version de ce lampadaire 002 était basé sur un code logiciel pas vraiment au point. Ca fonctionnait certes, mais les leds clignotaient de façon désagréable au moment des réglages. Le code qui était mis à disposition avant le 25/04/2010 n'était pas terrible (normal, je débutais avec les PIC), celui proposé désormais (à compter du 25/04/2010) résoud le problème.

Fonctions implémentées ou à venir

Ce montage ne permet que les variations manuelles et indépendante des trois couleurs RVB, ce qui correspond au minimum vital. J'insiste bien sur le fait que cette version du lampadaire est une version "allégée". Une autre version plus complète est sur les rails, qui utilise un PIC 16F877, et qui dispose de fonctions supplémentaires (affichage LCD, modes manuel ou aléatoire, télécommande infrarouge, sauvegarde presets). Pour plus de détails, merci de consulter la page Lampadaire multicolore 003.

Le schéma

Pour éclaircir le schéma, j'ai représenté chacun des trois groupes de leds par une led unique. La tension de +5 V présente sur leur anode peut en effet être plus élevée, sans être commune évidement au +5 V du PIC, pour lequel un régulateur de tension additionnel (type 78L05) peut dans se cas se révéler nécessaire.
 
Lampadaire multicolore 002

Idée générale
Le principe général repose sur la modulation de largeur d'impulsion (PWM ou MLI), que j'avais déjà mise en oeuvre pour mon premier lampadaire multicolore. La grosse différence ici est le nombre de composants nécessaires. Alors que dans la première version j'utilisais un NE555 avec tous ses composants satellite pour chaque voie R, V et B, un seul composant est désormais requis. Contrepartie non négligeable, le composant en question doit être programmé, ce qui impose d'avoir le matériel nécessaire pour le faire, ou de connaitre quelqu'un qui peut le faire pour vous. Je ne conseille pas une méthode plus que l'autre (NE555 ou PIC), à chacun ses préférences. Bien, modulation de largeur d'impulsion, donc. Certains PIC offrent de façon "native" ce type de fonction (cas du 16F877 par exemple), d'autres non (cas du 16F84 par exemple). Alors pourquoi utiliser un 16F84 ou un 16F628 et non un 16F877 ? Parce que le 16F877 n'offre que deux modules PWM, qu'il m'en fallait au moins trois, et que je devais donc trouver une autre solution. Quitte à trouver une autre solution, autant essayer de la mettre en oeuvre sur un PIC moins couteux. J'ai donc développé mon programme pour produire des signaux modulés en largeur d'impulsion sur trois sorties, avec possibilité de modifier chacune d'elle de façon indépendante. Pour cela, je stocke dans un tableau, les valeurs de luminosité en cours pour chaque couleur, ces valeurs pouvant être comprises entre 0 % et 100 %, une valeur de 50 % correspondant à une luminosité médiane, la valeur de 0 % correspondant à l'extinction complète et la valeur de 100 % correspondant à l'allumage plein feu.

Réglage luminosité
Pour modifier le taux de luminosité de chaque couleur, il suffit d'appuyer sur les boutons poussoirs correspondants :
- SW1 / R-Up = lumière rouge plus forte
- SW2 / R-Down = lumière rouge moins forte
- SW3 / G-Up = lumière verte plus forte
- SW4 / G-Down = lumière verte moins forte
- SW5 / B-Up = lumière bleue plus forte
- SW6 / B-Down = lumière bleue moins forte
L'interrupteur SW7 (Simple / Continu) permet de spécifier comment l'appui sur les poussoirs SW1 à SW6 doit être "interprété".
- Si SW7 ouvert (ou aucun interrupteur raccordé), il faut appuyer plusieurs fois sur les poussoirs pour augmenter ou diminuer l'intensité d'une couleur. Le fait de laisser le doigt appuyé sur les poussoirs ne conduit pas à une variation continue, mais juste d'un cran.
- Si SW7 fermé, l'appui en continu sur les poussoirs agit comme plusieurs appuis successifs et rapprochés, et la luminosité varie donc en continu tant qu'on laisse le doigt dessus.

Sauvegarde des réglages
La sauvegarde s'effectue de façon automatique si la luminosité d'une couleur au moins a été modifiée en plus ou en moins. Afin de ne pas effectuer de sauvegarde répetée, cette dernière à lieu au bout de quelques secondes de non réglage. Il est également possible d'effectuer la sauvegarde de façon manuelle en appuyant sur le bouton poussoir SW8, mais ce dernier à quelque chose de facultatif qui me plait bien.

Etage de sortie
Il est constitué ici de transistors darlignton de puissance de type TIP122, pour permettre le câblage d'un très grand nombre de branches de leds, ou l'utilisation de leds qui consomment plus de courant que la moyenne. En effet, pour un usage avec des leds consommant peu (20 mA par exemple), même de type très haute luminosité, de simples 2N2222 peuvent amplement suffire. Si une seule led est implantée par couleur, vous pouvez même les raccorder directement sur les sorties du PIC, sans transistors additionnels (anodes côté PIC et cathodes à la masse).

Sauvegarde derniers réglages
Les derniers réglages effectués sont mémorisés en EEProm, ce qui permet de retrouver la couleur souhaitée à la remise sous tension.

Téléchargement sources

L'archive suivante comporte le fichier source en language pascal et la totalité des fichiers générés par le compilateur (*.hex, *.asm, etc).
Lampadaire multicolore 002.zip - pour 16F628A (version du 25/04/2010)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Remarques et corrections

25/04/2010
- Modification du code logiciel dans le but de réduire les clignotements intempestifs des leds lors des réglages de luminosité plus ou moins. Les commutations PWM se font désormais au niveau interruption et non plus dans le corps principal du programme, lequel n'intègre désormais plus que les routines liées à la surveillance des entrées du port B (boutons poussoirs). En outre, la sauvegarde en EEProm des divers réglages n'est plus effectuée à chaque modification de luminosité de chacune des sorties RVB, cela prenait trop de temps processeur et contribuait fortement aux défauts constatés. Il faut désormais sauvegarder la conf en cours par appui manuel sur le poussoir SW8 / Save. Si j'ai un peu de temps à y consacrer, j'ajouterai une fonction de sauvegarde automatique si appui sur au moins un bouton poussoir, et après une minute d'inactivité.

Remarques des lecteurs

- Vincent D., adepte des PICs, m'a proposé de simplifier le montage en supprimant le réseau de résistance que j'avais mises sur les entrées du port B, et de câbler les poussoirs vers la masse plutôt que vers le +5 V, en exploitant la possibilité de configurer les entrées du port B avec résistances de rappel internes vers le +5 V (pullup). C'était bien sûr une excellente idée (j'ignorais cette possibilité lors de mes débuts avec les PICs), un grand merci d'avoir pris le temps de m'écrire pour me faire cette proposition et surtout pour me détailler comment faire. Voir aussi page Logiciels - PIC - Bases - MP - Lecture bouton poussoir.
- Christophe L. me suggére d'ajouter une fonction de variation aléatoire dont la vitesse puisse être ajustée. J'avais pensé implémenter la fonction de variation aléatoire, mais je n'avais pas pensé à rendre variable sa vitesse de variation. Bonne idée là aussi, merci, que j'essayerai de mettre en oeuvre dans mon Lampadaire multicolore 003.

Circuit imprimé

Non réalisé. Vue 3D uniquement là pour donner un aperçu des composants utilisés.