Contrôler vos trains MFX depuis un Arduino Due SANS passer par la Gleisbox

Bonjour,
Souhaitez-vous contrôler vos trains MFX depuis un Arduino Due SANS passer par la Gleisbox ?


D’autres documents figurent sur mon site gelit.ch

  • Maquette actuelle avec 20 trains en mouvement simultané
  • Centrale MM2 et DCC

A votre disposition pour tout complément
Gérald Litzistorf retired IT professor

4 « J'aime »

Bonjour Gérald,

Bienvenue sur le forum.
Ton expertise concernant Arduino va être très bénéfique pour le forum.

Quant à la circulation des 20 convois…c’est assez bluffant.

Cdlt,

Claude papaciela

Waouh ! Impressionnant tes 20 trains ! :+1:

Philippe

Bonjour Gérald, sur la vidéo, on voit une crocodile avec wagons-citerne descendre une pente qui m’a l’air importante. Par curiosité, combien de % fait cette pente ? Les trains ne l’emprunte que dans le sens de la descente ?
Merci et bravo.

Bonjour Gérald,

Ce que tu présentes est en effet un très gros travail que je connaissais depuis quelques temps. Nous avions d’ailleurs eu l’occasion d’échanger par mail. Ce qu’il y a de plus intéressant à mon avis c’est que tu as la maitrise jusqu’au signal de voie. Je suis très curieux sur ce sujet et j’ai beaucoup parcouru les forums. Je n’ai encore rien trouvé d’aussi complet et surtout de finalisé. Il y a bien les différents travaux que tu cites mais aucun n’est abouti.

Je me réjouis que tu le publies ici qui me semble le lieu idéal. Je vais également pouvoir te poser les questions que j’ai à ce sujet.

Je crois que tu utilises un soft « personnel » pour commander les locomotives, peut être aussi pour les automatismes car je vois que ton programmes inclus le S88. Y a-t-il des possibilités d’interfacer des logiciels comme Rocrail ou iTrain par exemple ?

Tu utilises un Arduino Due avec la bibliothèque « DueTimer.h ». Le Due est une carte assez chère en version officielle. As-tu pensé à porter le soft sur d’autres plateformes comme l’ESP32 ou peut-être mieux encore le Raspberry PI Pico qui, en sus de la vitesse disposent d’un double cœur ?

Un autre point qui m’intéresse bigrement est de savoir si ton programme pourrait permettre une identification des locomotives (rétro signal) sur des sections isolées à l’instar de Railcom en 2R ?

En tous les cas, merci encore pour ce partage très enrichissant.

Christophe

Bonjour Gérald

Vidéo impressionante bravo , 1ère question qui me vient à l’esprit : quelles sont les dimensions
du réseau ?
Merci
André

Bonjour et bienvenue,

Comment accède-t-on à ce site ? Toute tentative ne me donne accès qu’à quelques documents PDF.

Merci

Philippe

Bonjour Philippe
lien https://gelit.ch/
Bonne lecture

Bonjour André
C’est un L de 440 x400 cm
je peux fournir les fichiers .tra (ou pdf) produit avec Gleisplan

Bonjour Christophe,
Merci pour tes compliments; tu imagines que je n’ai pas réalisé cette maquette en 1 jour !

En réponse à tes questions :

Mon objectif était de maîtriser toute la chaîne logicielle (sans Rocrail ou iTrain)
Le plus simple est d’étudier le code Visual Studio 2022 de mon analyseur logique

j’utilise WPF (Windows Presentation Fondation) pour créer les lignes et insérer les images

A propos de l’excellent ESP32, je vais étudier si je trouve l’équivalent de DueTimer.h
je te tiens au courant

Je te propose la solution suivante pour l’identification des locomotives

  1. utiliser https://gelit.ch/Train/DirectMFX.ino
  2. associer avec getSID un identifiant fixe SID à chaque loc
  3. placer une détection S88 à l’endroit désiré sur le bloc X
  4. identifier facilement la loc à partir du blox X

Bonjour
Hauteur = 9.5 cm Longueur = 220 cm → pente = 4.3 %
… il y a une pente identique à droite de la maquette pour la montée

L’ESP32 est un microcontrolleur intéressant en effet compte tenu de ses nombreuses possibilités (WiFi, Bluetooth, CAN… mémoire flash importante…). Et son prix est extrêmement compétitif compte tenu de ses possibilités.

Mais pour ce qui est des timers justement, il est loin de briller. DCC-Ex, qui est le principal projet actuel pour réaliser des centrales DCC en maitrisant les trames de voie s’éloigne de plus en plus de cette plateforme au profit du ST32 en particulier.

J’avais moi-même développé ma propre machine à états pour générer un signal DCC en utilisant les timers de l’ESP32 (pour y inclure Railcom ce qui n’existait pas). Si cela t’intéresse, c’est ici : DCCxx-ESP32-Railcom/src/DCC.cpp at main · BOBILLEChristophe/DCCxx-ESP32-Railcom · GitHub

Mais j’avais tout de même environ 25% des trames qui étaient hors spécification NMRA.

DCC-Ex par contre a réussi à maîtriser parfaitement le signal, je regarderai quelle technique ils ont utilisé.

Sinon le Raspberry PI Pico est peut-être une alternative à étudier.

Christophe

PS : Après une rapide recherche, j’ai vérifié que DCC-Ex utilise le RMT qui à l’origine était prévu pour les télécommandes IR mais s’avère beaucoup mieux adapté dans ce cas que les timers

https://docs.espressif.com/projects/esp-idf/en/v4.3/esp32/api-reference/peripherals/rmt.html

et la page du Github de DCC-Ex concernant le RMT CommandStation-EX/DCCRMT.cpp at master · DCC-EX/CommandStation-EX · GitHub

Bonjour Christophe,
Désolé mais ma carte NodeMCU ESP32 30 pin refuse d’alimenter le composant L293D
Failed uploading: uploading error: exit status 2

Je te propose toutefois ce code ESP32 qui semble fournir le signal souhaité sur les sorties 13 et 14 (destinées au L293D)
https://gelit.ch/Train/DirectMFX_ESP32.ino

NB : dans BoardManager utiliser une version 2 - j’ai testé avec V2.0.17

Au niveau investissement, une carte Arduino Due coute en Suisse le prix d’un petit wagon Märklin

Tiens moi au courant

C’est cool Gerald, je vais regarder cela pour l’ESP32 et je te redis.

De mon côté j’ai en fait adopté le Raspberry Pi Pico qui me semble pour ce projet mieux adapté que l’ESP32 pour les raisons que j’ai formulé plus avant. Les timers me semblent beaucoup plus précis que ceux de l’ESP32.

Mon code pour Raspberry Pi Pico ne retourne pas d’erreurs de compilation mais je n’ai pas encore pu le tester car je ne suis pas chez moi encore pour deux jours. Je le testerai également en rentrant et je te tiendrai au courant.

Le code pour Raspberry Pi Pico est ici : https://github.com/BOBILLEChristophe/DirectMFX_RPI_Pi_Pico/blob/main/src/main.cpp

Je voulais avoir une précision importante de ta part, tu ne mentionnes aucune licence !!! Est-ce que tu acceptes que ton code soit modifié dans les conditions normales de l’open source en ce qui concerne en particulier la citation de l’auteur original.

Dans tous les cas, ce projet est très excitant et intéressant. Comme je te l’avais déjà dit, je le connaissais depuis un moment mais je n’avais jamais pris le temps de m’y atteler.

Si tu en es d’accord, (d’où mon observation sur la licence), je serai très intéressé pour le rendre interfaçable justement avec les logiciels de gestion de réseau comme Rocrail, iTrain etc… et sur de plateformes moins “exclusives” que le due.

Pour moi, il est en particulier nécessaire d’implanter le CAN qui est vraiment (avec le TCP) ce qui permettra d’ouvrir à tous les équipements Marklin, CS2, CS3 et MS2.

Dans l’attente de te lire.

Christophe

Bonjour Christophe,
Tu peux utiliser mon source (en précisant simplement ce lien https://gelit.ch/Train/DirectMFX.ino ) et le modifier à ta guise

Ton travail va consister à lier les appels CAN produits par Rocrail avec la partie de code située dans les lignes 219 à 238 (Speed:0-7 Robel:8 BLS:9 l:Light d:Direction t:Turn s:Statistics)

Ne pas oublier de mettre à jour les lignes 257 et 273 pour le bon timing des paquets MM2 destinés au décodeur d’aiguille

A tout hasard un code minimum Arduino Due compatible Mobile Station 2 via bus CAN

Tiens moi informé de tes succès
Bien cordialement

Gerald,

Des news comme tu m’as demandé. J’ai testé le programme sur Raspberry PI Pico avec un L293 et j’ai du courant sur la voie en envoyant les commandes Power on et Power off.

Il faut que je recherche l’adresse UID de ma loco, j’ai écris un petit programme pour cela il y a quelque temps, qu’il faut que je le retrouve.

Ma loco sur la voie est alimentée et le son ou les lumières fonctionnent mais cela ne présume en rien que la modulation est ok (timers) et n’ayant pas l’UID, je ne peux pas encore vérifier. Mais ceci est déja un bon début.

Christophe

Gérald,

J’ai testé ton code pour ESP32 avec succès. Bravo !

Ce que je me propose de faire c’est de développer cette base sur l’un des cœurs de l’ESP32 avec freeRTOS et toute la partie communication CAN avec le traitement des requêtes sur l’autre cœur.

Cette communication en CAN en adoptant le protocole Marklin est selon moi absolument nécessaire pour que cette centrale puisse intéresser le plus grand nombre et la rendre compatible avec le plus grand nombre d’équipements.

Elle serait ainsi pilotable directement par tous les logiciels de gestion de réseau (Rocrail, iTrain…) ne nécessitant donc aucune autre centrale (CS 2 / 3, MS2), ni aucun autre booster. (Gleisbox).

J’ai vu que tu parlais du BTS7960 quelque part. Il est probable que ce soit le booster que tu as adopté sur ton réseau. Ou alors as-tu placé plusieurs boosters car le courant nécessaire pour un vingtaine de locos comme tu as dépasse largement les possibilités du L293.

Je pense que je vais adopter pour ma part un L6203 qui délivre 4A ce qui est déjà bien pour un réseau de 10 locos environ. C’est sur cette base que nous avons développé la centrale DCC de Locoduino qui est une super petite centrale.

https://www.locoduino.org/spip.php?article337

Quelles sont tes propres réflexions ?

Christophe

Excellentes nouvelles
Merci et bonne journée

Bravo Christophe, tu es très efficace
Je te laisse poursuivre ton développement qui devrait être très utile aux personnes désirant s’émanciper de la Mobile Station 2
Utilises-tu d’autre lien que https://www.maerklin.de/fileadmin/media/service/software-updates/cs2CAN-Protokoll-2_0.pdf ?

Tu me donnes l’envie de découvrir ces logiciels Rocrail, iTrain, … ce qui va m’encourager à refaire du bus CAN sur mon cher Arduino Due. J’avais développé le côté centrale basé sur Railuino
Que me conseilles-tu (Rocrail ou iTrain) pour commencer ? … si possible avec un lien utile car Rocrail regorge de documents sur internet

Pour mes 20 trains, j’utilise 4 boosters Littfinski DB-4 avec mesure transmise par Bluetooth Low Energy avec Arduino MKR https://gelit.ch/Train/Descriptif.pdf

Bien cordialement

Bonjour Gérald,

Oui c’est le seul document que j’ai utilisé. Pratiquement toutes les fonctions y sont (pas toutes cependant).

J’ai déjà publié sur le forum une traduction française partielle que j’ai réalisée et qui contient l’essentiel de ce dont on a besoin pour une centrale. Si tu veux je te l’adresse.

Je suis à la fois un inconditionnel du CAN et également de la messagerie CAN de Marklin.

Je ne pense pas qu’il y ait besoin de te vendre les (multiples) avantages du CAN sur un réseau de trains miniature. Par ailleurs, la messagerie de Marklin est, selon moi, particulièrement bien faite. J’apprécie en particulier le mécanisme de confirmation « d’exécution » (ce n’est pas tout à fait cela). Un message avec le même identifiant où seulement le bit 17 est mis à 1 signifie que le message est confirmé par un ou plusieurs des destinataires. Les datas elles peuvent varier selon le contenu de la réponse. Simple et efficace !

Ce que l’on ne sait pas beaucoup, c’est que Marklin utilise une structure de messagerie très similaire pour le TCP. Il n’y a donc pas à se « fader » deux protocoles. Les messages TCP de Marklin contiennent toujours 13 octets, 8 pour le 8 octets de data d’un trame CAN et 4 octets pour l’identifiant et 1 octet pour le nombre d’octets de datas. Cette structure quasi similaire pour TCP et CAN est vraiment géniale pour développer des applis qui utilisent un fois l’un, une fois l’autre.

Concernant Rocrail (ou iTrain) les différences sont à mon avis essentiellement cosmétiques.

Pour le 3R, je suis parti un jour sur Rocrail et j’y suis resté. Je cois que @Julaye teste les deux, tu peux suivre ses fils ou te rapprocher d’elle. Elle est par ailleurs très branchée Arduino.

Ce que je trouve intéressant dans Rocrail, c’est qu’il est possible de se connecter à autant de contrôleurs que l’on souhaite. Une centrale est un contrôleur, un nœud CAN de rétrosignalisation est un contrôleur, un Arduino qui commanderait des moteurs d’aiguille au travers d’un bus CAN est aussi un contrôleur.

Dans tous les cas, utiliser Rocrail avec le protocole Marklin est un jeu d’enfant.

Tu trouveras l’implantation des commandes CAN de Marklin dans la centrale DCC laBox. C’est similaire pour le MFX bien sûr : https://github.com/BOBILLEChristophe/CommandStation-EX-Labox-CAN/blob/main/src/CanMarklin.cpp

A+

Christophe

1 « J'aime »