Digital Command Control

Firmware : Genèse d'une bibliothèque DCCpp

En DCC l'énergie électrique pour faire avancer nos locos est modulée par un signal numérique au travers duquel les commandes sont envoyées vers les décodeurs. En modélisme ferroviaire, nous avons besoin d'une centrale DCC pour piloter nos trains avec une commande numérique. Un projet de commande DCC a été concrétisé par Gregg E. Berman qui a écrit le projet DCC++ pour Arduino. Il a ensuite été repris et étendu par Thierry Paris qui en a fait une bibliothèque DCCpp. (Voir www.locoduino.org). Finalement j'ai ajouté la lecture de 2 ports de rétro-signalisation S88 dans cette bibliothèque qui s'appelle désormais : DCCppS88.
En résumé voici les possibilités fournis par cette bibliothèque logicielle :  (d'après une traduction du texte du premier auteur par le second que j'ai complétée)


DCC++ BASE STATION est un programme C++ pour l’Arduino Uno/Nano et l’Arduino Mega utilisant l’Arduino IDE 1.6.6 ==> 1.8.9

Il permet à un Arduino Uno/Nano ou Mega standard équipé d’un Arduino Motor Shield (ou d’un autre) d’être utilisé comme une centrale DCC complète, conforme aux standards DCC du NMRA, pour un réseau de modélisme ferroviaire numérique.

Cette version de DCC++ BASE STATION supporte :
  • Adresse de décodeur sur deux octets (128 adresses courtes) et quatre octets (10240 adresses longues)
  • Contrôle simultané de plusieurs locomotives (99 dans mon projet)
  • Commande à 128 pas de vitesse
  • Fonctions F0 à F28
  • Activation d’accessoires utilisant 512 adresses, chacune avec 4 sous-adresses (norme NMRA complète)
  • Est incluse la possibilité de stocker l’état courant d’aiguillages connectés à cette centrale
  • Programmation d’un décodeur sur la voie principale
    • Ecriture de CV par octets
    • Ecriture de CV par mise à jour de certains bits individuellement
  • Programmation sur une voie dédiée de programmation
    • Ecriture de CV par octets
    • Ecriture de CV par mise à jour de certains bits individuellement
    • Lecture de CV ou données émises par le décodeur en cours de programmation
  • Lecture de 2 bus S88 qui supportent jusqu'à 512 capteurs (2x256)
  • Lecture du courant sur la voie principale

DCC++ BASE STATION est contrôlé par des commandes textes reçues par l’interface série de l’Arduino. Elles peuvent être envoyées par la console série de l’IDE Arduino, ou par des interfaces ou des programmes extérieurs.

Sur un Arduino Mega, un shield Ethernet peut être utilisé pour recevoir des ordres via un réseau informatique plutôt que par la liaison série.

Shield : Carte d’extension munie de connecteurs mâles et qui s’enfichent dans les connecteurs des cartes Arduino Uno, Duemilanove et Mega. Un shield peut également présenter des connecteurs gigognes qui permettent d’empiler plusieurs shields.



Hardware : Arduino

Mes projets utilisent une seule carte Arduino Mega 2560 mais il est possible d'utiliser une carte Arduino Uno ou même Arduino Nano avec cependant certaines limitations dues à la petite taille mémoire de ces deux dernières. A la sortie PWM de l'Arduino je connecte un circuit AM26C31 pour générer deux signaux symétriques qui commandent des modules Booster L298. Les circuits compatibles RS422/RS485 conviennent à condition de savoir les brancher. J'ajoute des modules MAX471 pour la mesure du courant et une alimentation 19VDC protégée contre les court-circuits. Pour interconnecter ces éléments entre eux, je recommande d'utiliser des fils groupés dans un seul connecteur Dupont pour une meilleure stabilité mécanique des connexions. Enfin je cable 2 prises RJ45 sur les 2 ports S88-N que j'ai crée sur l'Arduino. Mes projets sont décrits dans les onglets suivants du menu "Alimentation DCC".


Firmware sur Arduino : DCCppS88

DCCpp est une bibliothèque C++ pour l'Arduino Uno/Nano et l'Arduino Mega compatible avec l'Arduino IDE 1.8.4. Les trains sont pilotés à partir de commandes texte ou par des entrées/sorties cablées avec des boutons que vous déclarez dans votre projet software.

J'ai intégré dans DCCpp une interface S88 pour lire la rétro-signalisation avec le même Arduino. Cette extension S88 s'interface parfaitement avec un programme qui supervisera tout votre réseau : JMRI par exemple. Cette bibliothèque s'appelle désormais DCCppS88. Voir dans le menu "Centrales DCC" et sélectionner l'onglet : "Le générateur DCCppS88".


Software sur PC :

Vous pouvez utiliser un programme compatible avec DCC++ pour commander automatiquement tout votre réseau. Personnellement je me suis inspiré de logiciels créés par d'autres modélistes pour me lancer dans l'écriture de logiciels de commande manuelle de mon réseau. J'ai créé le logiciel CDT31 (Conducteur De Train) pour utilisateur confirmé. Enfin j'utilise le moteur d'exécution software Node.js pour interconnecter efficacement mon logiciel avec Arduino. Mes logiciels de commande sont décrits dans les onglets correspondants que vous retrouverez dans le menu "Logiciel". De plus, il est possible de piloter individuellement des trains en mode manuel dans un dépôt ou un triage avec CDT31 pendant que JMRI contrôle le réseau principal. Il suffit que le serveur accepte des requêtes venant d'un autre port ce qui est possible avec le moteur logiciel Node.js.

Avec mes centrales DCCppS88 WiFi et DCC32S88 WiFi, les logiciels WDD, TCOwifi et DMC conduiront les trains sans avoir besoin d'utiliser Node.js car ces centrales DCC possèdent un serveur intégré.

BB 25200