TCO Xpressnet

Toutes les discussions sur l'Arduino !

Modérateur : MOD

Avatar du membre
BB9004
Loquace
Messages : 1012
Enregistré le : jeu. 09 août 2012, 15:58
Echelle pratiquée : HO
Prénom : Lionel
Localisation : Planète Bleue, à l'est de la ville Lumière : 94
Âge : 63

Re: TCO Xpressnet

Message par BB9004 » mer. 04 avr. 2018, 05:36

Bonjour

Merci Sam pour le partage, et pour tous les détails et photos visibles sur le blog :applause:
J'envisage la construction d'un TCO DCC et cette solution est séduisante... :wink:

Merci également aux autres contributeurs

8)
A toute vapeur...en + du reste

VNS-87
Causant
Messages : 216
Enregistré le : dim. 30 mars 2014, 20:05
Echelle pratiquée : HO
Club : Lille modelisme
Localisation : Lille

Re: TCO Xpressnet

Message par VNS-87 » lun. 02 juil. 2018, 17:43

Plume a écrit :Bonjour,

Attention, il peut y avoir un décalage d'une unité entre l'adresse saisie et celle traduite par la centrale.

Pour le vérifier, on peut utiliser un analyseur de trames DCC. On trouve sur le site http://modelisme58.free.fr/index.php/arduino.html un programme Arduino.
salut
Je reviens sur mon soucis car je ne suis toujours pas parvenue à trouver la solution à mon problème entre temps j'ai changé de central sur mon projet j'ai mis une central Digikeijs

alors pour faire simple si je réalise le mouvement de l'aiguillage depuis la Multimaus c'est ok depuis l'pad iPhone c'est bon mais pas depuis le XTCO rien peut être j'ai un problème dans mon code

un soucis d'adresse express net peut être
Arduino.[/quote]
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, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // Adresse DCC des aiguillages
int Bt[] = {43, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41}; // Bornes de la carte ARDUINO

int NbreBoutons = 0; // Nbre total de boutons
int NbrePoussoirs = 0; // Nbre d'aiguillages commandés par Bouton Poussoir
int NbreLevier = 10; // 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 = 2;
BtEtatAncien = 1;
pinMode(Bt, INPUT_PULLUP);
}
pinMode(Led, OUTPUT);

delay(100);

Serial.begin(9600);
Serial.println("UAICF Nevers-Vauzelles - http://modelisme58.free.fr"&#41;;
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 = digitalRead(Bt);
Serial.print(" Borne Arduino : "); Serial.print(Bt); Serial.print(" | Etat = "); Serial.println(BtEtat);
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 != BtEtatAncien)
{
Serial.print(" Aiguillage ayant l'adresse DCC "); Serial.print(Aig);
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;

}

VNS-87
Causant
Messages : 216
Enregistré le : dim. 30 mars 2014, 20:05
Echelle pratiquée : HO
Club : Lille modelisme
Localisation : Lille

Re: TCO Xpressnet

Message par VNS-87 » sam. 22 sept. 2018, 13:28

Plume aurais tu une idée du problème ?

le montage Arduino change bien la position de l'aiguille sur la multimouse mais pas les servos
Hors les servos change bien de position avec la multimouse

Avatar du membre
Gibi
Volubile
Messages : 2147
Enregistré le : ven. 27 janv. 2017, 02:44
Echelle pratiquée : HO
Prénom : Bernard
Site Internet : http://gibitrains.pagesperso-orange.fr/
Âge : 67

Re: TCO Xpressnet

Message par Gibi » sam. 22 sept. 2018, 16:30

sam95 a écrit :Bonjour,

Voila j'ai réalisé un TCO à base d'arduino, il se branche sur la borne slave de la roco multimaus.
Je découvre bien tard ce sujet intéressant qui m'a "interpellé", car j'ai moi-même réalisé un "TCO" avec la carte "XCBUS TCO" de Paco Cañada. J'ai une centrale Lenz et une commande LH90.
Image
Voici le "TCO" :
Image
Mes aiguillages sont commandés par des micro servos, eux-mêmes pilotés par des décodeurs ESU Switchpilot Servo.
Image
Il y a un "relais programmable" (micro-automate) Telemecanique (à droite sur la première image) pour gérer les itinéraires. Ma solution est un peu limitée et fait "old style" par rapport à la tienne, mais ça fonctionne assez bien.

Dans ta vidéo de présentation, tu dis à un moment : "On entend le servo grogner parce que je n'ai pas réussi à l'antiparasiter convenablement".

Or j'ai le même problème : mes servos ne grognent pas vraiment, mais "chantent" plutôt en fin de course (note musicale). Je n'ai jamais trouvé pourquoi, mais je ne pensais pas à un parasitage. J'ai résolu (enfin, si l'on veut) ce problème en coupant momentanément l'alimentation (15 V CA, indépendante du bus DCC) des décodeurs avec un bouton poussoir de type fermé au repos. Une impulsion suffit. Mais ce n'est évidemment pas très satisfaisant.

Penses-tu qu'il y ait un inconvénient à laisser les servos "chanter" ? Et à quoi penserais-tu pour les antiparasiter ?
Fichiers joints
vue_xbus[1].jpg
vue_xbus[1].jpg (49.75 Kio) Vu 1618 fois
servo_aiguille_g[1].jpg
servo_aiguille_g[1].jpg (17.79 Kio) Vu 1618 fois
Platine de commande-04.jpg
Platine de commande-04.jpg (47.42 Kio) Vu 1618 fois

SUPERN
Messages : 1
Enregistré le : mar. 24 mars 2015, 12:29
Echelle pratiquée : N
Prénom : Yves

Re: TCO Xpressnet

Message par SUPERN » ven. 17 mai 2019, 19:48

Bonsoir à tous
J'ai réalisé çe montage pour contrôler une centrale LENZ
Je tiens tout d'abord à remercier Plume pour m'avoir permis de le faire très vite!!!!
J'ai fait rouler ma locomotive et allumer ou éteindre les feux.....en quelques minutes!
Par contre j'ai eu le même souci que VNS 87 : une commande aiguille est bien reçue par la centrale, elle le confirme par aiguille = 0 ou 1 mais l'aiguille ne bouge pas alors que je peux la bouger avec la manette ( ici LH100).
Après 10 heures de recherche internet j'ai trouvé la solution, il faut dire aiguille = 8 ou 9 au lieu de 0 ou 1... et tout tombe en marche!!!!
En espérant que cela aidera d'autres bricoleurs...
Donc essayer des variantes selon vos centrales avant de désespérer
Bien cordialement

VNS-87
Causant
Messages : 216
Enregistré le : dim. 30 mars 2014, 20:05
Echelle pratiquée : HO
Club : Lille modelisme
Localisation : Lille

Re: TCO Xpressnet

Message par VNS-87 » ven. 31 mai 2019, 20:52

Supern peux tu publier ton code ici ?

merci d'avance

Plume
Bavard
Messages : 58
Enregistré le : jeu. 02 juil. 2015, 22:18
Echelle pratiquée : HO
Club : UAICF Nevers Vauzelles
Site Internet : http://modelisme58.free.fr
Localisation : Nevers

Re: TCO Xpressnet

Message par Plume » ven. 07 juin 2019, 22:13

Bonjour,

Voici un exemple de code : http://modelisme58.free.fr/index.php/te ... s.html#tco

Répondre