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