Auteur Sujet: Projet d'interface polyvalente pour JMRI  (Lu 8823 fois)

Etienne66

  • Jr. Member
  • **
  • Messages: 98
    • Voir le profil
Projet d'interface polyvalente pour JMRI
« le: mars 26, 2024, 02:55:21 pm »
Bonjour,
Comme demandé j'ouvre un sujet sur mon projet ici.

A base de mega2560
16 entrées analogiques dédiées à la détection de présence par courant
52 I/O digitales réparties à volonté entre servos, aiguillages, détecteurs infrarouge, feux, accessoires
Communication directe en USB avec JMRI
Possibilité de plusieurs cartes branchées sur un HUB USB.
Génération automatiques des objets dans JMRI avec des noms faciles à identifier et à modifier.
Modification des fichiers SNCF2015 de JMRI pour permettre une gestion prototypique de la signalisation;

Etienne66

  • Jr. Member
  • **
  • Messages: 98
    • Voir le profil
Re : Projet d'interface polyvalente pour JMRI
« Réponse #1 le: mars 26, 2024, 02:55:34 pm »
La communication avec JMRI :

Je suis parti des scripts de Geoff Bunza dans la carte sensors et la carte des turnouts.
Le principe est simple : on crée des objets sensors, aiguillages et feux virtuels dans JMRI
Le changement d'état d'un aiguillage ou d'un feu est transmis par un message de JMRI vers arduino
et réciproquement un changement d'état d'un capteur est transmis d'arduino vers JMRI.
Les objets virtuels de JMRI ont un nom système et un nom utilisateur.
Le problème des scripts de Geoff est qu'il utilisait le nom utilisateur pour les communications.
J'utilise les noms système et laisse l'utilisateur changer librement les noms utilisateur.
Comme Geoff j'attribue une lettre à chaque carte mais cette lettre ce retrouve dans les noms des objets.
Geoff génère 68 objets numérotés à partir d'un offset différent pour chaque carte.
Je numérote les objets avec le numéro de broche sur la carte mega.
Ainsi "Aig B 22" sera le nom système d'un aiguillage sur la broche 22 de la carte B

De plus les cartes vont transmettre leur configuration lors du reset ce qui permet au script JMRI de créer
les objets automatiquement (si ils n'existent pas déjà)
« Modifié: mars 26, 2024, 03:14:27 pm par Etienne66 »

Etienne66

  • Jr. Member
  • **
  • Messages: 98
    • Voir le profil
Re : Projet d'interface polyvalente pour JMRI
« Réponse #2 le: mars 26, 2024, 02:55:45 pm »
La détection de courant se fait avec une carte comportant 16 circuits simples à base de coils zmct103 branchés
sur les 16 entrées analogiques du mega.
Les objets sensor créés ont un nom utilisateur "Bloc X xx" où X est la lettre de la carte et xx le numéro de broche de 0 à 15 (en fait A0 à A15)
Pour chaque bloc on crée 2 autres sensors qui seront utilisés par la logique des secteurs de JMRI pour les réservations de cantons. ("Bloc X AV xx" et Bloc X AR xx")

Les servos (un maximum de 12 car il faut des sorties pwm) ont deux positions possibles on/off qui sont configurables individuellement dans le sketch.
Je compte utiliser les servos pour des dételeurs magnétiques mobiles à aimants permanents neodynium montés sur un bras en impression 3D.

Pour les aiguillages j'ai fait le choix de moteurs lents MTB MP1 donc je n'ai besoin que de relais.

Pour les feux, c'est JMRI qui va s'occuper de convertir les aspects. Chaque signal est défini comme une matrice de leds avec une led par broche.
L'arduino ne fait que recevoir les on/off individuels par led.
Là encore le nom par défaut est intuitif : "Feu X xx" et on peut le changer "C23 vert" par exemple.
Dans tous les cas le nom système reste inchangé et contient toujours la lettre de la carte et le numéro de broche.
« Modifié: mars 26, 2024, 03:41:20 pm par Etienne66 »

nopxor

  • Full Member
  • ***
  • Messages: 195
    • Voir le profil
Re : Projet d'interface polyvalente pour JMRI
« Réponse #3 le: mars 26, 2024, 05:06:23 pm »
Merci pour cette présentation.
Un sacré projet !

As tu un lien vers le projet de Geoff Bunza ?

Etienne66

  • Jr. Member
  • **
  • Messages: 98
    • Voir le profil
Re : Projet d'interface polyvalente pour JMRI
« Réponse #4 le: mars 26, 2024, 05:52:40 pm »
C'est sur locoduino et tu es l'un des auteurs ;)
https://www.locoduino.org/spip.php?article240

nopxor

  • Full Member
  • ***
  • Messages: 195
    • Voir le profil
Re : Projet d'interface polyvalente pour JMRI
« Réponse #5 le: mars 26, 2024, 06:18:18 pm »
Shame on me ! ::) :-X

Etienne66

  • Jr. Member
  • **
  • Messages: 98
    • Voir le profil
Re : Projet d'interface polyvalente pour JMRI
« Réponse #6 le: mars 26, 2024, 06:43:25 pm »
Un mot sur les bus de rétrosignalisation et le DCC

Historiquement le premier est le s88 de Märklin créé en 1979.
Pour ceux qui n'étaient pas nés et ceux qui ont oublié c'était l'époque des premiers ordinateurs personnels
avec des processeurs 8bits (8080, z80, 6800 et 6502) et les interfaces avec l'extérieur se limitaient à
une interface // pour une imprimante et une ou 2 interfaces série.
Märklin a donc imaginé un bus pour multiplexer les sorties de plusieurs modules vers une seule interface série,
la centrale pouvant utiliser l'autre.
Les autres fabriquants on copié le principe et ils y sont restés depuis pour garder la rétrocompatibilité avec leur clients captifs.
Il faut dire que quand un modeliste commence un réseau il en a pour 10 ans, 20 ans ou plus alors il continue longtemps
avec les mêmes circuits.
 
Mais aujourd'hui quand on commence un réseau avec de l'arduino il faut sortir de la préhistoire de l'informatique.
Le DCC par les rails a une bande passante très réduite et on n'y peut rien. Par contre on peut éviter d'y
faire passer tout et n'importe quoi. J'y fait passer les commandes du matériel roulant épicétou. ( au passage
je fais l'économie des décodeurs)

Pour le reste ça fait 25 ans qu'on a le bus USB et la carte mega peut s'y connecter à 115200 bauds "out of the box"
Chaque carte est indépendante sur son propre connecteur USB et son propre numéro de port sans avoir à se
coltiner les signaux des autres cartes. Et c'est windows qui gère les transferts.

Avec JMRI, il y a un script en python qui gère l'USB côté ordinateur et le sketch en c++ côté arduino.
J'ai pris les scripts d'entrée et de sortie de Geoff Bunza que j'ai combinés en un seul script pour gèrer
le transfert série. Ensuite j'organise les données différemment pour que le résultat soit plus facile à
utiliser en ce qui concerne la mise en relation du hardware avec les objets internes de JMRI.

JMRI est idéal pour ce résultat vu qu'il est gratuit et open source. Son seul défault est de ne pas avoir de doc
ni de forum en Français.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3045
  • 100% Arduino et N
    • Voir le profil
Re : Re : Projet d'interface polyvalente pour JMRI
« Réponse #7 le: mars 26, 2024, 06:45:18 pm »
C'est sur locoduino et tu es l'un des auteurs ;)
https://www.locoduino.org/spip.php?article240

En tout cas on est très contents que nos articles rendent service  ;D
Cordialement,
Dominique

Etienne66

  • Jr. Member
  • **
  • Messages: 98
    • Voir le profil
Re : Projet d'interface polyvalente pour JMRI
« Réponse #8 le: mars 26, 2024, 07:19:50 pm »
Tout ce que je sais sur les arduino vient de ce site. Merci pour le partage.
Et j'espère que mes réalisations futures contribueront à aider d'autres membres.

Etienne66

  • Jr. Member
  • **
  • Messages: 98
    • Voir le profil
Re : Projet d'interface polyvalente pour JMRI
« Réponse #9 le: mars 30, 2024, 04:51:11 pm »
Je change mon fusil d'épaule pour les feux.
Le système de départ fonctionne sauf que ça ne gère pas les clignotants ce qui pose problème, surtout
pour les R60 et RR60.
Donc le script python pour JMRI va transmettre les aspects dcc et le mega2560 fera la conversion.

Comme je le pensais les fichiers SNCF2015 de JMRI ne sont pas configurés correctement pour un fonctionnement
automatique des feux de manoeuvre.
J'ai fait les essais avec une modif de la cible D et j'obtiens un fonctionnement correct des feux de
manoeuvre.
Je vais donc clôner le système et modifier les fichiers du clône.

Etienne66

  • Jr. Member
  • **
  • Messages: 98
    • Voir le profil
Re : Projet d'interface polyvalente pour JMRI
« Réponse #10 le: avril 05, 2024, 12:23:50 pm »
Le système SNCF-2015 est vraiment mal configuré, incorrect et incomplet.
Je recrée donc un autre système qui utilisera les icônes de l'original mais des fichiers de configuration totalement différents.
Aspects DCC inchangés
Ajout des cibles C, E (2 versions), G (3 versions)
Suppression des TIV et autres pancartes qui n'ont rien à faire dans ces fichiers.( à part perturber le fonctionnement des BALs)
Fonctionnement prototypique des feux de manoeuvre.
Fonctionnement prototypique des ralentissements et rappels de ralentissement.
La combinaison RR30 et RR60 sur un même mât est possible mais demande un peu de logique (logix) supplémentaire.
(sans cette logique le RR30 prend le dessus)
Fonctionnement prototypique du carré qui reste fermé si la voie n'est pas réservée pour un train
(ça demande un peu de logix et ce n'est possible qu'avec des trains automatiques ou semi-automatiques)

Je ferai des tutos pour l'implantation des signaux et leur configuration dans JMRI.

En ce qui concerne l'interface :
Création automatique des mâts de signalisation dans JMRI (on doit juste mettre la liste des cibles dans le sketch du mega)
Le nom système contient la lettre de la carte et le numéro de broche de la première led pour faciliter les connexions.
J'ai fait un tableau qui donne l'ordre des leds pour chaque type de signal.
La transmission des aspects fonctionne et la carte les convertit en leds allumées/éteintes/clignotantes (il me reste à le faire pour quelques aspects et à faire le clignotement)
La carte gère aussi l'oeuilleton quand il y en a un.