Combien de lumières individuelles un Arduino peut-il contrôler

19

Je veux utiliser une carte Arduino ordinaire pour contrôler les LED - quel est le plus grand nombre de lumières que je peux contrôler individuellement à partir de la carte?

Existe-t-il un tutoriel sur la façon de le brancher?

mad_z
la source
3
Vous devez spécifier si vous souhaitez contrôler une ou plusieurs leds. De plus, j'ajouterais "éviter le contrôle série et les circuits intégrés supplémentaires". La réponse tend à être infinie si le taux de rafraîchissement ou les pièces matérielles ne sont pas des contraintes.
ppvi

Réponses:

26

Je crois que l'utilisation de lignes N Charlie-plexe contrôle N * (N-1) LED. Il y a un bon article sur Wikipedia.

Un de mes amis, Jimmie P. Rodgers, a installé 126 LED sur un bouclier Arduino. Il utilise le charlex-plexing pour contrôler les LED. Quelques informations sur son forum se trouvent sur - jimmieprodgers.com/2009/12/my-development-process/ (copie archive.org)


Lors de la dernière réunion du Boston Arduino User Group, Jimmie P. Rodgers a dessiné un diagramme de plexing Charlie sous forme de matrice avec des filets étiquetés. Les schémas ainsi dessinés semblaient bien communiquer le concept. J'ai créé quelques schémas similaires - Voir http://wiblocks.luciani.org/FAQ/faq-charlie-plex.html

jluciani
la source
appris quelque chose de nouveau aujourd'hui; vous avez mon vote positif :-)
JonathanD
4
Gardez à l'esprit qu'avec cette méthode, il est uniquement possible d'avoir des LED N-1 allumées à la fois.
AngryEE
2
Le jimmieprodgers.comlien dans cette réponse est chargé de virus.
Vivek Maharajh
1
@vivekmaharajh: J'ai remplacé le lien par un lien vers une copie archive.org de la page d'origine.
Dave Tweed
13

Vous pouvez utiliser les registres à décalage ( http://en.wikipedia.org/wiki/Shift_register ) pour obtenir autant de sorties parallèles d'un même flux série que vous le souhaitez.

Vous devrez vous préoccuper de vos contraintes de puissance. En fait, je n'ai jamais utilisé un Arduino moi-même, mais je suppose qu'il a une limite de courant, tout comme les PIC. De plus, les registres à décalage auront eux-mêmes une limite de courant. Si vous rencontrez cela, vous devrez envisager d'utiliser quelque chose comme un MOSFET pour vous permettre de contrôler les LED sans avoir à tirer beaucoup de puissance directement de votre micro-contrôleur.

Kellenjb
la source
7

Toute broche de microcontrôleur AVR donnée est autorisée à générer jusqu'à 40 mA, et l'alimentation totale fournie ou coulée par la puce (c.-à-d. Au sol et broches Vcc) doit être inférieure à 200 mA.

Charlieplexing est une excellente solution pour les situations où vous avez besoin de beaucoup de LED, mais pouvez vous en tirer avec une seule LED allumée à la fois. Une carte Arduino standard (comme une Duemilanove) fournit 17 broches d'E / S "gratuites", sans compter TX, RX, Reset ou broche 13. Ainsi, vous pouvez brancher 17 * 16 = 272 LED. Cela peut bien fonctionner, surtout si vous gardez une LED allumée ou si vous numérisez rapidement entre quelques-unes. Mais si vous essayez d'éclairer toute la matrice avec un motif, vous constaterez que chacun est allumé (légèrement moins que) 1/272 du temps, donc si votre courant de commande était de 30 mA à un moment donné, chaque LED le courant moyen serait d'environ 0,1 mA - assez faible.

Si vous n'avez pas besoin d'autant de LED mais avez plutôt besoin de plus de luminosité, le multiplexage traditionnel peut être une meilleure option. Dans ce cas, vous utilisez certaines de vos lignes comme lignes et d'autres comme colonnes dans une matrice. Si vous utilisez un courant LED de 10 mA, vous pouvez définir une matrice de 4 colonnes et 13 lignes, où les 4 LED d'une même ligne peuvent être allumées à la fois, et vous parcourez les lignes. Ensuite, chaque ligne est sur 1/13 du temps à un courant de 10 mA, donc le courant moyen des LED peut atteindre 0,76 mA, MAIS vous n'obtenez que 4 * 13 = 104 LED. (Certainement plus lumineux par LED qu'avec charlieplexing.)

Dans le dernier exemple, la limite est de 40 mA par broche sur l'AVR, car chaque rangée de broches de pilotage génère 4x10 = 40 mA. Si vous autorisez l'ajout de transistors externes (qui peuvent être bon marché et petits) aux sorties de ligne, vous pouvez éviter cette limite particulière et devenir plus lumineux. Par exemple, vous pouvez créer un réseau 8x9, avec 8 lignes et 9 colonnes, 72 LED au total. L'une des 8 lignes est activée à la fois, sélectionnée via le transistor. Jusqu'à 9 LED dans une rangée donnée peuvent être allumées à la fois, pilotées à 20 mA, donc 180 mA proviennent du transistor, et vous restez sous les limites de courant de l'AVR. Le courant moyen par LED est maintenant de 20 mA / 8 = 2,5 mA - généralement assez lumineux.

Windell Oskay
la source
6

Il y a un tutoriel très agréable et détaillé ici qui comprend une section sur l'utilisation d'un Arduino pour exécuter un cube LED 8x8x8. (Ne manquez pas le film YouTube qu'ils ont en place)

entrez la description de l'image ici

Joel Spolsky
la source
On dirait quelque chose que j'ai vu à l'exposition OVNI à Minneapolis vers 1979 ou aux alentours, mais je me souviens que c'était quelque part autour de 4096 ampoules miniatures. Quelqu'un d'autre se souvient-il d'avoir vu quelque chose comme ça?
supercat
4

Il existe de nombreux modules d'extension d'E / S qui utilisent des bus SPI ou I2C. Avec un seul module MSSP, vous pouvez contrôler presque une quantité infinie de sorties numériques comme les LED.

Voir les fiches techniques Microchip ou les notes d'application pour les parties suivantes:
SPI - MCP23S08
I2C - MCP23008

mjh2007
la source
1

Avec 17 broches d'E / S, dix-sept transistors NPN (émetteurs suiveurs pour augmenter le courant), il ne devrait pas y avoir de problème particulier montrant 272 LED dans des combinaisons arbitraires à un rapport cyclique de 1/17, avec un courant moyen ou 0,7 mA (200 mA / 272), limité par la capacité de la puce à abaisser 200mA à la fois. L'ajout d'une diode pour obtenir une baisse de 0,7 volt permettra l'ajout de 17 autres LED (réduisant le rapport cyclique à 1/18), bien que la luminosité ne corresponde pas tout à fait aux autres.

supercat
la source
Pouvez-vous préciser quel type de circuit vous proposez ici? Le suiveur d'émetteur est une topologie BJT.
Kevin Vermeer
@reemrevnivek: Voir la modification ci-dessus. J'avais mentalement balancé quelques variations, et elles se sont embrouillées. Si l'on ajoute des transistors pour augmenter le variateur côté haut mais pas le variateur bas, ils doivent être des BJT. Si l'on utilisait des transistors pour les deux, les mosfets pourraient être mieux.
supercat
0

Alors que Windell Oskay fait valoir que 104 LED est le maximum sans ajouter plus de transistors, Tom Igoe a publié des photos d'une matrice de 128 LED directement contrôlées par un seul Arduino Mega - pas de transistors supplémentaires, discrets ou intégrés.

Tom Igoe "triche-t-il" en dépassant brièvement le "courant maximum absolu par broche" répertorié dans la fiche technique?

davidcary
la source
2
Non, il triche en utilisant un méga Arduino. :) Le méga a beaucoup plus de broches d'E / S qu'un Arduino normal.
Christopher Biggs
@unixbigot - Triste, j'avais espéré voir un hack sympa impliquant la réutilisation de la broche de réinitialisation pour la conduite de LED ou l'utilisation de la chute de diode ..
Kevin Vermeer
1
Votre lien est mort, et vous devriez probablement vous lier à la réponse de Windell Oskay . Cela peut ne pas sembler important lorsque vous publiez, mais à mesure que de nouvelles réponses apparaissent, votre message devient éloigné de l'autre.
Kevin Vermeer
@KevinVermeer: ​​lien corrigé en pointant sur la copie archive.org de la page d'origine.
Dave Tweed