Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Dominique

Pages: [1] 2 3 ... 154
1
Présentez vous ! / Re : Présentation et feu rouge clignotant
« le: janvier 30, 2023, 11:48:18 am »
Faut-il répéter ce qui a déjà été écrit ?
Un projet existant  (il y en a plein sur le site) de passage à niveau complet avec barrières mais sans les barrières correspondra à votre projet. !

Bonne réalisation.

2
3) L’installation est-elle à la portée de quelqu’un qui n’a jamais ouvert une locomotive mais qui a un chouïa d’expérience avec des Arduino et des Teensy?

Aux vues de la vidéo ci- dessus, avez vous la réponse à cette question ?

3
Vos projets / Re : TFID/NFC
« le: janvier 29, 2023, 09:48:07 am »
Bonjour Antoine,

Apparemment il y a plein de systèmes RFID. Ceux là je ne les connais pas. Il faut partir de la norme (EM4100 ) et chercher ce qui existe de plus petit comme étiquette.

Amicalement
Dominique

4
Je ne peux que vous confirmer le fonctionnement avec un UNO.

Je n'ai mis aucune option conditionnelle pour un MEGA , et il est possible que l'affectation des pins ne convienne pas à un MEGA .

Dominique, as-tu testé le mode configurateur sur un MEGA ?

En mode traction oui, mais en mode configuration non !

5
J'ai testé ce montage aussi avec un Mega : OK

6
Le logiciel DCC++ / Re : Problème création controleur DCC++ EX
« le: janvier 27, 2023, 04:21:20 pm »
Bonjour,

Puisque vous avez réussi à monter ce projet et le faire fonctionner, pourriez-vous partager votre réussite en publiant dans ce fil (en plusieurs fois):
- le schéma de votre montage
- quelques photos
- la liste des ingrédients matériels et logiciels
- quelques conseils à ceux qui voudraient le reproduire (pièges à éviter, tests à faire)

Merci d'avance si vous pouvez le faire, ce n'est pas obligatoire, c'est juste sympa pour les autres et c'est malheureusement trop rare de partager ce qui marche  8) 8).

Pour le partage de ce qui ne marche pas, pas de souci, ça ne manque pas et maintenant on renvoie vers le sujet "Aide" quand c'est nécessaire.

Bravo en tout cas

Amicalement
Dominque

7
Les réseaux / Re : Réseau Dominique
« le: janvier 25, 2023, 08:24:03 pm »
Au total, un résumé des messages CAN utilisés dans mon réseau sont dans ce tableau :



On voit que le gestionnaire doit recevoir et traiter environ la moitié des messages qui circulent sur le bus et envoyer les autres 😅.

Ce qui donne un gros switch dans le programme :
//---------------  TRAITEMENT DES MESSAGES CAN  ----------------------//

void parseCANFrame(CAN_FRAME &frame) {
 
  switch (frame.id)  {

  //-------------- POINT D'ARRET EN GARE ---------------------//
  //--            pas de reponse à envoyer                  --//
 
  /*Detecteurs DAPD - data[0] :
    bit 7 = 1 occ ou 0 libre;
    bit 6 = coté Pair =1, ou coté Impair = 0; (il faudrait correspondre à : SENS_PAIR=0,SENS_IMPAIR=1)
    bits 5..0 = numéro de zone
    */
  //-------------------------------------------------// 
  case 0x07:        // detecteur DAPD gare principale sens impair : fin de z27 et z28 SENS IMPAIR avant z29
  case 0x08:        // detecteur DAPD gare principale sens pair: fin de z13 et z14 SENS PAIR avant z15
  case 0x09:        // detecteur DAPD gare cachée sens impair : fin de z22 et z23 SENS IMPAIR avant z24
  case 0x0A:        // detecteur DAPD gare cachée sens pair : fin de z4 et z5 SENS PAIR avant z6
  //-------------------------------------------------//
    //doPointDarret();
   
  break;

  //-------------------------------------------------//
  case 0x10:          // OCCUPATION ou LIBERATION de zone, venant de TCO
                      //  pas de réponse à envoyer
  //-------------------------------------------

  //doOccupationLiberation();
  break;    // sortie du case 0x10
       
   
  //-------------------------------------------------//
  case 0x11:          // demande clé aiguille venant de TCO
  //-------------------------------------------------//

    //doDemandeAiguille();
break;
   
  //-------------------------------------------------//
  case 0x12:          // réponse etat d'une aiguille, venant du controleur d'aiguilles
  //-------------------------------------------------//

    //doReponseAiguille();
    break;
   
  //-------------------------------------------------//
  case 0x13:          // message traction = curseur vitesse et direction d'une manette venant de la Traction
  //-------------------------------------------------//

    //doTraction();
    break;
   
  //-------------------------------------------------//
  case 0x14:          // lumiere d'une manette
  //-------------------------------------------------//

    //doLumiere();
    break;
   
  //-------------------------------------------------//
  case 0x15:          // DCC enabled de la traction
  //-------------------------------------------------//

    //doDCC();
    break;
   
  //-------------------------------------------------//
  case 0x16:         // intensité mA du booster DCC et alarme court-circuit éventuelle
  //-------------------------------------------------//
 
    //doCourant();
    break;
   
  //-------------------------------------------------//
  case 0x18:          // Mesure de vitesse d’un train
  //-------------------------------------------------//

    //doMesureVitesse();
    break;
   
  //-------------------------------------------------//
  case 0x19:          // confirmation d’enregistrement des états d’aiguilles en EEPROM
  //-------------------------------------------------//

    //doEnregistre();
    break;

  //-------------------------------------------------//
  case 0x1A:          // RFID EST gare cachée et gare principale
  case 0x1B:          // RFID OUEST gare principale
  case 0x1C:          // RFID ouest gare cachee - a faire
  //-------------------------------------------------//

    //doRFID();
    break;

  //-------------------------------------------------//
  case 0x1D:          // Evenement secteur (coupure d'alimentation)
  //-------------------------------------------------//

    //doSecteur();
    break;

  //-------------------------------------------------//
  case 0x1F:          // Alarme
  //-------------------------------------------------//

    //doAlarme();
    break;   

   //-------------------------------------------------//
  case 0x20:          // Reponse Aiguille -> TCO
  //-------------------------------------------------//

    //doReponseAiguille();
    break; 

  //-------------------------------------------------//
  default:
  //-------------------------------------------------//
    Serial.println();
    Serial.print(F("??? ID:"));
    Serial.print(frame.id, HEX);
    Serial.print(F(" Len: "));
    Serial.print(frame.length);
    Serial.print(F(" Data: 0x"));
    for (int count = 0; count < frame.length; count++) {
      Serial.print(frame.data.bytes[count], HEX);
      Serial.print(" ");
    }
  break;
       
  } // switch FrameId
} // fin parseCANFrame

Avant de rentrer dans les traitements du gestionnaire qui est presque totalement dédié au traitement des messages reçus, mais aussi à la présentation graphique du réseau et des évènements, il faut présenter de quoi est fait ce gestionnaire (pour le moment car il va évoluer au gré de mon temps disponible et des fonctions nouvelles que je vais ajouter).


8
Les réseaux / Re : Réseau Dominique
« le: janvier 25, 2023, 07:56:44 pm »
Pour compléter la batterie de capteurs nécessaires à la sécurité des trains, j'ai ajouté 4 détecteurs RFID/NFC et 8 points d'arrêt dans les 2 gares (2 pour chaque sens)

Les points d'arrêt sont décrits ici :
https://forum.locoduino.org/index.php?topic=290.msg12026#msg12026

Et les capteurs RFID ici :
https://www.locoduino.org/spip.php?article271

Pour les points d'arrêt, les messages CAN sont :
Point d’arrêt - satellite capteurs de positions et signaux carrés/sémaphore
- détections et libération d’un point d’arrêt : émis par le satellite
Id = 0x07 + N° de satellite = 0x09 et 0x0A (gare cachée) ou 0x07 et 0x08 (gare principale)
Les messages de détection ponctuelles sont envoyés vers le CENTRAL sur 1 octet de donnée avec l’Id :
-> data[0] :
bit 7 = 1 occ ou 0 libre;
bit 6 = sens Pair =1, ou sens Impair = 0;
bits 5..0 = numéro de zone
pas de répétition 500 ms

- Signaux :  reçu par le satellite
- 0x57 + Id sat = 0x57, 0x58, 0x59, 0x5A
data[0] :
bit 7 = signal 0 ou signal 1 et
bits 0..2 = signaux (0= VL =vert, 1 = A=jaune, 2 = S=rouge, >=3 = test = tous allumés)


Pour les capteurs RFID les messages CAN sont :
- RFID Capteurs : emis par le satellite RFID
- RFID OUEST : Id = 0x1A
messages 1 Can émis Id (court) = 0x1A (détecteur EST)
  octet 0 : bit 7 = 1, bit 6 = 0,            -> numéro de train = bits 0 à 5 (0 à 63) zone 25 (intérieur)
  octet 0 : but 7 = 0, bit 6 = 1             -> numéro de train = bits 0 à 5 (0 à 63) zone 16 (extérieur)
        octets 1..7 = nom du train

- RFID EST : Id = 0x1B
  messages 1 Can émis Id (court) = 0x1B (détecteur OUEST)
  octet 0 : bit 7 = 1, bit 6 = 0,            -> numéro de train = bits 0 à 5 (0 à 63) zone 30 (intérieur)
  octet 0 : bit 7 = 0, bit 6 = 1             -> numero de train = bits 0 à 5 (0 à 63) zone 11 (exterieur)
  octets 1..7 = nom du train

- ou message 2
  octet 0 : 0xC0 + index train créé ,  puis octets 1 à 7 = NUID

- ou message 3
  octet 0 : 0xFF              -> inconnu   (erreur, table pleine ou UID hors table)

- commandes RFID capteurs :
- commande 1 vers capteur RFID :  Id (long) = Id 0x1FFFFF60 (hex) + ID court (1A ou 1B) donc 0x1FFFFF7A (EST) ou 0x1FFFFF7B (OUEST)
  data[0] = 0x80 + index table des trains : demande numero train + NUID
  reponse = message 2
  - commande de changement de numéro de train
  data[0] = 0x10 demande de changement de numéro de train
  data[1] = prev numéro de train
  data[2] = nouveau numéro de train
pas de réponse mais sauvegarde eeprom
  - commande d’enregistrement EEPROM (après modifications)
data[0] = 0x20 sauvegarde eeprom
pas de réponse

9
Les réseaux / Re : Réseau Dominique
« le: janvier 25, 2023, 07:18:17 pm »
Naturellement vient ensuite le module de traction, il fallait bien jouer aux trains !

https://forum.locoduino.org/index.php?topic=290.msg4005#msg4005


et les messages CAN qui le concernent :

TRACTION
Adresses Id CAN = Reception (en tant qu'actionneurs, reçoit des ordres) :
* Id = 30H commande d'un train (Index, Vit, Dir, F0): 2 octets
data[0] = bits 0..5 = index loco
data[1] = bits 0..6 = vitesse, bit 7 = direction
* Id = 31H commande de lumière F0
data[0] = bits 7 = lumière
* Id = 32H arrêt d'urgence DCCet reprise
data[0] = 0x8F = arrêt urgence : stop DCC
data[0] = 0x0F = reprise : start DCC
* Id = 33H paramètres de configuration
* Id = 38H commande poste de conduite

Adresses Id CAN = Emission (en tant que capteurs, envoie des messages d'évènements) :
* Id = 13H envoi des paramètres de conduite (Index, Vit, Dir, F0) : 2 octets  (ni)
* Id = 14H envoi de F0 seul
* Id = 15H envoi état DCC on/off (0x80 = on; 0x00 = off)
data[0] = 0x80 ON
data[0] = 0c00 OFF
* Id = 16H envoi Intensité et CC (mA/16) et alarme CC (bit 7)
* Id = 17H consignes de vitesse V&V
* Id = 18H mesure de vitesse d'un train

Il y a là une plus grande richesse de messages CAN :
Au démarrage, après les initialisations de la centrale, celle-ci envoie un message de l'état DCC (Id 0x15), On en principe qui permet au gestionnaire de savoir qu'il est prêt à commander des trains.
A chaque changement manuel de la position d'un potentiomètre, la centrale envoie un message de conduite (Id 0x13) qui permet au gestionnaire de savoir quels trains sont en mouvement avec leurs paramètres de conduite (vitesse, direction, feux).
Il y a d'autres informations utiles qui sont envoyées comme la mesure de vitesse d'un train au passage dans les 2 zones prévues à cette effet et l'intensité de traction DCC fournie par le module de traction aux rails.

En échange, le module de traction doit obéir aux ordres tels que la commande d'un train (0x30 et 0x31), l'arrêt d'urgence (stop DCC) et la reprise (0x32), et des commandes de configuration (0x33) et de poste de conduite (0x38) pas encore utilisé  actuellement.

Il y a encore de la place pour ajouter d'autres commandes !


10
Les réseaux / Re : Réseau Dominique
« le: janvier 25, 2023, 06:37:30 pm »
Le deuxième module réalisé après le TCO est le module de commande des aiguilles décrit ici :
https://forum.locoduino.org/index.php?topic=290.msg3412#msg3412



Il reçoit des ordres venant du TCO en commande manuelle (en fait la commande manuelle reste toujours possible quoi qu'il arrive ☺️) et aussi du gestionnaire quand il forme des itinéraires.
Après avoir reçu une commande il répond que le boulot est bien fait.

AIGUILLES (en tant que capteurs) : emis par module Aiguilles
- état aiguille après commande pour positionner la Led verte du TCO
- Id = 0x12
- confirmation d’enregistrement des états courant d’aiguille en EEPROM
- Id = 0x19
- AIGUILLES (en tant qu'actionneurs) : reçu par periphérique Aiguilles
- commandes d’aiguilles a0 à a18 (19 aiguilles)
- Id = 0x40
->  bit 7,6 -> 1,0 = devie ou 1,1 = droit, bits 5..0 = numero aiguille 0.. MaxAIG (20)
- réponse Id = 0x20 vers central ET TCO
*     COMMANDE RId = 40H          REPONSE TId = 12H et 20H               
 * 0xC0 à 0xD2 position DROIT     0x40 à 0x52
 * 0x80 à 0x92 position DEVIE      0x00 à 0x12
 * 0xD3 = deteleur T1              pas de reponse
 * 0x93 = deteleur T2              pas de reponse
- Id = 0x43
La demande d'etats de toutes les aiguilles par le central (MaxAIG reponses) RId =0x43
 * ->  bit 7,6 -> 1,1 , bits 5..0 = 1,1,1,1,1,1 (numero d'aiguille = 63 / 0x3F) = 0xFF
 * 0xFF = demande d'etat de toutes les aiguilles
- Id = 0x42
 * La  demande de sauvegarde des etats des aiguilles dans l'EEPROM avant extinction du reseau RId = 0x42
 * ->  bit 7,6 -> 1,0 , bits 5..0 = 1,1,1,1,1,1 (numero d'aiguille = 63 / 0x3F) = 0xBF
 * 0xBF = demande de sauvegarde EEPROM de l'etat de toutes les aiguilles
- Id = 0x19
 * La confirmation de mémorisation EEPROM vers le central TiD = 0x19
 * ->  bit 7,6 -> 0,0 , bits 5..0 = 1,1,1,1,1,1 (numero d'aiguille = 63 / 0x3F) = 0x3F
 * 0x3F = confirmation de sauvegarde EEPROM

Il peut donc revevoir des commandes venant du TCO mais aussi du gestionnaire.
Ce dernier en fait reçoit les commandes d'aiguilles du TCO et les retransmet au module de commande d'aiguilles selon le principe suivant :




Le TCO envoie une demande de commande d'aiguille avec l'ID 0x11. Si le gestionnaire accepte il transmet cette commande avec l'ID 0x40.

Quand le gestionnaire n'était pas là, le programme du module d'aiguille acceptait les commandes avec l'ID 0x11 pour un fonctionnement totalement manuel.

11
Les réseaux / Re : Réseau Dominique
« le: janvier 25, 2023, 06:30:38 pm »
Le premier module que j'ai réalisé après la découpe des plans de voies et la pose des rails avec les coupures des zones et la pose des détecteurs d'occupation est le TCO "manuel" décrit ici :
https://forum.locoduino.org/index.php?topic=290.msg3405#msg3405

Les messages CAN du TCO sont :
TCO capteurs :
- occupations et libérations des zones z0 à z39 (40 zones) : emis par le TCO
- Id = 0x10
 Les états d'occupation des zones sont émises vers le CENTRAL sur 1 octet avec l'Id = 10H :
 * ->  bit 7,6 -> 0,0 = libre ou 0,1 = occupe, bits 5..0 = numéro de zone 0.. MaxZONES (42)

- demande de commutation d’aiguilles par clé manuelle : emis par le TCO
- Id = 0x11

TCO actionneurs :
- affichage de la Led verte correspondant à la position d’aiguille réelle (indépendant de la clé)
- Id = 0x20
- Id = 0x21 (demande d'état de toutes les clefs)
* La demande d’états de toutes les clés par le central (MaxAIG réponses) Id=21H, Data=0xFF

Principe des commandes d’aiguilles
 TCO clefs -> Id=11H -> Central -> Id=40H -> Aiguilles cmde
 Aiguilles etat -> Id=12H -> Central -> Id=20H -> TCO
* ->  bit 7,6 -> 1,0 = dévié ou 1,1 = droit, bits 5..0 = numéro aiguille 0.. MaxAIG (20)
 * Les réponses d’états des aiguilles vers le central et le TCO Id = 20H:
 * ->  bit 7,6 -> 0,0 = dévié ou 0,1 = droit, bits 5..0 = numéro aiguille 0.. MaxAIG (20)


On comprend donc que :
- tous les détecteurs d'occupation par consommation de courant sont connectés au TCO (ce n'est pas ce qui réduit la masse de câbles sous le réseau). Chaque état détecteur est visualisé sur le TCO par une led rouge (allumée = occupé) installée dans le dessin du réseau.
- chaque aiguille est agrémentée d'une clé inverseur et 2 leds vertes qui représentent la position droite ou déviée de l'aiguille.
A ce stade da la réalisation, il fallait que je puisse commander les éléments du réseau manuellement.


... à suivre.. ;)

12
Les réseaux / Re : Re : Réseau Dominique
« le: janvier 25, 2023, 06:02:16 pm »
Merci les Amis !
J’ai encore plein de choses à faire donc il y aura des suites  :P

Que le temps passe vite  ::)
Dans ce sujet, il n'est question que de mon réseau.
Merci de ne pas poser de questions relatives à votre propre projet, il est simple de créer votre propre sujet.

Bon, je vais essayer de décrire la partie GESTIONNAIRE du réseau : gros morceau qui se fera par petits bouts.

Mais auparavant il faut se rappeler l'architecture globale du réseau :


L'idée simple que j'ai suivi depuis le début et qui marche toujours est que tous les modules communiquent entre eux sur un bus CAN.

Ainsi, chaque module est développé indépendamment des autres et sa mise à jour éventuelle est aussi indépendante.
A cette époque je ne connaissais pas l'ESP32 et le wifi : je n'ai donc pas hésité. Toutefois le bus CAN est tellement pratique (il y en a dans toutes les voitures et les avions, ce n'est pas par Hazard). Je ne remercierai jamais assez Jean-Luc qui m'a présenté cette technologie.

Pour que tous ces modules échangent entre eux des messages qui signifient des événements sur le réseau, j'ai conçu un protocole personnel, le plus simple possible avec comme intention de ne rien changer pour éviter de modifier tous les modules en cas de changement. Ce qui ne m'empêche pas d'ajouter des nouveaux modules avec de nouveaux messages.

Je vais donc présenter les messages CAN qui concernent chaque module, ce qui permettra de comprendre facilement comment ça marche.

Petit rappel sur les messages CAN :
On relira si nécessaire l'article de base : Mise en oeuvre du Bus CAN entre modules Arduino (1)
https://www.locoduino.org/spip.php?article130

Chaque message est contient un identifiant Id et jusqu'à 8 octets de données

L'identifiant Id est unique. Il définit qui l'envoie (un seul émetteur car pas de doublons qui se promènent sur le réseau) et ce qu'il contient (ce qui est décrit dans le protocole CAN exposé par la suite.
Les octets suivants contiennent les détails du message. Parfois je n'en utilise qu'un seul, parfois plus. C'est aussi décrit dans le protocole.


13
Vos projets / Re : Re : Micro centrale DCC
« le: janvier 25, 2023, 05:38:46 pm »
Avec ce paramétrage, le lissage n'est plus réalisé. Le circuit de mesure du courant à base d'ampli opérationnel permet donc de ne plus avoir à réaliser de lissage et ainsi optimiser le temps nécessaire à la détection d'un court-circuit.
Qu'en pensez-vous ?

NitraThor.

Je suis d'accord que le lissage de la mesure de courant pour la détection de court-circuit n'est pas nécessaire.
D'ailleurs dans ma centrale, je n'utilise pas le lissage de DCC++/pp et j'ai une détection de cc et une mesure de courant indépendante dans la loop de mon programme. J'utilise encore des Max471 qui marchent.
Cela me permet d'afficher le courant mesuré sur un LCD, avec tout un tas d'autres informations

Pour la mesure de courant nécessaire en mode programmation des CVs, il faut cette fois-ci passer par la mesure de courant de DCC++.
Dans mon cas j'utilise une centrale DCC spécifique pour cet usage, reliée à une vie de garage d'ou une locomotive détectée peut partir sur le reste du réseau. Vu le prix d'une centrale en DIY, autant ne pas se priver.

D'ailleurs je commence à en avoir une belle collection dans les cartons...:o

14
Vos projets / Re : Micro centrale DCC
« le: janvier 25, 2023, 02:33:22 pm »
Aucune idée pour le moment (je suis dans les plâtres et la peinture)

Tu dois pouvoir calculer les temps de transmission de l'I2C et des appels de librairie par rapport aux 10 boucles de lissage du programme DCC++ et la lecture d'une entrée analogique.

15
Vos projets / Re : Micro centrale DCC
« le: janvier 25, 2023, 10:01:26 am »
En ce qui concerne le choix du coup de poing d’urgence qui met à VCC (5V, donc en simulant un court-circuit ) les entrées A0 et A1, donc la sortie de l’ampli op, cela induit un temps de réponse non négligeable du fait du lissage de la mesure de courant.

Pourquoi n’avoir pas branché ce coup de poing sur une autre pin du Nano?

Si c’est pour utiliser DCC++ sans modification, utiliser DCCpp résoud ce problème et apporte bien d’autres améliorations.

Pages: [1] 2 3 ... 154