LOCODUINO

Signaux lumineux et Arduino

.
Par : Christian

DIFFICULTÉ :

La signalisation lumineuse permet de présenter des informations aux conducteurs de trains, telles que l’occupation de la voie en aval, l’obligation de ralentir voire de s’arrêter, la protection d’une aiguille, l’indicateur de direction, etc. Elle est indispensable à l’exploitation d’un réseau ferré moderne et à ce titre, elle se doit de figurer sur nos réseaux de trains miniatures d’autant plus qu’elle fait bon ménage avec Arduino qui peut choisir le signal à allumer en fonction de l’événement à traiter. Cet article, qui s’adresse surtout aux débutants, explique comment relier un signal lumineux du commerce à un Arduino.

Signaux lumineux pour le modélisme ferroviaire

On trouve dans le commerce des signaux lumineux aux principales échelles du modélisme ferroviaire. On peut aussi les trouver en kit à monter et à peindre, soit à partir de laiton, soit en impression 3D. La partie lumineuse est constituée de DEL de différentes couleurs (vertes, rouges, jaunes, blanches), composants polarisés qu’il faut brancher en respectant son sens et en intercalant une résistance pour limiter le courant ; tout ceci est expliqué dans l’article Fonctionnement et pilotage d’une DEL. Ceux qui utilisent des kits peuvent donc adapter le branchement des DEL comme ils le veulent, mais ceux qui utilisent des signaux tout montés sont confrontés à un choix de branchement qui a été fait par le fabricant et qui ne convient pas forcément au montage à réaliser. Nous allons voir qu’il existe des solutions pour se tirer de ce mauvais pas.

Le signal lumineux se comporte d’un mât et d’une cible ; le mât supporte la cible et la cible comprend les ampoules à allumer, qui de nos jours, ont été remplacées par des DEL. Chaque DEL possède son fil de commande, généralement de la même couleur que celle-ci et il existe un fil supplémentaire qui permet le retour du courant. Ce fil est appelé le commun car il est branché sur toutes les DEL et est d’une couleur autre que celle des DEL (gris, noir, marron, etc.). La notice (parfois succincte) qui accompagne le signal indique si le commun doit être relié au plus de l’alimentation, auquel cas le signal est à anodes communes car c’est l’anode des DEL qu’il faut relier au plus, ou bien au moins de l’alimentation, auquel cas le signal est à cathodes communes.

Si on ne sait pas quel est le type de nos signaux - anodes communes ou cathodes communes - on peut tester une connexion d’une alimentation de 5V (une simple pile 4,5 V peut suffire) dont le plus (+) est connecté au fil commun à travers une résistance de 1KΩ et le moins (-) à l’une quelconque des DEL : si la DEL s’allume on a un signal câblé en anodes communes. Si elle ne s’allume pas, c’est l’inverse, en cathodes communes.

Voyons cela en détail.

Signal à anodes communes

La figure 1 montre un signal à trois feux à anodes communes (le principe reste le même pour un nombre différent de feux). Le fil commun doit être relié au plus de l’alimentation ; pour allumer une des DEL, il faut donc que son fil de commande soit relié au moins de l’alimentation. Une résistance est à intercaler dans le circuit pour limiter le courant qui traverse la DEL ; sa valeur est fonction de la tension d’alimentation. Le calcul de cette résistance est expliqué dans l’article Fonctionnement et pilotage d’une DEL mais nous y reviendrons plus tard.
La valeur de la résistance fixe aussi le niveau de luminosité de la DEL. Pour intercaler cette résistance dans le circuit, nous avons deux possibilités. S’il n’y a qu’une seule DEL à allumer à la fois (cas du signal de Block Automatique Lumineux qui est soit vert, soit rouge, soit jaune), on peut disposer cette résistance en série avec le fil commun (figure 1A) ; c’est plus simple et plus économique, mais la luminosité de chaque couleur peut varier d’une DEL à l’autre. S’il y a plusieurs DEL à allumer en même temps (cas d’un carré présentant deux feux rouges), le mieux est de disposer une résistance en série sur chaque fil de commande (figure 1B), ce qui permet d’ajuster, par des essais, la valeur de chaque résistance pour avoir une luminosité constante quelle que soit la couleur.

Figure 1
Figure 1
Signal à anodes communes

Signal à cathodes communes

La figure 2 montre un signal à trois feux à cathodes communes (le principe reste le même pour un nombre différent de feux). Le fil commun doit être relié au moins de l’alimentation ; pour allumer une des DEL, il faut donc que son fil de commande soit relié au plus de l’alimentation. Une résistance est à intercaler dans le circuit pour limiter le courant qui traverse la DEL ; sa valeur est fonction de la tension d’alimentation. Le calcul de cette résistance est expliqué dans l’article Fonctionnement et pilotage d’une DEL mais nous y reviendrons plus tard.

De la même façon que dans le cas à anodes communes, nous avons deux possibilités pour intercaler cette résistance dans le circuit. S’il n’y a qu’une seule DEL à allumer à la fois, on peut disposer cette résistance en série avec le fil commun (figure 2A), s’il y a plusieurs DEL à allumer en même temps, le mieux est de disposer une résistance en série sur chaque fil de commande (figure 2B).

Figure 2
Figure 2
Signal à cathodes communes

Commande par Arduino

Arduino possède un certain nombre de broches d’entrées-sorties numériques pouvant commander les DEL d’un signal lumineux, nombre fonction du modèle de carte utilisée (par exemple 14 sur un modèle UNO, numérotées de 0 à 13). Pour commander une DEL, la broche doit être configurée en sortie et l’ordre dans le setup est pinMode(X, OUTPUT) ; où X représente le numéro de la sortie d’Arduino. Or une sortie numérique est soit à une tension de 5V (appelée état HIGH), soit à une tension de 0V (appelée état LOW). Les DEL du signal lumineux sont donc alimentées par une tension de 5V ; il est alors facile de calculer une valeur approchée de la résistance de limitation du courant. Une sortie ne pouvant délivrer que 20 mA, on limitera le courant traversant la DEL à 10 mA pour faire ce calcul, ce qui est généralement suffisant. La tension aux bornes de la DEL lorsqu’elle est allumée, dépend de sa couleur ; on peut se référer au tableau de l’article Fonctionnement et pilotage d’une DEL pour faire un calcul précis, mais on peut aussi considérer que cette tension est de l’ordre de 2 V et faire un calcul approché. Dans ce cas, il ne reste plus que 3 V aux bornes de la résistance (5 – 2 = 3). Cette résistance doit limiter le courant à 10 mA (soit 0,010 A) ; la loi d’Ohm nous permet de calculer sa valeur comme étant égale à 300 Ω (R = U / I). On choisira donc une résistance de valeur la plus proche possible de cette valeur calculée. La puissance que doit dissiper cette résistance est 3 X 0,010 = 0,03 W (P = U X I) ; une résistance quart de watt est donc suffisante. Ce calcul est bien suffisant si le montage peut se satisfaire d’une seule résistance, mais dans le cas où on place une résistance sur chaque fil de commande, il est préférable de calculer chaque résistance en prenant bien en compte la vraie tension aux bornes de la DEL (de l’ordre de 1,8 V pour une DEL rouge et 2,2 V pour une verte). Si la luminosité des DEL est trop forte ou trop faible pour un courant de 10 mA, on peut jouer sur la valeur de courant et refaire le calcul. Il faudra toutefois ne pas dépasser la capacité d’une sortie (20 mA est la valeur conseillée et 40 mA la valeur maximum) et surtout ne pas dépasser la capacité totale de la carte Arduino (200 mA pour un modèle UNO) si on doit allumer toutes les DEL ; il est bon de se ménager une plage de sécurité pour ne pas flirter avec ces limitations.

La figure 3A montre comment relier à Arduino un signal à anodes communes ; le fil commun est à relier au plus de l’alimentation, soit au 5 V qu’on trouve sur la carte. Pour qu’une DEL soit allumée, son fil de commande est à relier au moins de l’alimentation, ce qu’on appelle encore la masse (GND) ou le 0 V. La DEL s’allume par un état LOW de la sortie d’Arduino. Si la sortie est à l’état HIGH, la DEL est éteinte car il n’y a pas de différence de potentiel à ses bornes et aucun courant ne peut circuler.

Figure 3
Figure 3
Commande d’un signal par Arduino

La figure 3B montre comment relier à Arduino un signal à cathodes communes ; le fil commun est à relier au moins de l’alimentation, soit à la masse (GND) qu’on trouve sur la carte. Pour qu’une DEL soit allumée, son fil de commande est à relier au plus de l’alimentation, c’est-à-dire à une sortie à 5 V. La DEL s’allume par un état HIGH de la sortie d’Arduino. Si la sortie est à l’état LOW, la DEL est éteinte car il n’y a pas de différence de potentiel à ses bornes et aucun courant ne peut circuler.

Sur les figures 3A et 3B, ainsi que les suivantes, les sorties d’Arduino utilisées pour commander le signal sont les sorties 10, 11 et 12 mais ce n’est qu’un exemple, vous pouvez en choisir d’autres.

À partir du moment où on sait quel état allume la DEL, on peut écrire le programme. Pour un signal lumineux à anodes communes, c’est l’ordre digitalWrite (X, LOW) ; qui allume la DEL. Pour un signal lumineux à cathodes communes, c’est l’ordre digitalWrite (X, HIGH) ; qui allume la DEL. En fonction du type de signal dont on dispose, on peut ainsi être amené à modifier un programme déjà écrit, ce qui peut parfois représenter beaucoup de travail si le programme n’a pas été conçu pour s’adapter facilement à tous les types de signaux. Parfois même, ce n’est pas possible, par exemple si la sortie doit impérativement être à l’état HIGH pour commander un relais coupant l’alimentation de la voie en même temps qu’elle commande la DEL rouge du signal (voir par exemple le programme proposé dans l’article Block Automatique Lumineux avec la carte shield "Arduino 4 relays").

Que ce soit simplement fastidieux ou carrément impossible à adapter, il y a une autre solution pour rendre compatible un montage avec un type de signal : l’inverseur.

Utilisation d’inverseurs

Un inverseur est un montage électronique qui inverse l’état d’un signal. Par exemple, si le signal à l’entrée de l’inverseur est HIGH, le signal en sortie est LOW et réciproquement. En conséquence, si je recopie un montage et un programme qui allume un signal avec un état HIGH, et si je dispose d’un signal lumineux à anodes communes (allumage par état LOW), je n’ai qu’à inclure un inverseur entre le montage et le signal lumineux.

Un simple transistor peut constituer un inverseur, mais il est beaucoup plus simple d’utiliser un circuit intégré (CI) comportant plusieurs inverseurs dans un même boitier permettant ainsi de traiter un plus grand nombre de DEL. Un inverseur est généralement représenté avec un triangle et un petit rond sur sa pointe, le rond étant le symbole même de l’inverseur. Comme notre carte Arduino travaille généralement en 5 V, on peut faire appel à des CI de la famille TTL qui sont alimentés en 5 V et travaillent également avec cette tension. Le choix est grand et il faudra surtout bien regarder le courant que peuvent débiter ces CI car il doit être suffisant pour alimenter les DEL de nos signaux. On peut consulter le cours d’électronique proposé en téléchargement dans l’article Démarrer en électronique.

Il y a encore une solution plus simple, que vous avez peut-être sous la main si vous avez suivi nos conseils en matière d’équipement : le CI ULN2803 qui est souvent utilisé pour amplifier le signal sortant d’un Arduino, mais qui est aussi un circuit inverseur (voir l’article Amplifier le signal de sortie d’un ARDUINO avec un ULN 2803). La figure 4 montre comment compléter le montage avec un circuit intégré 2803 et c’est vraiment très simple puisque chaque sortie est en face de son entrée et puisqu’il y a, en plus, deux broches pour alimenter le circuit intégré. Bien entendu, un même circuit intégré 2803 peut servir à connecter plusieurs signaux lumineux selon ce principe.

Figure 4
Figure 4
Montage à circuit inverseur

La figure 5A montre un montage pour commander un signal à cathodes communes et la figure 5B montre comment adapter le montage pour le faire fonctionner avec un signal à anodes communes grâce à un CI ULN2803. Comme vous voyez, il n’y a vraiment rien de sorcier et dans ce cas, aucun programme n’est à modifier.

Figure 5
Figure 5
Commande d’un signal avec état HIGH pour allumer

Cas particulier d’un signal à deux feux

Il existe des signaux lumineux à deux feux (comme le sémaphore de Block Manuel qui est soit vert soit rouge). Si vous achetez ce type de signal tout monté, il y a de fortes chances qu’il soit câblé comme décrit précédemment à anodes communes ou bien à cathodes communes, et qu’il y ait un fil commun et un fil de commande pour chaque DEL, ce qui monopolise deux sorties sur une carte Arduino.

Si vous construisez vous-même ce genre de signal, une petite astuce de câblage des DEL vous fera économiser une sortie et le signal pourra être commandé par une seule sortie d’Arduino au lieu de deux. La figure 6 montre comment câbler les deux DEL et comment raccorder le tout à une sortie numérique d’Arduino. Si la sortie X est à l’état HIGH, c’est la DEL rouge qui s’allume alors que si elle est à l’état LOW, c’est la DEL verte. Une résistance de limitation de courant est associée à chaque DEL ce qui permet d’ajuster au mieux les valeurs pour régler la luminosité du vert et du rouge. Comme une seule DEL est allumée à la fois, on peut aussi ne mettre qu’une seule résistance en la câblant en série sur le fil de commande, mais la luminosité du vert et du rouge n’est pas réglée au mieux.

Figure 6
Figure 6
Signal à deux feux

Vous êtes maintenant capables d’utiliser au mieux vos signaux lumineux quel que soit leur mode de câblage. De nombreux exemples de programmes existent sur ce site pour les commander en fonction de la position de vos trains sur le réseau. Une fois de plus, quelques montages très simples, à base d’Arduino, permettent de donner plus de réalisme à nos réseaux.

18 Messages

  • Signaux lumineux et Arduino 20 février 2021 12:13, par Wandrille COURAYE du PARC

    Bonjour,

    Article très intéressant !
    J’aimerai savoir s’il est possible de commander le module ARDUINO (état des sorties HIGH ou LOW) par simple inter ? ou faut-il obligatoirement passer par un PC ?

    Merci !

    Répondre

  • Signaux lumineux et Arduino 20 février 2021 15:31, par msport

    Vous trouverez la réponse en lisant l’article :

    Voir en ligne : Arduino : toute première fois !

    Répondre

    • Signaux lumineux et Arduino 20 février 2021 15:42, par msport

      Mais en résumé, il vous vous faut :
      1. écrire un programme avec un ordinateur ;
      2. l’envoyer sur l’Arduino en le connectant avec un cable USB.
      3. à partir de là, l’Arduino devient indépendant pour exécuter ce programme qui allumera des LED en fonction de l’état des entrées choisies.

      Répondre

      • Signaux lumineux et Arduino 20 février 2021 20:48, par Wandrille COURAYE du PARC

        Merci, je vais étudier cette article pour voir si ARDUINO peut être utilisé dans mon cas.

        Répondre

      • Signaux lumineux et Arduino 20 février 2021 20:51, par Wandrille COURAYE du PARC

        Merci !

        Je vais étudier cette article pour savoir si c’est la bonne solution à mon problème.

        Répondre

  • Signaux lumineux et Arduino 20 février 2021 21:59, par msport

    Voyez également cet article :

    Voir en ligne : Bouton poussoir

    Répondre

  • Signaux lumineux et Arduino 14 septembre 2022 22:40, par MANU

    Bonjour à tous, mon réseau est en digital avec Digikeijs DR5000 et Rocrail , je désirais me mettre à la signalisation, je me suis procuré une arduino UNO et une MEGA 2560 + un DCC power/shield tout çà pour piloter +/- 30 signaux de 3 feux de la SNCB, mais dur pour la programmation , peut-on m’expliquer ou me donné une idée de programmation pour 1 signal , les autres il y aura plus qu’a les recopier en changeant les adresses, merci pour vos aides.

    Répondre

    • Signaux lumineux et Arduino 15 septembre 2022 00:18, par Christian

      Piloter un signal, c’est piloter des LED. Il y a deux façons de les raccorder, par leur anode ou par leur cathode, cela dépend du type de signaux que vous avez. Et c’est avec digitalWrite qu’on peut les allumer ou les éteindre.
      A partir de là, vous avez de nombreux articles sur ce site qui vous expliquent comment faire, il faut les lire.
      Car, d’après ce que vous écrivez, je ne sais absolument pas où vous bloquez, donc c’est difficile de pouvoir vous dire comment vous en sortir.
      Commencez par commander des LED pour réaliser un feu de carrefour ou bien un chenillard ; cela vous permettra de débuter et vous verrez que pour les signaux, c’est exactement la même chose. Et si vous n’y arrivez toujours pas, il faudra décrire ce qu’il se passe.

      Répondre

      • Signaux lumineux et Arduino 15 septembre 2022 08:54, par MANU

        Merci pour votre réponse
        J’utilise des leds de 1.8v et 2.2v que je dois monter sur mes signuax 3D que j’ai fait puis de là je dois les programmer sur Arduino puis sur la centrale et enfin sur Rocral mais dur de le faire , un peu complexe mais je trouverai un exemple du programme.
        Bonne journée à vous

        Répondre

        • Signaux lumineux et Arduino 15 septembre 2022 09:37, par Christian

          La première chose à faire est déjà de monter vos signaux 3D ; je vous conseille de mettre une résistance de limitation par LED et non une seule sur le fil de retour. Ainsi, vous pouvez allumer plusieurs feux en même temps si nécessaire (je ne connais pas la signalisation SNCB).
          Lorsque les feux fonctionnent, vous pouvez les raccorder à une carte Arduino pour apprendre à les commander : ici, les articles de LOCODUINO vous seront utiles.
          Enfin, si vous utilisez une centrale, il vous faut un décodeur d’accessoire avec une adresse DCC ; ici, ce n’est plus tout à fait de l’Arduino. De même pour RocRail.
          Ne vous inquiétez pas : avec un peu de ténacité, on arrive à tout et vous avez le forum pour trouver de l’aide.
          Bon courage.

          Répondre

          • Signaux lumineux et Arduino 28 septembre 2022 13:14, par Manu

            Bonjour Christan, je vous ai écoutez , j’ai monter ma DCC Shield/ power que j’ai mis sur ma UNO , j’ai programmer UNO pour 1 feux 3 aspect aux adresse 300-300-301 (vert, rouge, jaune ( 2x ) cela fonctionne super bien, je peux les changer sur Rocrail , puis j’ai mis un 2° feux aux adresse 302-302-303, le test final fonctionne, 1° adresse ok et la 2° parfait, mon problème est que sur Rocrail plus moyen de changer les feux, je ne trouve pas le moyen de programmer mes feux pour qu’ils soyent reconnu et fonctionnels sur Rocrail.
            Les signaux SNCB fonctionne comme suite : vert (canton libre) - rouge ( occupé) - jaune (ralentissement

            Mon matos est : dr5000 avec Rocrail et Arduino - Arsigdec - Dcc power/shield .

            Merci à vous si vous trouvez la solution .

            Répondre

            • Signaux lumineux et Arduino 28 septembre 2022 14:19, par Christian

              Bonjour Manu,
              Je serais bien incapable de vous trouver une solution parce que je ne connais pas le matériel que vous citez étant donné que je travaille en analogique et pas en numérique.
              Vous trouverez des gens très compétents en numérique sur notre forum : c’est là qu’il faut ouvrir un fil pour expliquer votre problème et attendre une réponse. Il faut attendre d’eux une solution à un problème précis et bien expliqué, pas qu’il fasse à votre place un montage avec VOTRE matériel.
              Bon courage et bonne chance.

              Répondre

  • Signaux lumineux et Arduino 15 septembre 2022 19:23, par msport

    Bonjour,
    l’article suivant pourrait être un début de solution à votre problème.
    Lisez les messages et les renvois.
    Cordialement

    Voir en ligne : Un décodeur DCC pour les signaux à deux ou trois feux sur Arduino NANO/UNO

    Répondre

    • Signaux lumineux et Arduino 17 septembre 2022 07:55, par Manu

      Super sympa pour votre réponse j’ai une UNO et 1 MEGA 2560 + 1 DCC power/shield, donc je pense que je vais m’en sortir avec vos aides
      Merci bon WE

      Répondre

  • Signaux lumineux et Arduino 19 septembre 2022 09:06, par Manu

    Bonjour, je suis en route sur le montage de mon DCC POWER/SHIELD et je cale sur les options A qui consiste à une alimentation par secteur et B qui consiste à l’alimentation par DCC pour l’alimentation de ma carte, peux t-on faire les 2 ou je fait celle avec le DCC vu que je la branche avec ma centrale DR5000
    Merci à tous

    Répondre

    • Signaux lumineux et Arduino 19 septembre 2022 09:49, par Christian

      Je ne sais pas ce que fait cette question ici : nous ne produisons pas la carte shield DCC Power, nous n’en parlons même pas dans cet article.
      Adressez vous au constructeur pour toute question qui concerne leur matériel.
      Cordialement.

      Répondre

Réagissez à « Signaux lumineux et Arduino »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Matériel »

Les derniers articles

Les articles les plus lus