Comment piloter trains et accessoires en DCC avec un Arduino (3)

Assemblage des éléments d’une mini-centrale DCC

. Par : Dominique. URL : https://www.locoduino.org/spip.php?article19

L’article N°1 de la série "Comment piloter trains et accessoires en DCC avec Arduino" présentait le montage minimal pour tester la bibliothèque CmdrArduino, décrite en détail à l’article N°2.

Nous allons assembler maintenant les ingrédients matériels et logiciels d’une petite centrale DCC.

IMPORTANT : cette réalisation d’une centrale DCC est maintenant "dépassée" car une nouvelle technique dénommée "DCC++" est venue la remplacer. Nous vous conseillons cette série d’article : Réalisation de centrales DCC avec le logiciel libre DCC++ (3).

L’architecture générale d’une centrale DCC

On a vu comment une carte Arduino peut générer des signaux DCC de commande de vitesse, de fonction et d’accessoire, voire de programmation.

Entre notre carte Arduino et les rails, il faut, bien-sûr, amplifier ces signaux pour qu’ils puissent commander les moteurs des locomotives (via son décodeur) à partir de l’alimentation électrique du réseau : il faut un Booster. Ce Booster convertit un petit signal 0-5 volts de quelques milliampères en un gros courant de 2 à 3 ampères sous +15 à -15 volts (+12 à -12 volts pour le N).

Ensuite, et surtout, il faut des organes de commande pour décider quelles commandes DCC envoyer vers les rails selon la volonté du conducteur (vous) : il faut une manette de commande, par utilisateur et par train, de préférence.

Enfin, notre centrale doit pouvoir réagir automatiquement à certains événements comme la détection de présence d’un autre train qui occupe le prochain canton, ou un carré qui nécessite un arrêt devant le feu :

  • pour le découpage du circuit en Cantons, pour la régulation du trafic, en agissant directement sur les commandes de vitesse des locomotives,
  • ou pour l’activation des feux ou le changement de sens des aiguilles, en agissant sur les commandes des accessoires

Notre système complet pourrait ressembler à cette architecture générale :

Mais une telle architecture dépasserait allègrement les limites de cet article qui ne traitera pas :

  • de tous les types de capteurs (courant, infrarouge, RFID, etc…),
  • de tous les types de manettes, détecteurs, PC, tablettes, smartphone et leurs protocoles de communication (LocoNet, XpressNet, S88, TCP/IP, WiFi, Bus, etc..),
  • et des alimentations électriques.

Ces sujets sont traités dans d’autres articles ailleurs dans ce site.

Mais pour se fixer les idées, nous allons décrire un exemple de mise en oeuvre d’une voie unique pour un train unique capable de circuler entre 2 gares aux extrémités selon un va-et-vient automatique ou manuel.

Tous les éléments de cet exemple pourront être réutilisés dans votre projet.

Compléter la centrale avec un Booster

Une broche de sortie d’un Arduino ne peut délivrer que 40 mA maximum (mais compter plutôt sur 20 mA) : il est donc impossible de faire rouler une loco qui a besoin de plusieurs centaines de milliampères. Il faut, d’une part, amplifier le signal et, d’autre part, monter la tension à 12-13 Volts (pour du N) ou 15 Volts (pour du HO).

Il faut donc un module d’interface appelé Booster dans la littérature ferroviaire. En réalité c’est un hacheur dit 4Q (pour 4 quadrants ou pont en H), réversible en tension et en courant dont la tension de sortie moyenne varie entre -15V à 15V.

On trouve des modules tout faits dans le commerce qui semblent faits pour cela (mais c’est un heureux hazard !).

Le principe de ce booster est le suivant :

On peut représenter le booster par un montage de transistors de puissance en H selon le schéma ci-dessous :

Le signal DCC généré par notre Arduino est appliqué à l’entrée DIR qui commande l’ouverture de 2 transistors/commutateurs et la fermeture des 2 autres, de telle sorte que la tension envoyée aux rails est soit dans un sens, soit dans l’autre sens. On a ainsi toute la puissance disponible mais elle est positive pendant 50% d’un bit du signal DCC et négative pendant l’autre 50%.

Le module à base de LMD18200 ci-dessous remplit exactement cette fonction.

Le signal DCC de notre Arduino est connecté à l’entrée DIR. Ce signal DCC sera généré en permanence par l’Arduino par un processus sous interruption, tournant en tâche de fond.

Une broche de sortie de l’Arduino sera connectée à l’entrée PWM : elle permettra de commander la livraison ou l’arrêt du courant sur les rails, à partir du logiciel (c’est important pour de multiples raisons de sécurité que nous verrons dans le logiciel).

La masse de l’Arduino est reliée à la masse du Booster et l’entrée BRAKE est mise à la masse car elle n’est pas utile dans cette application (on préfère se servir des paramètres CV de la loco).

Le circuit LMD18200 comporte aussi 2 signaux de sortie qui ne sont pas câblés sur les borniers :

  • C/S, analogique, est proportionnel au courant délivré
  • T/S, digital, indique si la température du composant dépasse 145°C.

J’ai choisi de raccorder ces sorties sur des entrées de l’Arduino, pour surveiller le booster et couper l’alimentation des rails dans les cas extrêmes.
Pour ce faire j’ai soudé 2 fils directement sur les pattes du LMD18200, sous le circuit imprimé :

Entre temps j’ai trouvé une meilleure solution pour la mesure du courant DCC et détecter les court-circuits : en ajoutant un petit circuit de mesure de courant à base de Max471, intercalé en série dans l’alimentation continue du LMD18200, comme représenté sur cette figure :

Ajouter une manette

On ne peut pas faire plus simple qu’un potentiomètre, un inverseur de direction et un inverseur pour la commande de lumière. Dans notre exemple, j’ai mis 2 potentiomètres, l’un pour la marche avant, l’autre pour la marche arrière. Cela évite d’être obligé d’utiliser un potentiomètre à point milieu, difficile à trouver ou un inverseur de direction. Et l’avantage sera qu’en mode automatique les vitesses aller et retour pourront être différentes.

Ajouter un TCO

Le TCO le plus simple sera ici constitué de 3 Leds :

  • une Led verte pour matérialiser la marche avant,
  • une Led rouge pour matérialiser l’arrêt,
  • one Led jaune pour matérialiser la marche arrière,
  • un afficheur LCD de 2 lignes de 16 caractères pour afficher les paramètres utiles à la conduite.

J’ai monté ces composants sur une plaque de plexi qui permet de voir l’électronique en action !

Les Leds de mouvement ci-dessus sont placées à gauche.

Pour équilibrer le TCO, j’ai placé d’autres éléments à droite (de bas en haut) :

  • un Inter Marche/Arrêt général,
  • un voyant vert présence tension d’alimentatio »,
  • deux Leds jaunes présence signal DCC sur les Rails,
  • une Led rouge arrêt du signal DCC (correspondant à la broche PWM),
  • un Inter Marche/Arrêt du DCC.

Ajouter des détecteurs

Nous utiliserons seulement 2 barrières infrarouges pour détecter le passage du train à l’approche des gares, afin d’automatiser l’arrêt automatique.

Le schéma est simple (n’importe quel transistor NPN devrait faire l’affaire) :

Pour 2 détecteurs seulement j’ai monté les composants discrets sur une plaque pastillée.

On place les diodes IR émettrice et réceptrice de chaque coté des rails :

Il est possible, à ce stade d’envisager d’utiliser d’autres types de détecteurs tels que :

  • détecteur de consommation de courant
  • détecteur magnétique à effet Hall
  • détecteur de code barre
    qui feront l’objet de descriptions détaillées ailleurs dans ce site, tous ces détecteurs étant interfacés avec notre Arduino de manière équivalente à celle du détecteur décrit dans cet article.

Le schéma des connexions de notre Arduino

Un Nano suffit !

Pour la construction, j’ai percé une plaque de plexi, fixé et connecté tous les composants

Puis, sur une 2eme plaque plus petite, j’ai fixé l’Arduino Nano sur une plaque pastillée à l’aide de barrettes à souder et le booster LMD18200.

Et le câblage de l’ensemble, en réunissant les 2 plaques de plexi :

Pour l’afficheur LCD 16x2, un petite carte SerLCD permet de le raccorder avec 3 fils seulement (+5, 0V et la sortie Tx de l’Arduino).

Que doit faire cette centrale avec tous ces ingrédients ?

C’est ce qu’on appelle une spécification. Elle décrit toutes les fonctionnalités de la centrale, qu’il faudra ensuite programmer :

  • Pilotage d’une seule locomotive ou train en mode DCC, 128 crans de vitesse. L’adresse DCC est programmable par configuration en EEPROM.
  • Un écran LCD permet de visualiser les paramètres de fonctionnement (adresse DCC, sens de la marche, cran de vitesse, vitesse réelle et km/h et cm/s, détections de passage devant les détecteurs IR, états d’automate, configuration des paramètres en EEPROM).
  • Deux réglages de vitesse indépendants pour la marche avant et la marche arrière :
    • en mode manuel, c’est la vitesse la plus grande qui impose le sens de la marche ;
    • en mode automatique, chaque sens dispose de sa propre vitesse ;
    • en mode configuration, les valeurs de 0 à 128 sont obtenues par l’addition de la rotation des 2 boutons.
  • Un commutateur permet la mise en ou hors service de l’éclairage de la locomotive.
  • Un commutateur permet le choix entre un pilotage manuel ou un Va-et-Vient automatique.
  • Un bouton poussoir MODE permet de choisir parmi 3 affichages et 10 écrans de configuration.
  • 3 Leds, à gauche, visualisent la marche du train :
    • vert : marche avant
    • rouge : arrêt. Cette Led s’allume aussi au passage du train devant un capteur IR
    • jaune : marche arrière
  • 3 Leds, à droite, visualisent le fonctionnement de la centrale
    • vert : présence tension si une alimentation 12 à 15 V est raccordée et en service
    • rouge : aucun courant n’est envoyé aux rails (arrêt du Booster)
    • jaune (paire) : visualise la tension sur les rails (l’inversion du courant permet d’allumer les 2 Leds)
  • Un commutateur Arrêt/Marche allume la centrale qui démarre une séquence d’initiatisation (c’est l’interrupteur Arrêt/Marche général).
  • Un commutateur d’alimentation des rails autorise l’envoi du courant DCC sur les rails (c’est un interrupteur logiciel car il est recommandé de couper l’alimentation DCC des rails avant d’installer ou retirer une loco).

Développer le logiciel pour l’Arduino

Maintenant que tout est réuni, la programmation pourrait commencer !
Mais, attention, notre Arduino doit faire pas mal de choses à la fois :

  • générer le signal DCC,
  • alimenter la bibliothèque CmdrArduino par des commandes de vitesse et de lumière qui dépendent des événements d’entrée suivants qu’il faut détecter,
  • lire les organes d’entrées (potentiomètres, boutons, inverseurs, capteurs infrarouge, sorties du Booster)
  • afficher des données sur le LCD
  • agir en automate ou en commande manuelle
  • allumer et éteindre des Leds
  • etc.. (vous verrez !)

Face à tous ces tâches, il faut éviter la programmation spaghetti, ou encore éviter de se mélanger les bogies quand le développement aura pris une certaine ampleur.

Nous aborderons la partie du logiciel dans la 4e partie