J'avais trouvé très intéressante l'idée de faire une
lampe aux couleurs changeantes en utilisant un LED RGB de haute puissance.
(voir l'article
en question sur le blog de Make).
Quand un ami m'a dit qu'il commandait des LEDs similaires (prolight 3W RGB,
photo à droite), je lui ai dis d'en prendre un pour moi, question de
m'amuser un peu.
Je souhaitais pouvoir contrôler la lampe par USB afin d'être capable
de l'influencer selon différents événements. Par exemple,
un flash pour un nouveau courriel, intensité d'une couleur liée
à la charge du système ou l'utilisation de la mémoire,
synchronisation avec la musique...
Prototype
J'ai fabriqué un prototype à l'aide des composantes que j'avais
en stock. Ensuite, je me suis empressé de programmer le microcontrôleur
de manière à pouvoir contrôler l'intensité lumineuse de
chaque couleur séparément, d'après les commandes
transmises via USB. J'ai également programmé un mode ou la lampe
passe progressivement d'une couleur à l'autre.
Circuit imprimé de contrôle
Mon ami par qui j'ai obtenu le LED a bien aimé le résultat et il souhaitait fabriquer des
lampes basés sur ce concept. Nous nous sommes donc entendus pour
que je développe un circuit imprimé du projet. Ceci rends le projet
reproductible facilement en grande quantités.
Nouvelles
Mai 2011: Après 4 ans d'oubli, rédaction des paragraphes manquants et publication.
10 Février 2007: Rédaction de ce texte.
Led
3 couleurs
Il s'agit d'un led 3 couleurs (RGB) de 3W de prolight. Voici le datasheet:
3WRGB.pdf. Le datasheet nous révèle que la
limite absolue de courant pour le Rouge est de 385mA et 350mA pour le vert et le bleu.
Un led d'une telle puissance produit une lumière intense tout en chauffant
énormément. Il est essentiel de le refroidir convenablement sans quoi il pourrait
s'auto-détruire. Et puisque la luminosité diminue avec la température (Voir courbes
dans datasheet), il est d'autant plus désirable de minimuser l'élévation de température.
J'ai utilisé un refroidisseur (heat-sink) normalement destiné aux CPU socket 7
(Pentium 1 par exemple). Une pâte thermique (Je ne suis pas certain du nom français... En anglais
c'est Thermal Joint Compound) facilite le passage de la chaleur du Led au heat-sink. Pour fixer le LED
au heat-sink solidement, j'ai perçé des trous légèrement plus petit que
mes vis et j'ai forcé un peu pour visser les vis. Heureusement, l'aluminium est un métal
relativement malléable.
Perçage
Pâte thermique? (Thermal joint compound)
Pâte thermique appliquée
Led installé
Prototype
Cablage sur circuit snes/nes à USB
Comme microcontrôleur, j'ai utilisé un Atmega8 cadencé à 12Mhz
(fréquence nécéssaire pour l'implémentation USB au
niveau logiciel que j'utilise). Justement, c'est exactement ce qu'il y a sur mes
circuits de
conversion manettes Snes/Nes à USB.
Il y a aussi les diodes zeners pour USB D+ et D-, très important
pour permettre au circuit de fonctionner sur tout les ports USB. À gauche, j'ai
mis une photo montrant à quels endroits j'ai soudé les fils USB et les 3
signaux de contrôle (rouge, vert et bleu). Les autres fils sont ceux qui servent à
programmer l'Atmega8.
Je voulais pouvoir alimenter le tout par USB. Puisqu'il n'est pas permis qu'un
périphérique USB consomme un courant supérieur à
500 mA, j'ai ajusté la valeur des résistances pour que chaque partie
du LED (rouge, vert et bleu) consomme environ 150mA. Ainsi, lorsque les 3 sont à
l'intensité maximale, le total s'élève à 450 mA. Cela
laisse tout de même une marge pour la consommation du reste du circuit.
Transistors Darlignton et resistances
Il était hors de question de brancher les 3 LEDs directement au microcontrôleur. Selon
le datasheet, l'Atmega8 peut pousser 20 mA par broche d'ES, le total de toutes les broches
ne devant pas dépasser 300mA. C'est pourquoi j'utilise des transistors pour contrôler
les LEDs.
Voici comment j'utilise des transistors avec l'Atmega8:
Explication du circuit: Lorsque la broche de l'Atmel est à 5 volts (logique 1), le voltage
présent sur la base et l'émetteur du transistor est le même. Il n'y
a donc aucun courant circulant entre ces deux broches. Puisqu'aucun courant ne circule de
l'émetteur à la base, il n'y en a pas non plus qui circule de l'émetteur au
collecteur. Par conséquant, le LED ne s'allume pas. Mais lorsque la broche de l'Atmel est à
0 volts (logique 0), il y a une différence de potentiel entre l'émetteur et la base
du transistor. Un courant circule donc entre l'émetteur et la base. La résistance
R1 permet de limiter ce courant à un niveau acceptable et suffisant. Mais puisqu'il y a un
petit courant circulant entre l'émetteur et la base, un courant beaucoup plus grand peut
circuler entre l'émetteur et le collecteur, allumant ainsi le LED.
Parlons maintenant des résistances pour les LEDs. Pour calculer la résistance, il faut
d'abord savoir combien de volts on perds dans le circuit. Selon le datasheet, à 150mA, le
LED rouge prends 2 volts et les LEDs vert et bleu prennent 3.3 volts. Le transistor aussi en prends
une partie. Par exemple, le transistor 2SB1067 que j'ai utilisé en prends 0.9volts
à 300mA à 25 degré C. Bien sur, il est possible que ces caractéristiques
varient d'une pièce à l'autre...
Calcul de la résistance idéale avec alimentation
à 5 Volts et courant cible de 150mA. Perte de voltage du transistor (Vce)=0.9 Volts
Couleur
Voltage Led
Calcul
Resistance
Rouge
2.00
(5V - 2V - 0.9V) / 0.150A
14 ohms
Vert
3.30
(5V - 3.3V - 0.9V) / 0.150A
5.33 ohms
Bleu
3.30
(5V - 3.3V - 0.9V) / 0.150A
5.33 ohms
Voici les mesures que j'ai obtenu en pratique, en allumant un led à la fois. On remarque que le voltage
des LEDs rouge et vert sont assez près de la théorie. Par contre, le voltage du LED bleu et du
transistors sont plus bas que prévu. Il faut savoir aussi que le voltage d'alimentation n'était
pas de 5 volts, mais de 4.86 volts. Probablement des pertes à cause du cablage USB. Lorsque les 3 LEDs
sont allumés, le voltage chute a 4.63 volts...
Courants et voltages mesurés dans la réalité
Couleur
Voltage led
Voltage transistor
Voltage resistances
Courant
Rouge
2.08V
0.75V
2.03V
250mA
Vert
3.23V
0.72V
0.96V
180mA
Bleu
3.12V
0.74V
1.06V
190mA
Dans le prototype, je n'ai pas utilisé les bonnes valeurs de résistances alors
j'excède de 20mA la limite de courant permise sur USB. Car lorsque les 3 leds sont allumés,
le courant total n'est pas de 620mA (addition des courants de la table ci-haut) mais de 520mA. Rien n'a sauté,
mais dépasser la limite n'est pas une bonne idée pour autant.
Alors, voici les valeurs de résistances (PAS BONNES POUR USB! car trop basses...) du prototype:
Bleu et Vert: 4.7 ohms, Rouge: 7.9 ohms (6.8 ohms en série avec 1.1 ohms)
Résistances idéales après mesures dans la vie réelle (transistor .75Volts)
Couleur
Courant
Valeur resistance
Rouge
150 mA
(5V - 2.08V - 0.75V) / 0.150A = 14 ohms
Vert
150 mA
(5V - 3.23V - 0.75V) / 0.150A = 6.8 ohms
Bleu
150 mA
(5V - 3.12V - 0.75V) / 0.150A = 7.53 ohms
Maintenant, quelques photos supplémentaires du prototype en fonction:
Led bleu seulement à très basse intensité
Le rouge à pleine puissance dans une pièce bien éclairée.
Version 1
Suite au succès du prototype, j'ai décidé de faire une version
améliorée, et facilement reproductible. Ceci veut dire un circuit imprimé et une liste
de composantes faciles à obtenir à notre époque.
Voici les changements et améliorations que j'ai visé pour la version 1:
Permettre une alimentation indépendante d'USB, pour pouvoir utiliser les leds
à leur pleine puissance ou presque.
Permettre une alimentation plus élevée que 5 volts. Échec: Les résistances
chauffent trop. Il faudrait des résistances de plusieurs watts ou conçevoir un circuit fonctionnant différemment.
Avoir un circuit imprimé unique pour tout les composantes. Fini les fils et le
petit circuit avec transistors cablés manuellement.
Utiliser des pièces facile à obtenir en 2007 chez mon fournisseur habituel,
Digikey.
Voici les schémas en format PDF:
Voici la liste de composantes:
Référence
Description
Quantité
# Digikey
Q2,Q3,Q4
Transistor MPSA63
3
MPSA63-ND
U2
Buffers 'open-collector'
1
296-14647-5-ND
J3
Connecteur d'alimenatation
1
PJ-202AH
U1
Microcontrôleur ATmega8-16PC
1
ATMEGA8-16PC-ND
Y1
Crystal 12 mhz
1
X983-ND
C2,C3
Condensateurs 30pf
2
490-3721-ND
C1
Condensateur 10uf
1
493-1077-ND
J2
Connecteur 'header' 2x3
1
WM7406-ND
D3,D6
Diode 2A 20V
2
SR202-TPCT-ND
C5
Condensateur .1uf
2
BC1148CT-ND
C4
Condensateur 1uf
1
P993-ND
R1
Resistance 1.5K
1
P1.5KBACT-ND
R2,R3
Resistances 68 ohms
2
P68BACT-ND
R6,R8,R10
Resistances 470 ohms
3
P470BACT-ND
D1,D2
Diode Zener 3.6 volts
2
1N4729A-TPCT-ND
Mais ce n'est pas tout!
Puisque les transistors utilisés ne sont pas les mêmes que ceux du prototype,
il faut recalculer la valeur des résistances. Selon le 'datasheet' du MPSA63, le
voltage de saturation maximum Collecteur-Emetteur est de 1.5 volts.
Mais en pratique, le transistor ne semble pas se comporter ainsi. Le voltage Collecteur-Emetteur est de seulement 0.75 volts.
Valeurs des résistances pour 150 et 300 mA, avec voltage C-E de 0.75 volts.
Couleur
Courant cible
Calcul ohms
Dissipation de la resistance
Rouge
150mA
(5V - 2.08V - .75V) / .150A = 14.5 ohms
(5V - 2.08V - 0.75V) * .150A = 0.33 Watts
300mA
(5V - 2.08V - .75V) / .300A = 7.2 ohms
(5V - 2.08V - 0.75V) * .300A = 0.7 Watts
Vert
150mA
(5V - 3.23V - .75V) / .150A = 6.8 ohms
(5V - 3.23V - 0.75V) * .150A = 0.15 Watts
300mA
(5V - 3.23V - .75V) / .300A = 3.4 ohms
(5V - 3.23V - 0.75V) * .300A = 0.30 Watts
Bleu
150mA
(5V - 3.12V - .75V) / .150A = 7.5 ohms
(5V - 3.12V - 0.75V) * .150A = 0.17 Watts
300mA
(5V - 3.12V - .75V) / .300A = 3.8 ohms
(5V - 3.12V - 0.75V) * .300A = 0.34 Watts
Alors maintenant que les valeurs voulues ainsi que le wattage nécéssaire sont connus,
il faut acheter ces résistances. Il est important d'utiliser des résistances
d'un wattage d'environ le double.
Si le but est d'alimenter le circuit par USB (donc 150mA par couleur)
et qu'il n'est pas possible de trouver la valeur exacte, il est préférable de choisir une valeur
plus haute (pour un courant un peu plus bas que 150mA). Par contre, si vous prévoyez alimenter
le circuit autrement, vous pouvez prendre des valeurs plus basses (ce qui augmente le courant) car les
résistances sont calculés pour 300mA alors que la limite des LEDs est de 350mA.
Référence
Description
# Digikey
Pourquoi
R7
Resistance 15 ohms, 0.6W
PPC15.0ZCT-ND
Rouge 150mA
R7
Resistance 7.5 ohms, 2W
PPC7.5W-2CT-ND
Rouge 300mA
R7
Deux resistances 3.6 ohms, 2W
BC3.6W-2CT-ND
Un peu mieux pour le rouge 300mA
R9
Resistance 6.8 ohms, 1W
PPC6.8W-1CT-ND
Vert 150mA
R9
Resistance 3.3 ohms, 1W
PPC3.3W-1CT-ND
Vert 300mA
R11
Resistance 7.5 ohms, 1W
BC7.5W-1CT-ND
Bleu 150mA
R11
Resistance 3.6 ohms, 2W
BC3.6W-2CT-ND
Bleu 300mA
Optionel:
Un bon choix pour une alimentation séparé est T977-P6P-ND disponible chez digikey.
Circuit imprimé v1
Voici de quoi a l'air le circuit imprimé:
J'ai utilisé un logiciel nommé PCB
pour le dessiner. Voici le fichier source: prod1.pcb
Si vous voulez en produire un mais ne pouvez pas utiliser
PCB (car vous n'êtes pas sous Unix), voici une
archive contenant les fichiers gerbers: rgbledsA.zip
Le PCB assemblé pour l'utilisation d'une alimentation externe pour les LEDs, permettant
environ 300mA par couleur. Le CPU tant qu'a lui, s'alimente d'USB ou par l'alimentation externe.
Théorie
L'intensité de la lumière produite par le LED est contrôlée en faisant varier
la durée d'une période où le LED est alimenté versus une période où le LED n'est
pas alimenté. La fréquence d'opération a été choisie pour ne pas être visible
à l'oeil nu, créant ainsi l'illusion d'une lumière ininterrompue, mais modulée
en intensité.
Voici le code source pour le micro-contrôleur:
rgbleds-1.0.tar.gz. Sur un système linux sur lequel
les outils de développement pour avr sont présent (avr-gcc, avr-libc, etc), il suffit
de taper make dans le répertoire racine de cette archive pour compiler. Voir les
cibles 'fuse' et 'flash' du makefile pour le transfert vers l'AVR. Référez-vous au
besoin à ma page plus détaillée sur la
programmation des AVR.
Pour la partie USB, une ancienne version de
V-USB par Objective development
est utilisée (désolé, je n'ai pas le temps de mettre ce projet à jour pour le moment).
Logiciels de contrôle pour PC
Ces logiciels sont fournis avec l'archive offerte ci-haut. Ces logiciels sont très simple
et peuvent servir d'exemple. Tous sont bâtis pour fonctinner sous Linux via libusb.
Location
Description
cmdline/
Outil en ligne de commande simple
misc_examples/
Contrôle des LEDS en fonction du degré d'activité du système et stroboscope
qt/
Interface graphique comportant des 'sliders' pour contrôler chaque LED. Utilise la librairie QT
Photos du circuit en action
Démonstration de l'éclairage. Il y avait aussi une petite lampe de 20Watts et un écran d'ordinateur
dans la pièce...
Une portion de mon bureau éclairé en rouge...
puis en mauve...
ensuite en bleu...
et en vert...
maintenant en jaune...
et finalement en orange.
En déposant un cylindre de papier sur le led, on obtient un rond au plafond. On peut voir
les couleurs séparément sur certaines partie du contour car les 3 source lumineuse ne sont pas précisément
au même endroit sur le LED:
Rouge + Bleu
Vert + Bleu
Rouge + Vert
Rouge + Vert + Bleu
Deux photos du salon avec le LED comme seul éclairage:
Photos provenant des utilisateurs
J'aime bien voir comment les autres s'y prennent pour assembler mes projets. Vous
pouvez me faire parvenir des photos de vos montages et je les afficherai ici.
Avertissement
Je ne saurais être tenu responsable pour les dommages
que l'utilisation des informations ou la mise en œuvre des instructions présentées
sur cette page pourrait causer à votre équipement,
à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant
à l'exactitude des informations et à leur fonctionnement.