Auteur Sujet: TCO arduino Xpressnet  (Lu 43163 fois)

sam95

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
    • Blog de Sam95
TCO arduino Xpressnet
« le: janvier 03, 2017, 01:18:49 am »
Bonjour,

Voila j'ai chez moi un réseau tout simple constitué de module T-Trak et de 2 boucles de retournement pour former un "os de chien". Ce réseau est piloté par une Roco multimaus. Il y a 13 aiguillages qui sont actionnés par des servos et 2 arduino pour les "décodeur accessoire universel" de Thierry. Merci à lui pour l'aide d'ailleurs.

La mulltimaus n'est pas ce qu'il y a de plus pratique pour piloter les aiguilles, j'ai donc dessiné un petit TCO sous JMRI et avec un module GenLi et un mini pc (eeepc901)je peux piloter mes aiguillages via le PC ou via un tablette. Sympa pour la maison, mais les modules T-Trak sont aussi fait pour aller en expo.

Dans le but d'une expo en mars je voudrais donc réaliser un TCO tout simple avec des boutons poussoir qui se relie comme une souris Xpressnet à la centrale. Afin que n'importe qui puisse l'utiliser facilement.

J'ai trouvé un tuto tout prêt pour réaliser ce montage (étant donné mes connaissances proche de 0 en programmation):
http://modelisme58.free.fr/index.php/arduino.html
rubrique: Réaliser un TCO en digital DCC avec une carte ARDUINO

Il faut faire une petite carte avec le max485 pour la liaison avec la centrale. Ce n'est pas du tout insurmontable, mais en cherchant ou m'approvisionner en composant j'ai découvert des modules tout prêt sur ebay pour un prix défiant toute concurrence.
http://www.ebay.fr/itm/1011-MAX485-Module-RS-485-TTL-to-RS485-MAX485CSA-Converter-Module-For-arduino-/291949863536?var=&hash=item8996c98a44
https://arduino-info.wikispaces.com/SoftwareSerialRS485Example

Du coup je me demande si ce module est utilisable tel quel dans le projet de l'UAICF ?

Merci de votre aide
 
« Modifié: janvier 03, 2017, 01:21:21 am par sam95 »

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : TCO arduino Xpressnet
« Réponse #1 le: janvier 03, 2017, 07:32:06 pm »
Qu'il est agréable de voir quelqu'un qui a fait des recherches avant de poser des questions !  :D
Et ce, d'autant plus pour quelqu'un qui dit ne pas savoir programmer !

Le TCO en digital de modelisme58 est basé sur un développement de notre camarade Locoduiniste Nicolas Zin qui a construit une bibliothèque XPressNet pour commander les aiguilles d'un TCO. C'était fin 2014.
Bibliothèque qui a vu pas mal de sites s'en servir et c'est fait pour ça.
Si tu veux voir son article, c'est là : http://www.locoduino.org/spip.php?article42.
Le prochain coup, quitte à chercher, va sur Locoduino... ;)

Quant au module RS485-TTL qu'il a bricolé lui-même (à l'époque), il existe effectivement tout fait sur eBay (attention 3 semaines à 1 mois d'appro !!).
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

sam95

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
    • Blog de Sam95
Re : TCO arduino Xpressnet
« Réponse #2 le: janvier 04, 2017, 04:20:50 pm »
J'avais vue l'article de Nicolas sur locoduino, mais je trouve en tant que noob, les explications du site modelisme58 plus simple et plug&play.

Bon je vais me lancer avec un module tout prêt du coup


sam95

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
    • Blog de Sam95
Re : TCO arduino Xpressnet
« Réponse #3 le: janvier 12, 2017, 03:31:58 pm »
J'ai enfin rassemblé le matériel.
Premier test aujourd'hui non concluant. Le pregramme sur l'arduino ne communique pas avec la centrale. Il va falloir que je cherche pourquoi.



sam95

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
    • Blog de Sam95
Re : TCO arduino Xpressnet
« Réponse #4 le: janvier 12, 2017, 05:03:24 pm »
J'ai vérifié et revérifié mon cablage, il me semble bon

Sur le module à base de max485:
RO->RX1 arduino
DI->TX1 arduino
DE et RE essemble -> pin 3 arduino selon le sketch

de l'autre coté du module max485
fil de ground du RJ11, sur GND et relié au GND de l'arduino
Fil A et B du RJ11 sur le bornier A et B, dans un sens ou dans l'autre avec ou sans résistance de 120ohm
borne VCC reliée à une sortie 5v de l'arduino

Le fil amenant du 12v depuis la centrale est resté non connecté.

Une idée ?

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : TCO arduino Xpressnet
« Réponse #5 le: janvier 12, 2017, 07:05:29 pm »
Bonsoir,

1°) Nicolas branchait pin7 de l'Arduino MEGA, c'est à dire celle marquée PWM 3 en blanc sur fond bleu du MEGA
2°) La résistance de 120 Ω est obligatoire.

Tu alimentes ton Arduino comment ?

Denis


« Modifié: janvier 12, 2017, 08:59:00 pm par DDEFF »
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

sam95

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
    • Blog de Sam95
Re : TCO arduino Xpressnet
« Réponse #6 le: janvier 12, 2017, 07:45:43 pm »
actuellement il est alimenté par le port USB du PC pour avoir l'affichage de la console

est il possible de mesurer ce qui sort du max485 avec un multimetre?ou faut il un oscillo ?
« Modifié: janvier 12, 2017, 08:31:55 pm par sam95 »

sam95

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
    • Blog de Sam95
Re : TCO arduino Xpressnet
« Réponse #7 le: janvier 16, 2017, 11:19:55 am »
Bonjour,

Pour le moment je n'ai cablé aucun switch sur mon arduino, j'ai juste branché la liaison avec la centrale et selon la doc je devrais avoir dans la console série un affichage de l'état de centrale = 0. Hors moi j'ai 255, qui veut dire qu'il n'y a pas de communication avec la centrale.

J'ai regardé le code et j'ai l'impression qu'il se sert de l'alimentation via la centrale et le cable RJ11 pour contrôler l'état de la communication, hors pour le moment je n'ai pas branché cette alim sur l'arduino. Pensez-vous que ça puisse être cela ?

**************************************************//
                //                                                  //
                //         Programme pour réaliser le TCO           //
                //                du pupitre DEMO                   //
                //          avec carte Arduino MEGA 2560            //
                //                                                  //
                //         TCO pour module Demo Aiguillage          //
                //                                                  //
                //             UAICF Nevers-Vauzelles               //
                //          http://modelisme58.free.fr              //
                //                                                  //
                //            Novembre 2015 - Vers 1.3              //
                //                                                  //
                //**************************************************//

//-------------------------------------------------------------------------
// Bibliothèques nécessaires

//----------------------------------------------------------------------------
#include <XpressNet.h>
XpressNetClass XpressNet;

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  #define SerialDEBUG 1  //For Serial Port Debugging (Arduino Mega only)
#endif

#if SerialDEBUG
  #include <SoftwareSerial.h>
  SoftwareSerial Debug(0, 1); // RX, TX - Mettre sur 0 et 1 pour MEGA 2560
#endif

//-------------------------------------------------------------------------
// /|\ Variables à modifier ----------------------------------------------- /|\
// Définition des adresses des aiguillages et entrées utilisés sur la carte Arduino MEGA

int Aig[]          = { 0,14,14,13,13,28,28,29,27,12,11};  // Adresse DCC des aiguillages
int Bt[]           = {23,25,27,29,31,33,35,37,39,41,43};  // Bornes de la carte ARDUINO

int NbreBoutons = 0;        // Nbre total de boutons
int NbrePoussoirs = 3;         // Nbre d'aiguillages commandés par Bouton Poussoir
int NbreLevier = 4;            // Nbre d'aiguillages commandés par Bouton Levier

#define XNetAddress 15        // Adresse de la souris XpressNet : 2 souris Xpressnet ne pourront pas avoir la même adresse
                              // Valeur entre 1 et 31

// /|\ Fin des variables à modifier --------------------------------------- /|\
//-------------------------------------------------------------------------

//-------------------------------------------------------------------------
// Définition des variables et constantes

int BtEtat[100] ; 
int BtEtatAncien[100] ;

byte Led = 13;
int DCCEtat;
long previousMillis = 0;

#define XNetSRPin 3       // Max485 Bus du driver relié à la borne de l'Arduino

//-------------------------------------------------------------------------
// Initialisation du programme
void setup() {               

  delay(1000);

  NbreBoutons = NbrePoussoirs + NbrePoussoirs + NbreLevier + 1;
 
for (int i=0; i < NbreBoutons; i++)
{
  BtEtat[i] = 2;
  BtEtatAncien[i] = 1;
  pinMode(Bt[i], INPUT_PULLUP);
}
  pinMode(Led, OUTPUT);
 
  delay(100);
 
  Serial.begin(9600);
  Serial.println("UAICF Nevers-Vauzelles - http://modelisme58.free.fr");
  Serial.println("Octobre 2015 - Vers 1.2");

  XpressNet.start(XNetAddress, XNetSRPin);
  XpressNet.setPower(csNormal);

  Serial.print("  --> Etat Centrale DCC = ");
  Serial.println(XpressNet.getPower());
  Serial.println("");
 
  for (int i=0; i < NbreBoutons; i++)
    {
    BtEtat[i] = digitalRead(Bt[i]);
    Serial.print(" Borne Arduino : "); Serial.print(Bt[i]); Serial.print(" | Etat = "); Serial.println(BtEtat[i]);
    delay (10);
    }

  XpressNet.receive();
 
  Serial.println("--- Initialisation des positions des Aiguillages avec bouton a levier uniquement ---");
  // Uniquement pour les aiguillages commandés par un bouton à levier 
  for (int i = NbrePoussoirs*2 +1; i < NbrePoussoirs*2 + NbreLevier +1; i++)
    {
    if (BtEtat[i] != BtEtatAncien[i])
      {
        Serial.print("   Aiguillage ayant l'adresse DCC "); Serial.print(Aig[i]);
        Serial.print(" (Borne "); Serial.print(Bt[i]);
        BtEtatAncien[i] = BtEtat[i] ;
        XpressNet.setTrntPos (0x0, Aig[i]-1, BtEtat[i] );
        delay (200);
        XpressNet.setTrntPos (0x0, Aig[i]-1, BtEtat[i] );
        delay (750);
      }
    }
  Serial.println("--- Fin Initialisation des positions des Aiguillages ---");
  Serial.println("--- Fin initialisation du programme ---");   Serial.println(" ");
  digitalWrite(Led, HIGH);

}

//-------------------------------------------------------------------------
// Programme fonctionnant en boucle

void loop() {

  // Récupére l'état des entrées 
  for (int i=0; i < NbreBoutons; i++)
    {
    BtEtat[i] = digitalRead(Bt[i]);
    delay (1);
    }

  XpressNet.receive();

  unsigned long currentMillis = millis();

  // --- Commande pour Arret d'Urgence --------------------------------------------

  if (BtEtat[0] == 0 && DCCEtat == 0)
      {
      XpressNet.setHalt();
      delay (500);
      if (DCCEtat == 0)
          {
          digitalWrite(Led, LOW);
          Serial.println(" ");
          Serial.println(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ");
          Serial.println(" !!! --- Arret d'Urgence --- !!! ");
          delay (1000);
          previousMillis = currentMillis;
          }
      }

  if (BtEtat[0] == 0 && DCCEtat > 0 && (currentMillis - previousMillis > 5000) )
      {
      XpressNet.setPower(csNormal);
      delay (500);
      if (DCCEtat > 0)
        {
        digitalWrite(Led, HIGH);
        Serial.println(" ");
        Serial.println(" --- DCC Ok --- ");
        previousMillis = currentMillis;
        }
      }

  // Envoie de la commande DCC pour accessoires si changement de l'état des entrées 

if (DCCEtat ==0)  // Si pas d'arrêt d'urgence d'enclenché
{
  // --- Commande pour Boutons à levier --------------------------------------------
  for (int i = NbrePoussoirs*2 +1; i < NbrePoussoirs*2 + NbreLevier +1; i++)
    {
    if (BtEtat[i] != BtEtatAncien[i])
      {
        Serial.print("Aiguillage ayant l'adresse DCC "); Serial.print(Aig[i]);
        Serial.print(" (Arduino "); Serial.print(Bt[i]);
        BtEtatAncien[i] = BtEtat[i] ;
        XpressNet.setTrntPos (0x0, Aig[i]-1, BtEtat[i] );
        delay (10);
      }
    }
   

  // --- Commande pour Boutons Poussoirs --------------------------------------------
  // Commande Position 1
  for (int i=1; i < NbrePoussoirs*2 +1; i=i+2)
    {
    if (BtEtat[i] != BtEtatAncien[i] && BtEtat[i] == 0 && BtEtat[i+1] == 1)
      {
        Serial.print("Aiguillage ayant l'adresse DCC "); Serial.print(Aig[i]);
        Serial.print(" (Arduino "); Serial.print(Bt[i]);
        BtEtatAncien[i] = 0;
        BtEtatAncien[i+1] = 1;
        XpressNet.setTrntPos (0x0, Aig[i]-1, 0 );
        delay (1);
      }
    }
   
  // Commande Position 2
  for (int i=2; i < NbrePoussoirs*2 +2; i=i+2)
    {
    if (BtEtat[i] != BtEtatAncien[i] && BtEtat[i] == 0 && BtEtat[i-1] == 1)
      {
        Serial.print("Aiguillage ayant l'adresse DCC "); Serial.print(Aig[i]);
        Serial.print(" (Arduino "); Serial.print(Bt[i]);
        BtEtatAncien[i] = 0;
        BtEtatAncien[i-1] = 1;
        XpressNet.setTrntPos (0x0, Aig[i]-1, 1 );
        delay (10);
      }
    }
}
  // Fin de l'envoi de la commande DCC pour accessoires si changement de l'état des entrées 

}
//-------------------------------------------------------------------------
// Message pour débogage

void notifyTrnt(uint8_t Adr_High, uint8_t Adr_Low, uint8_t Pos)
{
  Serial.print(") ---> Position = ");
  Serial.println(Pos, DEC);
}

//-------------------------------------------------------------------------
void notifyXNetPower (uint8_t State)
{
  Serial.print("  --> Etat Centrale DCC = ");
  Serial.println(State, HEX);
  DCCEtat = State;
 
}


Je ne peux pas tester avant demain soir c'est pour cela que je demande.
De plus puis-je brancher de VCCin de 12v et en même temps la prise USB sur l'arduino mega ?

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : TCO arduino Xpressnet
« Réponse #8 le: janvier 16, 2017, 11:46:49 am »
Citer
De plus puis-je brancher de VCCin de 12v et en même temps la prise USB sur l'arduino mega ?

Je pense que c'est une mauvaise idée d'avoir deux alimentations !
Voir aussi :
http://www.locoduino.org/spip.php?article16

C'est une situation assez étrange de demander à Locoduino de déplomber un programme de l'UAICF de Vauzelles  ???


"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

sam95

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
    • Blog de Sam95
Re : TCO arduino Xpressnet
« Réponse #9 le: janvier 17, 2017, 02:07:07 pm »
OK je ne pensais pas à mal, pour moi les projets arduino étant libre je ne voyais pas de problèmes d'en parler ici ou là. Surtout que l'UAICF n'a pas de forum.

Si cela pose problème un modo peut supprimer le sujet .

patrick

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Re : Re : TCO arduino Xpressnet
« Réponse #10 le: janvier 17, 2017, 04:10:51 pm »
pour moi les projets arduino étant libre

Salut,

Le design de l'Arduino est "Open Hardware", signifiant que l'on peut le reprendre, le modifier, l'utiliser, etc... Par contre, le contenu n'est pas soumis aux mêmes règles. La communauté autour d'Arduino a tendance à donner librement le code, mais ce n'est pas pour autant "Open Source". C'est une idée reçue qui a la vie dure. Si tu développes un programme et tu veux le vendre, libre à toi. De même si tu trouves du code et que tu veux le réutiliser dans un produit commercial, ce n'est pas garanti que tu en as le droit. Tout dépend de chaque développeur.

Patrick
« Modifié: janvier 17, 2017, 04:22:30 pm par patrick »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3045
  • 100% Arduino et N
    • Voir le profil
Re : TCO arduino Xpressnet
« Réponse #11 le: janvier 17, 2017, 06:27:32 pm »
Pourquoi ne contactez-vous pas l'UAICF ?
Pour les questions techniques et juridiques.

J'aimerai bien que Locoduino soit plus un lieu de partage de solutions réalisées en DIY avec Arduino, et qui fonctionnent, pour le plaisir du plus grand nombre, qu'un site de déverminage (ou de simple compréhension) des logiciels non présentés ici par leur auteur .

Vous pourrez revenir ici ensuite pour présenter la solution.
« Modifié: janvier 17, 2017, 06:31:38 pm par Dominique »
Cordialement,
Dominique

sam95

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
    • Blog de Sam95
Re : TCO arduino Xpressnet
« Réponse #12 le: janvier 20, 2017, 12:47:13 pm »
Après revérification du câblage et le câblage d'au moins 1 inter (l’arrêt d'urgence) le montage fonctionne.

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : TCO arduino Xpressnet
« Réponse #13 le: janvier 20, 2017, 01:37:15 pm »
Je suis content de voir que la persévérance paie. C'est souvent comme ça.  ;)
Continue à tester pour voir si tout fonctionne comme prévu.

Nicolas préconisait un branchement de l'interrupteur avec une résistance de rappel vers la masse.
Le programme de l'UAICF utilise une remarque faite suite à l'article par Jerome SAVARY en utilisant les résistances internes du pullup.

Tu as noté aussi que quelques variables sont à initialiser en fonction de ton réseau (nombre de boutons, etc...)

Denis
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

sam95

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
    • Blog de Sam95
Re : TCO arduino Xpressnet
« Réponse #14 le: janvier 29, 2017, 12:44:13 am »
Bonjour,

Cela marche presque.

En effet j'ai donc une multimaus et j'ai 2 aiguilles kato pilotées par des décodeurs digitrax ds51k1. Ces 2 aiguilles sont pilotés par les adresses 1 et 2 sur ma multimaus.

Avec le tco rien ne se passe pour les inter aux adresses 1 et 2.
Je me suis souvenu qu'il existe un problème de décalage d'adresse de 4 entre la norme DCC et roco

Pour mes autres décodeurs à base de l Universal accessory decodeur de Thierry, j'ai codé ce décalage. Par exemple l'aiguille codée 26 dans l arduino de l uad se commande par l'adresse 30 sur la multimaus.

Mais du coup mes ds51k1 ils auraient une adresse decallee aussi ???? De -4 ? Est-ce possible d'avoir 1-4=-3 comme adresse ?