Dernière mise à jour :
19/12/2008
Présentation
Ce lampadaire permet d'obtenir une lumière dont la couleur varie
en fonction de la position d'un potentiomètre unique.
Il s'agit
d'une version finalisée qui fait suite au
lampadaire
004
que
j'ai abandonné entre temps.
Cette version, qui s'appuie sur un PIC de type 12F675, est en effet
plus simple et revient moins cher à construire, tout en
offrant une palette de couleurs plus étendue.
Avertissement : ce
schéma n'est pas entièrement terminé, il me reste
quelques améliorations à apporter, voir paragraphe "Pas
totalement au point".
Schéma
Ce schéma est complet.
Horloge / oscillateur
Pas de quartz dans ce montage, car l'oscillateur interne de 4 MHz du
PIC est mis à contribution.
PWM et luminosité variable
Avec le programme flashé dans le PIC, la fréquence de
clignotement des quatre ensembles de leds est de l'ordre de 130 Hz, ce
qui ne se voit pas. En réalité, le cadencement interne
est de l'ordre de 13 KHz, mais le signal PWM constitué avec les
moyens du bord est basé sur un cycle de cent périodes
d'horloge, ce qui explique le rapport de 100. Par exemple, si les leds
rouges sont soumises à un rapport cyclique de 25 %, elles sont
allumées pendant 25 cycles du cadencement interne et sont
éteintes pendant 75 cycles de ce même cadencement, ce qui
correspond à une luminosité de 25 %. Pour plus de
détails concernant ce mode de fonctionnement, appelé PWM
ou MLI, voir page
Modulation
de largeur d'impulsion.
Commande des leds
Si on s'était contenté d'une seule led haute
luminosité / basse consommation par sortie, on aurait
très bien pû se passer des transistors Q1 à Q4.
Mais j'ai préféré ici pouvoir faire "large", et
l'alimentation des leds est donc séparée de
l'alimentation du PIC. Vous pouvez ainsi, en fonction de leur nombre,
décider plus simplement de la valeur de leur tension
d'alimentation et du nombre de branches (plus de détails
à la page
Alimentation
d'une led).
Mélange des couleurs
Le logiciel du PIC intègre quatre modes de mélange des
couleurs, chaque mode peut être sélectionné l'un
après l'autre grâce à l'interrupteur SW1. Le
premier mode (mode 001) correspond au mode de distribution des couleurs
représenté par le graphe ci-après :
Explication du fonctionnement pour le Mode 1
Une tension de 0V appliquée à l'entrée In1 (AN0,
broche 7 du PIC) correspond à la valeur 0 sur une plage comprise
entre 0 et 1023, puisque le convertisseur analogique / numérique
(CAN) du PIC travaille sur 10 bits. Une tension de 5V correspond
à la pleine échelle du CAN, soit la valeur de 1023 (et
non 1024 car la valeur 0 est la première des 1024 valeurs
possibles), la tension de référence ayant
été spécifiée - par logiciel - comme devant
être égale à VDD (VDD est l'alim positive du PIC,
soit +5V). Sur cette plage de tension comprise entre 0V et 5V, on
trouve donc 1024 valeurs de tension possibles, que j'ai
séparées en quatre groupes de valeurs :
- 1er groupe : valeurs comprises entre 0 et 254 (tension comprise entre
0V et 1,25V)
- 2ème groupe : valeurs comprises entre 255 et 511 (tension comprise
entre 1,25V et 2,5V)
- 3ème groupe : valeurs comprises entre 512 et 767 (tension comprise
entre 2,5V et 3,75)
- 4ème groupe : valeurs comprises entre 768 et 1023 (tension comprise
entre 3,75V et 5V)
Le logiciel du PIC fait correspondre une intensité lumineuse
donnée à chaque couleur, en fonction de la valeur de la
tension lue sur l'entrée analogique. Regardons en particulier
comment la couleur verte est traitée, à l'aide du graphe
mode 1 simplifié suivant.
Le "plancher" de chaque zone de couleur représente
l'intensité lumineuse minimale de la couleur
considérée, et le "plafond" représente son
intensité lumineuse maximale. Ainsi, pour la couleur verte, on
observe un minimum d'intensité pour les valeurs 255 et 1023, et
un maximum d'intensité pour toutes valeurs comprises entre 512
et 767. Entre les valeurs 255 et 511, l'intensité croit en
même temps que la valeur. Et entre les valeurs 767 et 1023,
l'intensité décroit quand la valeur continue d'augmenter.
Voyons deux exemples pratiques avec le mode 001 :
Exemple 1 : avec une valeur de
383 (entre 255 et 511), le rouge et le vert sont à 50 %
d'intensité, le jaune est à 100 % d'intensité, et
le bleu est à 0 % d'intensité.
Exemple 2 : avec une valeur de
896 (entre 767 et 1023), le rouge et le jaune sont à 0 %
d'intensité, le vert est à 50 % d'intensité, et le
bleu est à 100 % d'intensité.
Tout cela n'est que de la logique et des formules mathématiques
très simples, qui permettent en fonction de la valeur lue,
d'allumer pleinement ou en partie une ou plusieurs couleurs. Notez que
dans ce mode 001, le chevauchement des couleurs rouge et bleue n'a
jamais lieu, ce qui signifie que certaines couleurs ne seront jamais
représentées. L'idée que j'ai eu pour ce mode
n'était pas de pouvoir couvrir toutes les couleurs possibles,
mais de pouvoir passer progressivement d'une couleur "chaude" à
une couleur "froide".
Mode 002
Dans ce mode, les quatres couleurs peuvent se trouver
mélangées, mais jamais avec une intensité maximale
pour les quatre en même temps.
Mode 003
La couleur jaune n'a pas été inclue dans ce mode 003, et
contrairement aux deux modes précédents, les trois
couleurs R, V et B peuvent se trouver ensemble avec un max pour les
trois en même temps pour la valeur 511 (potentiomètre en
position médiane). La position centrale du potentiomètre
doit donc donner une couleur assez "blanche", avec une
éventuelle composante colorée légère qui
dépendra du type des leds utilisées.
Mode 004
Ce mode 004 ne permet aucun mélange des couleurs, il n'y en a toujours
qu'une seule à la fois.
La "forme" des zones peut paraître bizarre, mais elle permet une
transistion douce en terme d'intensité lumineuse, à
chaque changement de couleur. Quand on passe du rouge au jaune,
l'intensité reste maximale, et quand on passe du jaune au vert,
l'intensité qui diminuait retourne en mode de progression.
Sauvegarde du mode en cours après coupure d'alimentation
Après réécriture du code et grâce à Janni (
forum Mikroe),
les procédures de sauvegarde et de restauration du dernier mode
utilisé avant coupure d'alimentation, sont enfin
implémentées.
Thanks to Janni for his very good optimisation suggestions !
Proto
Réalisé sur une plaque d'expérimentation sans
soudure, avec un petit câble de déport des entrées / sorties de type
EasyProto.
L'alimentation des leds est assurée par le +5V de la carte de
développement EasyPic4, via le câble de déport du
port A. Le fil vert qui dépasse permet le changement de mode
(connexion entre entrée GP3 et +5V).
Pas totalement au point...
Dans le principe, le code fonctionne mais les résultats ne
sont pas parfaits et ne me conviennent qu'à moitié. Selon
les réglages adoptés (mode et tension d'entrée sur
AN0), le montage laisse apparaître quelques "acoups" lumineux. Au
début, je pensais que le problème n'était que
logiciel et j'ai tenté plusieurs modifications, notement au
niveau de la périodicité de la lecture de la tension
d'entrée au port AN0. J'avais en effet rapidement fait le lien
entre ces petits défauts et la périodicité de la
lecture de la tension d'entrée par le CAN, bien que la routine
de modification des valeurs de rapport cyclique n'est appelée
que lorsque la tension d'entrée est modifiée.
Réduire ou augmenter la périodicité de la lecture
ne changeait rien au problème. J'ai laissé momentanement
tomber cette réalisation, me disant que je trouverais bien plus
tard. Et après deux mois de repos, j'ai effectivement
trouvé une partie du problème, qui n'avait rien de
logiciel ! Le potentiomètre RV1 utilisé pour le
réglage des couleurs était tout simplement vieillot et
crachait, et la tension d'entrée bagotait sans arrêt. La
routine de modification des valeurs PWM était donc constement
appelée. Après avoir remplacé ce
potentiomètre par un modèle neuf, une grande partie du
problème était résolue. Mais il reste toutefois
quelques acoups de temps en temps, surtout quand toutes les leds sont
allumées en même temps, et ce quelque soit leur
luminosité propre. Je reste convaincu que la section logiciel
gagnerait à être mieux écrite, mais mes
connaissances sont pour le moment trop limitées pour me
permettre de faire mieux.
Fichier compilé et code source
L'archive dont le lien est donné ci-après contient le
fichier compilé (*.hex) à mettre dans le PIC 12F675,
ainsi que le code source écrit dans MikroPascal (V8.3).
Lampadaire
multicolore 006 - 12F675.zip (23/10/2008)
Si vous souhaitez recevoir par la poste un PIC
préprogrammé et prêt à utiliser, merci de
consulter la page
PIC - Sources.
Circuit imprimé
En cours de réalisation.