En raison de la quasi-absence de tutoriels en langue française consacrés à JMRI et de la richesse de ce gratuiciel, il est difficile d'en connaître les possibilités et surtout de savoir par où commencer.
Après être parvenu à construire un petit poste à itinéraires inspiré de ceux en usage à la SNCF, je me suis avisé que la méthode employée pourrait intéresser d’autres modélistes.
N’étant ni électronicien ni programmeur de métier, l’utilisation conjointe de JMRI, C/MRI et d’Arduino m’a semblé plutôt abordable. Le plus compliqué ayant été de comprendre comment tirer profit de JMRI parmi les très nombreuses fonctionnalités de ce logiciel gratuit.
Ceci exposé, le fait que JMRI permette de réaliser des exploitations intégralement personnalisées de façon économique nécessite une implication personnelle plus importante que pour un produit « clé en main » dont il faudra par contre s'accommoder des limitations.
Ces quelques pages présentent un exemple de ce qu'il est possible de faire avec ce logiciel gratuit associé à des composants peu onéreux et la façon d'y parvenir.
Atouts de JMRI Panel Pro
JMRI Panel Pro constitue l'un des modules de JMRI. Il s'avère intéressant pour reproduire une exploitation SNCF à bien des égards :
- Premièrement, JMRI propose de très nombreux types de signalisations, dont celui en usage à la SNCF. Il convient toutefois de noter que certaines combinaisons de signaux lumineux proposées par JMRI n'existent pas dans la réalité.
- Ensuite, JMRI offre la possibilité d’effectuer une exploitation automatisée ou semi-automatisée du réseau, dès lors que ses éléments ont été correctement paramétrés.
- JMRI permet aussi d’utiliser des smartphones ou des tablettes Android en guise de manette, grâce à l'application JMRI Engine Driver Throttle, plus communément appelée Engine Driver, téléchargeable gratuitement.
- JMRI dispose également de fonctionnalités permettant de créer assez facilement des systèmes personnalisés de contrôle du réseau à partir d’un écran de PC, ce qui évite de devoir construire et de câbler une table de commande et de contrôle.
- JMRI par ailleurs est doté de nombreuses possibilités de liaison avec le réseau. Il en existe notamment une qui permet de commander de façon économique les aiguilles et les signaux, mais aussi de regrouper les détecteurs d’occupation de voie et de position des aiguilles ; elle repose sur l’utilisation (gratuite) de C/MRI qui permet de relier JMRI à ou plusieurs Arduino branchés sur l’un des ports série de l’ordinateur. Cerise sur le gâteau, Rob, l’animateur de la chaîne Little Wicket Railway propose plusieurs tutoriels consacrés à ce sujet et le sous-titrage en français généré par YouTube est globalement correct.
- Enfin, JMRI dispose également d'un outil de lecture et de programmation des CV (Décoder Pro), capable de stocker toutes les CV de chaque engin équipé de décodeur, et de les mettre instantanément à disposition des autres modules.
Versions utilisées dans le cadre de la démonstration
Consistance du projet
Afin de vérifier l’adaptation de JMRI à la reproduction d’un contexte SNCF, je me suis fixé l'objectif de reproduire le fonctionnement d'un poste à itinéraires commandant une gare dotée d'une voie directe et d'une voie d’évitement.
La gare comporte :
- un signal carré par voie pour chacune de ses sorties,
- une protection de chaque entrée par signal carré,
- deux aiguilles de dédoublement commandées par (servo)moteur ;
- bien que cet équipement ne soit pas mis en œuvre dans des gares aussi simples, il a paru intéressant de prévoir la possibilité de réception sur voie occupée à l'une des extrémités de la gare, pour démontrer les possibilités offertes par JMRI.
- un signal de cantonnement intermédaire par sens sur la voie banalisée
- Un enclenchement de sens à libération temporisée après dégagement du train, de sorte à pallier les risques de déshuntage.
Les signaux utilisés n'étant pas pourvus de décodeurs intégrés, ils seront commandés par un Arduino faisant office de décodeur.
Pour des raisons de facilité de réalisation, le projet repose sur le classique ovale avec la non moins classique implantation de la gare parallèlement à l’un des bords. Mais nous allons constater que cette disposition sera suffisante pour découvrir tranquillement JMRI.
Les paires de chiffres figurées en jaune correspondent aux coordonnées des jonctions entre les éléments de voie
Les commandes et les contrôles sont représentés sur l’écran. Les commandes s’effectuent par des clics de souris sur la zone activable des boutons présents sur l'écran.
Principe
Le principe est le suivant :
- La commande et le contrôle du réseau s'effectuent depuis l'écran de l'ordinateur,
- La gestion des commandes et de l'affichage, ainsi que la réalisation des enclenchements, s'effectuent par le programme JMRI tournant sur l'ordinateur,
- la transmission entre l'ordinateur et le réseau s'effectue par une liaison série RS 485 (port USB),
- les échanges d'informations transitant par la liaison série sont régis par le protocole C/MRI,
- le regroupement et la transmission, vers JMRI, des informations issues des capteurs s'effectue via un microcontrôleur de type Arduino qui retransmet également les ordres reçus de JMRI aux aiguilles, signaux et lumières,
Commande et contrôle du réseau depuis l'écran de l'ordinateur
Dans le cadre de cet exemple, l'interface de commande et de contrôle sera réalisée au moyen de l'éditeur de réseau (Layout editor) de JMRI Panel Pro.
Il existe au moins deux façons de procéder :
- Soit on crée d'abord l'ensemble des éléments dans les tableaux proposés par JMRI Panel Pro, puis on réalise le schéma en y incorporant les éléments précédemment créés,
- Soit on dessine un schéma du réseau avec l'éditeur de réseau de JMRI Panel Pro, puis on crée les tableaux contenant les éléments, avant d'affecter ces éléments au schéma préalablement dessiné.
La solution adoptée dans cet exemple consiste à créer les éléments dans les tableaux idoines avant de les incorporer, parce que l'éditeur de réseau n'est pas qu'un simple outil de dessin. Il a en effet été conçu pour créer automatiquement des liens entre des objets (entre zones isolées contiguës, par exemple) en vue de faciliter les opérations ultérieures. Son utilisation est donc indispensable.
JMRI Panel Pro propose plusieurs interfaces de commande et de contrôle ; celle qui sera utilisée est issue de l'éditeur de réseau, bien que relativement sommaire. Si l'on souhaite réaliser une table de contrôle et de commande plus sophistiquée, il sera nécessaire d'en créer une deuxième par la suite, avec un autre outil JMRI de la même famille (éditeur de panneau).
La désignation des itinéraires comporte le numéro du signal origine, puis celui de signal de destination, ces derniers étant séparés par un trait d'union. Exemple : 101-201.
(Changement d'extrémité de la locomotive d'un train stationné sur la voie directe).
Echanges entre l'ordinateur et le réseau
Ces échanges s'effectuent par une liaison série issue de l'un des ports USB de l'ordinateur et reliée à un ou plusieurs Arduino, chaque Arduino émulant un (ou plusieurs) nœud(s) C/MRI.
La gestion de ces échanges est assurée par le protocole C/MRI :
- Directement paramétrable par un menu spécifique de JMRI, pour le côté ordinateur
- Paramétrable relativement simplement (une ligne de code) dans l'Arduino dans lequel on aura préalablement téléversé les deux bibliothèques relatives à la liaison série et au protocole C/MRI
Arduino
On aura recours à un (voire plusieurs, selon l'importance du réseau) Arduino, généralement de type « Mega » doté d'un « bouclier » (shield) sur lequel seront branchés les capteurs ainsi que les sorties de commande.
Le programme de l'Arduino comprendra :
- Une ligne relative à l'interface C/MRI (numéro de nœud, nombre d'entrées et de sorties),
- Une partie dans laquelle on indiquera les actions à exécuter en fonction des octets reçus via la liaison série (allumage des feux des signaux, manœuvres d'aiguilles),
- Une autre partie dans laquelle on affectera les entrées des capteurs (détecteurs d'occupation de voie, de position d'aiguille) aux liaisons d'entrée JMRI.
Méthode
1 - Recensement de tous les éléments nécessaires
Dans l'idéal, chaque élément (aiguille, signal, itinéraire, zone de détection, commande, contrôle, appellation, etc.) devrait être prévu en phase de conception.
Même si JMRI semble très stable, mieux vaut éviter les ajouts ou changements en cours de route. En effet, si JMRI gère très bien les changements d'appellations, grâce à la double identification d'un élément par son « Nom système » et par son « Nom Utilisateur », il se montre parfois beaucoup moins coopératif si on lui demande de supprimer des objets devenus inutiles ou de modifier des signaux après leur création.
Il arrive aussi assez fréquemment que les changements de dernière minute soient bien moins maîtrisés qu'escompté, du fait d'une mauvaise appréciation de l'impact ou de l'ampleur des modifications.
Un croquis constitue une aide d'autant plus précieuse que le paramétrage d'un réseau ne s'effectue pas en une soirée...
2 - Détermination du nombre de liaisons entre JMRI et le réseau
La détermination préalable du nombre de liaisons entre l'ordinateur et le réseau est nécessaire pour procéder (très simplement, qu'on se rassure) au paramétrage du protocole C/MRI au sein de JMRI et de l'Arduino. Ces nombres se calculent assez aisément :
- En entrée (du réseau vers JMRI) :
- Détecteurs d'occupation de zone isolée (« canton » dans le vocabulaire JMRI) : une entrée par détecteur,
- Capteurs de position d'aiguilles
- Aucun, si on sélectionne le mode « Direct » (ce mode part du principe que les aiguilles obéissent toujours à leur commande),
- Une entrée si l'on ne contrôle que la seule position « Dévié » (mode « OneSensor »),
- Deux entrées si l'on contrôle les deux positions « Direct » et « Dévié » (mode « TwoSensor ») ;
- En sortie (de JMRI vers le réseau) :
- Commande d'aiguilles :
- Une sortie par aiguille si cette dernière est commandée par servomoteur (mode de commande 1 bit et « steady stare output »),
- Deux sorties par aiguille si cette dernière est commandée par solénoïdes (mode de commande 2 bits et « pulsed output ») ;
-
Pour la commande des Signaux, il faut au minimum :
- Deux sorties pour un signal pouvant présenter jusqu'à trois indications (voire quatre, si on on ne garde pas de réserve),
- Trois sorties pour un signal devant présenter entre quatre et sept indications (voire huit, si on on ne garde pas de réserve),
- Quatre sorties pour un signal devant présenter entre huit et quinze indications (voire seize, si on on ne garde pas de réserve),
- Cinq sorties pour un signal devant présenter plus de quinze indications, ce qui devrait être assez rare.
- Commande d'aiguilles :
Bon à savoir :
Une indication correspond à un aspect du signal. Par exemple, l'un des signaux de notre projet peut présenter les indications : Carré fermé, Feu rouge clignotant, Avertissement fermé + Rappel ralentissement 60, Avertissement fermé, Rappel Ralentissement 60 et feu vert, soit 6 indications.
En effet, le groupe « Avertissement fermé + Rappel ralentissement 60 » doit être considéré comme une indication à part entière et non pas comme l'addition d'une indication « Avertissement fermé » et d'une indication « Rappel de Ralentissement 60 ».
Ceci s'explique par les raisons suivantes :
-
JMRI transmet, au décodeur(Arduino, dans notre cas), une commande codée de l'indication à faire afficher par le signal ; Dès réception de cette commande,
le programme de ce dernier (« croquis » de l'Arduino) va provoquer :
- l'extinction des feux de l'indication précédemment commandée,
- puis l'allumage des feux correspondant à l'indication reçue de JMRI.
- C/MRI ne transmet qu'une commande à la fois.
Dès lors, si l'on transmet successivement une commande de l'indication « Avertissement fermé », puis une commande de l'indication « Rappel Ralentissement 60 », le décodeur va :
- éteindre les feux correspondant à l'indication anétrieurement commandée,
- allumer le feu jaune situé en bas du châssis-écran et de l'œilleton à la réception du premier ordre (« Avertissement fermé »),
-
Puis, à la réception du deuxième ordre (« Rappel Ralentissement 60 ») :
- Eteindra le feu jaune situé en bas du châssis-écran ainsi que l'œilleton,
- Puis commandera le clignotement des deux feux jaunes du Rappel Ralent 60 (feux disposés sur une ligne verticale sur la partie supérieure droite du châssis-écran) et l'allumage conjoint de l'œilleton.
Il est donc bien nécessaire de considérer que tout groupement de signaux par ailleurs portés individuellement par le signal, ou tout clignotement de feux existant sous forme fixe sur le signal constitue une indication à part entière et doit être pris en compte dans le dimensionnement des sorties.
3 - Saisie dans JMRI Panel Pro
Ce recensement étant effectué, on entreprendra alors le travail dans JMRI Panel Pro :
- Paramétrage de JMRI dans le menu « Préférences » de Panel Pro, si ce n'est pas déjà fait,
- Entrée des informations dans les tableaux « Mâts de Signalisation », « Aiguillages », « Capteurs »,
- Incorporation de tous ces éléments dans un dessin du réseau dans le module « Editeur de Réseau » (Layout editor),
- Création des « Cantons » (blocks) qui correspondent aux capteurs d'occupation de zones isolées,
- Création des LogixNG destinés à faire fonctionner le poste, ses enclenchements, ses aiguilles et ses signaux.