mardi 13 novembre 2012

Interface Arduino et Leds


Attention: l'auteur de ce blog dégage toute responsabilité quant à l'utilisation des montages électriques et électroniques décrits dans ces pages. Il incombe au lecteur d'agir avec prudence lorsqu'il s'agit d'utiliser tout dispositif électrique.


Suite à l'animation présentée plus tôt, voici le montage qui me sert à coupler l'alimentation 12V des leds avec les sorties de l'Arduino. Celui-ci est nécessaire puisque seulement 5V sont disponibles au niveau des sorties. Dans le cas présent, le montage regroupe deux lignes de commande indépendantes. Il est facile de n'en construire qu'une seule ou de répliquer ce montage autant de fois que nécessaire...

Le principe s'organise autour d'un transistor TIP122 et est très simple: il suffit de commander la base du transistor par l'une des sorties PWM de l'Arduino, alors que la liaison collecteur-émetteur sert de "potentiomètre" si l'on veut... Ainsi, un signal variant de 0 à 5V sur la base, libère le passage à un signal proportionnel de 0 à 12V entre l'émetteur et le collecteur. Bien évidemment, la tension maximale dépend de la source d'alimentation externe...


La base est protégée par une résistance 1kOhm. Quant aux résistances utilisées pour protéger les leds, elles ne sont pas représentées puisqu'elles sont normalement incluses dans les bandeaux. Dans le cas contraire, il ne faut pas oublier de les insérer ;-)

Concernant les points de connections, tous les grounds doivent être connectés ensembles (gnd et "-" sur le schéma). Les "+" et "-" correspondent aux alimentations de chaque bandeau (il est possible d'utiliser une seule alimentation si vous en disposez d'une assez puissante. Pour info, des bandeaux de leds comme ceux que j'ai utilisés consomment environ 1A par mètre...). Enfin, les points de connections PWM1 et PWM2 sont reliés à deux des sorties de l'Arduino. Bien entendu, il s'agit de sorties analogiques, sinon le transistor agirait comme un interrupteur à la réception d'un signal 0 ou 5V...

Remarque: suites aux tests que j'ai pu faire, il semble qu'il y ait un bug dans le bootloader de mon Arduino car je ne peux pas obtenir de signal analogique sur les sorties PWM 9, 10 et 11. J'ai trouvé une confirmation de ce problème sur quelques pages web. Il faudrait charger une nouvelle séquence de boot dans le micro-contrôleur pour fixer le problème. Pour l'instant, cela ne me dérange pas puisque d'autres sorties PWM sont disponibles et fonctionnelles...  Si vous possédez un Arduino récent, il est possible que vous rencontriez aussi ce problème.

Remarque 2: comme précisé dans un de mes commentaires, j'ai pu expérimenter quelques problèmes avec l'un des transistors. En effet, dans l'état 0V, il semble laisser passer un signal, ce qui fait clignoter les leds qui y sont raccordées... Mes connaissances limitées en électronique ne me permettent pas d'en déduire la source du problème. Au départ,  j'avais tendance à penser que cela puisse venir d'une surchauffe du transistor. Mais malgré la présence de radiateur, le problème persiste... Si vous avez des idées sur les causes possibles du problème, n'hésitez pas à communiquer avec moi. D'avance, merci!

Mise-à-jour: je viens de refaire les calculs concernant les intensités supportées par le transistor (au niveau des tensions, il n'y a pas de problème puisque le TIP122 supporte 100V sur les liaisons collecteur-base et collecteur-émetteur). Il est vrai que je m'approche des 5A (intensité maximale au collecteur en utilisation continue) pour le bandeau blanc pur et environ 2A pour le bandeau blanc chaud. De plus, j'ai inversé les bandeaux de leds, et le problème survient dans les deux cas, donc l'intensité ne semble pas être en cause... Mauvaise qualité des transistors?

10 commentaires:

  1. Le problème ne viendrait-il pas de l'electronique de commande? (Arduino)

    RépondreEffacer
  2. A quoi penses-tu exactement? Qu'un 0V sur un port PWM ne soit pas tout à fait 0V ou pas tout le temps?

    RépondreEffacer
  3. oui exactement. Attention j'ai des compétences proche du zéro!!!!

    RépondreEffacer
  4. J'avoue qu'après avoir trouvé les problèmes de timer sur les ports 9, 10 et 11, il est bien possible que les autres ports n'affichent pas réellement 0 même lorsque demandé...

    En tout cas, j'ai commandé ce matin un programmeur pour flasher le bootloader de mes Arduino. Je vais les mettre à jour et je verrai bien les résultats... Dans l'attente, je ferai quelques prises de tension sur ces ports-là pour voir si je n'ai pas quelques artefacts de tension...

    RépondreEffacer
  5. Disons que ça ne coûte pas grand chose!!!

    Ton idée de programmer ces différentes intensités m'a fait réfléchir cet aprem au travail! (oui c'est pas bien!! mais bon même sans moi les trains roulent!)

    tu pourrais coupler un affichage digital d'une horloge accélérée qui correspondrait aux différentes intensités lumineuses.

    RépondreEffacer
  6. Pour l'instant, l'automate est programmé ainsi: j'ai une horloge interne (environ 10s par heure fictive alors que dans l'exemple accéléré/vidéo, cela va plus vite...). En fonction de certaines "étiquettes" par exemple: 8h, 12h, 16h, 20h, je modifie un état... Entre deux étiquettes données, je calcule le ratio: intervalle de temps écoulé sur temps total et cela me donne une intensité, etc... Je représente ainsi le lever et le coucher du soleil.

    Ton idée d'affichage digital, est-ce pour simuler la même chose que ce que je viens de décrire ou pour autre chose?

    RépondreEffacer
  7. oui c'est pour simuler le temps. L'afficher c'est pour pouvoir s'en servir pour des horaires de trains.

    RépondreEffacer
  8. Oui, dans ce cas-là, je peux ajouter un "shield" écran LCD à l'Arduino et afficher la simulation d'une horloge... Et on peut tout-à-fait envoyer des commandes pour démarrer des rames...

    Tout est possible! Cependant, si cela devient trop compliqué et "gros", mieux vaut utiliser un logiciel comme JMRI afin de faciliter la gestion et les contrôles... Sinon, il y a suffisamment de place dans l'Arduino pour développer des automates assez complets. D'ailleurs les nouvelles cartes ont plus de mémoire que le modèle UNO que je possède.

    RépondreEffacer
  9. Il faudra que je me penche sur ces cartes de programmation à l'avenir!!!

    En tout cas je suis agréablement surpris de la qualité de l'éclairage avec seulement des LED.

    RépondreEffacer
  10. Les rubans 5050 éclairent suffisamment au point d'avoir du mal à regarder les leds à pleine intensité... En plus, tu peux combiner le tons pour obtenir le rendu qui te semble le plus réaliste... Et au prix que cela coûte: un ruban de 5m de 5050 coûte moins de 20$... Ce qui est à peine plus cher qu'un seul tube néon ;)

    RépondreEffacer