Barn Station, le pont transbordeur ferroviaire de Thierry

Au début de l’année 2021, Thierry m’a contacté pour obtenir des compléments d’informations sur la réalisation de notre pont tournant sur base Arduino qui est installé sur notre dépôt ferroviaire. Pont tournant qu’il voulait installer sur son réseau. Après interrogations et réflexions, son projet a évolué et a finalement donné lieu à la mise en place d’un pont transbordeur. Ne gardant que le principe du programme Arduino, (principe de la motorisation avec un moteur pas-à-pas), Thierry a entrepris la conception et la réalisation intégrale de son pont transbordeur sur le réseau « Barn Station ». Dans cet article il nous présente son projet de « Garage » à locomotives ainsi que toute la documentation technique (à retrouver en bas de l’article) pour s’en inspirer. En espérant que son article fasse naitre de nouveaux projets ferroviaires 😉

Nicolas

Description du réseau

Démarrage du projet de réseau : Février 2017.

Situation : Dans la propriété de Phil à Lamothe Capdeville dans le Tarn et Garonne. À l’étage d’une ancienne grange, une pièce de 12x4m a été entièrement rénovée pour accueillir le futur réseau.

Nom du réseau : Étant installé dans un bâtiment appartenant à Phil, originaire de Grande Bretagne, nous l’avons baptisé « Barn Station », la « Gare de la Grange » en bon français.

Type de tracé : Tour de pièce en « Os de chien » à double voies sur 2 niveaux dans la première moitié de la pièce. La longueur développée est d’environ 180m. Dans la seconde partie, une zone de stationnement des convois sur 10 voies d’une longueur totale d’environ 35m, plus 21 voies de 28 cm pour le futur garage des machines, accessibles par un pont transbordeur.

Alimentation électrique : Sur 2 rails alimentés en DCC par une centrale Roco z21 blanche. La commande des trains et des aiguillages se fait uniquement par une tablette. Pour cela il vous faudra une z21 déverrouillée.

Gestion du réseau : Le circuit principal du réseau est partitionné en 13 cantons et 3 autres dans la zone de garage. La reconnaissance d’occupation est faite par un circuit qui mesure le courant dans la voie du canton avec 2 doubles diodes câblées tête-bêche. Ce type de détection est fiable et se met en œuvre aisément sur le réseau.

Pour accroitre la sécurité de roulage, chaque convoi comprend une voiture ou un wagon muni d’un feu de fin de convoi ; dans le cas où des wagons se détacheraient dans une zone cachée (tunnel ou coulisse) ceux-ci sont considérés comme occupant la voie et le système interdit alors toute circulation en amont de ce canton.

Couplé au circuit de détection d’occupation, chaque machine est programmée avec l’activation du freinage ABC (Automatic Brake Control) de Lenz. Lorsqu’un canton est occupé, le circuit de détection enclenche le freinage ABC sur le canton précédent. Ce procédé permet, sans intervenir sur la commande de vitesse, de ralentir une machine jusqu’à la stopper au pied d’un signal d’arrêt.

Dès que la voie est libre, la machine redémarre suivant sa courbe d’accélération programmée. De plus, si une machine est à l’arrêt sur une voie où le freinage ABC s’active, la commande de vitesse depuis la tablette est masquée et la machine se maintient à l’arrêt. Lorsque le freinage ABC est activé, les feux et les sons de la machine restent opérationnels. Cette carte de détection et de gestion de freinage ABC est une réalisation personnelle.

Époque : Barn Station est un réseau atypique. Il ne correspond à aucune époque ni à aucune région en particulier. Notre seul plaisir est de construire, bâtir, peindre et assembler des décors pour faire circuler des convois de trains… et les voir rouler. Ici, cohabitent avec une Nohab norvégienne, des Obb1020, une CC7100 ou une E646… j’aime les trains, tous les trains, et j’achète un wagon ou une machine principalement pour sa forme, sa silhouette ou sa couleur de livrée !

État d’avancement : Notre réseau est achevé à 60% au bout de cinq ans ! C’est peu, mais je ne peux consacrer qu’une partie de mon week-end au modélisme. Phil étant retraité et sur place, travaille plus régulièrement à Barn Station. Il s’occupe principalement du décor, des peintures et des finitions. Pour ma part, le pont transbordeur quittera mon atelier pour être installé sur le réseau d’ici fin septembre. La dernière étape, mi 2022, sera consacrée à la pose des caténaires… à suivre !!

 
 
 
 

Garage des locomotives

À ce jour nous avons 20 machines, dont une vapeur BR18, une loco de triage E60, une loco BR216 avec son wagon nettoyeur Roco Clean et un autorail Blokkendoos de la NS. La vapeur BR18, la loco de triage E60 et la BR216 sont garées dans leur propre remise à locomotive. La rame Blokkendoos est temporairement stationnée sur une voie de garage ; une voie contiguë à la fosse du pont transbordeur sera prévue pour garer ses 95cm. Les 16 autres machines, rangées sur l’étagère d’une vitrine, sont mises sur les voies à la demande. Une solution de garage de ces machines sur le réseau devient donc indispensable.

Solutions de garage

Ce garage devra satisfaire les caractéristiques suivantes :

  • Dimensions de l’espace disponible sur le réseau : 120 x 80cm
  • Capacité de stationnement suffisant pour 16 à 20 machines
  • Accès à la zone de garage par une seule voie d’entrée-sortie bidirectionnelle

Deux solutions peuvent répondre à cela :

  • Un faisceau de voies de garage réalisé avec des aiguillages
  • Une rotonde avec une plaque tournante

Faisceau de voies

Cette solution a été écartée pour des raisons d’encombrement pour loger la vingtaine d’aiguillages du faisceau mais aussi pour la complexité de leur câblage de commande.

Rotonde autour d’une plaque tournante

Cette solution semble être la mieux adaptée pour remiser une vingtaine de machines dans l’espace disponible sur le réseau. De plus, la rotonde existe depuis longtemps dans le ferroviaire.

Étude préliminaire de la plaque tournante

Ne voulant pas réinventer l’eau chaude, je me documente sur le matériel proposé par les fabricants. En entrée de gamme on trouve du Peco manuel à moins de 100€ jusqu’à du Roco – Fleischmann motorisé à environ 500€, plus une centaine d’euros pour équiper les sortie de voies. Certes, la plaque Roco est apparemment un produit de qualité mais son coût reste élevé. Alors pourquoi ne pas réaliser sa propre plaque tournante ?

Une fois de plus, Internet vient m’aider dans mes recherches. Plusieurs sites, blogs ou forums montrent des réalisations personnelles, dont celles du Seine Modèle Club Ferroviaire.

Cette réalisation correspond exactement à mon projet de plaque tournante. Elle est animée par une carte Arduino Uno et un circuit de puissance pour piloter un moteur pas-à-pas. La rotation et l’indexage de la plaque se font simplement par bouton poussoir et interrupteur. Le programme de la carte Arduino est commenté avec des explications claires et détaillées, ce qui facilite sa compréhension et sa maitrise.

Ma première maquette est rapidement fabriquée. L’article de Nicolas qui accompagne la vidéo de Yannick est très explicite : plans et dessins, instructions de réglage, schéma de la carte de commande, fichiers sources du logiciel… Ce partage de compétence combiné aux messages échangés avec Nicolas m’ont bien aidé pour mettre au point ce premier prototype.

Mise au point de la plaque tournante

Après la mise au point du prototype fait de carton assemblé au pistolet à colle, je commence la fabrication d’une maquette plus réaliste. Aidé par un logiciel en 2D, QCAD, je dessine la fosse, le plateau tournant avec son guidage et le couplage de l’axe moteur sur le plateau.

Le support de la fosse est confectionné à partir d’un fond de pot de peinture recouvert de résine GelCoat utilisée pour le revêtement de piscine. La plaque tournante est taillée dans un morceau de contreplaqué d’épaisseur 16mm. Je m’aperçois que la découpe circulaire doit être précise pour obtenir un jeu constant avec le bord de la fosse. Pas aussi facile à faire que sur QCAD ! Le constat est évident, il me faudrait d’autres outils à disposition pour réaliser ces assemblages circulaires avec précision.

Après plusieurs réalisations de plaque et quelques dizaines d’heures de travail, je décide avec regrets d’abandonner la réalisation de cette plaque tournante par manque de moyen matériel et peut-être aussi de compétences personnelles.

Les problèmes qui ont été des points bloquants :

  • Obtenir un jeu mécanique constant entre le bord de la plaque et celui de la fosse
  • Précision de l’alignement de l’axe du moteur avec celui de la plaque
  • Choix de guidage de la plaque dans fosse : rail circulaire, roulement à bille, tournette à billes…
  • Réalisation d’un collecteur tournant ou contact à frotteur pour alimenter le rail de la plaque
  • En fonctionnement, limiter la rotation de la plaque à 180° pour éviter d’utiliser un dispositif de boucle de retournement

Hormis ces résultats inadéquats, il ressort que la carte Arduino et son logiciel embarqué sont bien adaptés pour gérer la rotation d’un moteur pas-à-pas : Précision angulaire, répétabilité de la rotation, commande intuitive par 2 boutons, réglage aisé du point de référence. Du très bon travail, bravo !

Transformation d’un mouvement circulaire en un déplacement rectiligne.

Tout est dit dans le titre ! Je fais donc un grand « Reset » pour persévérer dans ce projet de garage. Comme pour la plaque tournante, ce sera une réalisation personnelle, fabriquée avec des matériaux du commerce…et ceux de mes fonds de tiroirs !

Principe de fonctionnement

Le pont transbordeur comprend une passerelle mobile mue par un moteur pas-à-pas. Elle se déplace en translation dans une fosse où des voies de garage sont disposées en regard sur les 2 longueurs de la fosse. Un système électronique gère les mouvements de la passerelle entre les voies de garage.

Une voie implantée sur un côté de la fosse permet l’entrée et la sortie des machines sur le pont transbordeur.

Choix de la transmission du mouvement

Par rapport à une transmission par vis et écrou trapézoïdal, précise mais très bruyante, la solution d’une transmission par courroie crantée a été retenue pour son silence de fonctionnement.

Approvisionnement des matériaux

Les matériaux et les accessoires de quincaillerie utilisés se trouvent en grande surface de bricolage. Concernant les produits et les composants spécifiques au système de guidage linéaire, les cartes électroniques et le moteur pas-à-pas, je préconise leur approvisionnement chez des distributeurs français. C’est plus cher que sur les sites asiatiques, mais la qualité des produits est au rendez-vous. Le coût de cette réalisation est d’environ 350€ et plusieurs dizaines d’heures de conception et de travail manuel.

Liste du matériel électrique

  • Carte Arduino Uno, « Made in Italy » pour sa compatibilité d’interface USB
  • Carte shield prototype pour implanter l’ULN2803A et les borniers de câblage
  • Module pilote de moteur pas-à-pas TB6600 4A
  • Moteur pas-à-pas Nema 17 – 40Ncm – 1.7A – 200pas de 1.8° – Référence 17HS4401S
  • Carte simple relais 12v avec entrée opto-couplée pour piloter le freinage ABC
  • Circuit driver de puissance ULN2803A
  • Convertisseur de tension réglable pour alimenter les Leds de la passerelle
  • Convertisseur modulaire 230vAC / 24vDC – 60VA pour alimenter le moteur pas-à-pas
  • Convertisseur modulaire 230vAC / 12vDC – 24VA pour alimenter les éclairages du décor
  • Bloc d’alimentation secteur 9vDC – 10w pour alimenter la carte Arduino
  • Prise modulaire 2 pôles + terre pour brancher le bloc d’alimentation

Les convertisseurs modulaires et la prise sont fixés dans un tableau électrique d’une rangée de 13 modules et protégés par un disjoncteur de 10A.

Caractéristiques du pont transbordeur

  • Dimensions (L x l x p) du châssis : 900 x 700 x 150mm
  • Découpes d’encastrement : 600 x 500mm et 2 découpes latérales de 550 x 100mm pour le câblage
  • Dimensions de la fosse (L x l x p) : 530 x 284 x 30mm
  • Dimension de la passerelle (L x l) : 280 x 75mm
  • Nombre de voies de garage : 21 voies de longueur 260mm et 1 voie d’entrée/sortie
  • Espace entre 2 voies de garage : 25mm
  • Matière du châssis : Panneau composite épaisseur 15mm
  • Matière de la passerelle : Panneau composite épaisseur 15mm
  • Matière du plateau : Contreplaqué épaisseur 16mm
  • Type de déplacement : Linéaire sur profilé aluminium V-Slot 20×40
  • Charriot mobile : Plateau V-Slot Mini V avec 4 galets Delrin dont 2 sur excentrique pour régler le jeu du roulement
  • Entrainement : Moteur pas-à-pas bipolaire
  • Fixation du moteur : Amortisseur de vibration pour moteur Nema 17
  • Transmission : Courroie GT2 6mm, matière caoutchouc renforcé
  • Réglage de la tension de courroie : Poulie libre et vis

Paramétrage du logiciel initial

Le fonctionnement particulier du pont transbordeur nécessite de modifier quelques variables du logiciel initial. Le reste du logiciel est inchangé.

  • Nombre de voies = 11 (Ligne 5)
  • Ajustage de la vitesse de rotation du moteur, donc la vitesse de déplacement de la passerelle
  • fixée ici à 140 (Ligne 8)
  • Modification du nombre de pas moteur entre 2 voies espacées de 25mm (Ligne 16)



// Sketch pour driver TB6600 et NEMA 17 (17HS4401) sur pont Barn Station

#include 

#define nbPosition 11                  // nombre de positions d'arret face aux voies (crans)

#define vitesseRotationManuelle 50   // Vitesse de Rotation en mode manuel/calibrage (~50 = très lent)
#define vitesseMaxCrans 140           // Vitesse de Rotation en mode crans (~200)
#define vitesseAccelerationCrans 20  // Vitesse d'accélération / décélération en mode crans (~25) 

// A plein pas il faut 2048 crans - à demi-pas il faut 4096 crans ... pour faire 180° du pont.
// ValMoteur  = (13 x 2048) / 180 = 148 ou (13 x 4096) / 180 = 296
// Donc à refaire.pour tous les angles
// Pour le TB6600 et NEMA 17: 16 microsteps et 3200 pulse/rev la formule est (Angle x 1600)/180

int tabPosition[nbPosition] = { -2925, -2340, -1755, -1170, -585, 0, 585, 1170, 1755, 2340, 2925};
//                                

int ptrCranZero;                // Position du point 0 dans le tableau
int ptrCranCourant;             // Pointeur de position courante dans le tableau

bool btnClic = false; 

// Assignation des broches moteurs aux broches arduino
#define dirPin  8                          // DIR+ Module TB6600
#define stepPin  9                       // PUL+ Module TB6600
#define motorOffPin  10            // ENA+ Module TB6600


// Define a stepper and the pins it will use
AccelStepper stepper(AccelStepper::DRIVER, 9, 8);


#define baseAdresse 100  // Adresse de base du Arduino-Decodeur


// Assigner les boutons aux Pins
const int BPG = 3;                        // Bouton tourne sens inverse aiguilles d'une montre
const int BPD = 4;                        // Bouton tourne sens aiguilles d'une montre
const int Inter = 5;                       // Interrupteur de mode
const int ledTemoin = 13;          // LED intégrée à la carte de l'arduino

bool rotationEnCours = false;   // true = Rotation en Cours

/* 
 *  Fonction appelée par la librairie DCC et qui permet
 *  d'activer ou de désactiver les sorties accessoires
 *  Dans notre cas pour mettre en rotation le pont
 *  Attention, une ligne doit être décommentée si vous utilisez une Z21 qui a un décalage d'adressage)
 */
void BasicAccDecoderPacket_Handler(int address, boolean activate, byte data) {
  address -= 1;
  address *= 4;
  address += 1;
  address += (data & 0x06) >> 1;
  // address = address - 4;        // Retirer le commentaire de cette ligne en cas d'utilisation d'un Z21

  // Appel de la fonction qui va réagir en fonction de l'adresse lue
  actionsDecodeurArduino (address);
}

/* 
 *  Permet de traduire l'adresse qui a été activée en action
 */

void actionsDecodeurArduino (int adresseLue) {
  
  // Ex: si adresse de base est 100 alors l'arduino réagit aux adresse 100, 101, 102,...
  switch (adresseLue) {

    // Faire tourner le pont d'un cran à gauche (= comme bouton gauche)
    case (baseAdresse): 
      ptrCranCourant --;
      rotationByCrans (); 
      break;

    // Faire tourner le pont d'un cran à droite (= comme bouton droite)
    case (baseAdresse + 1):
      ptrCranCourant ++;
      rotationByCrans ();
      break;

    // Mettre le pont à son point 0 (s'il n'est pas déjà en position 0)
    case (baseAdresse + 2):

      if (ptrCranCourant != ptrCranZero) {

        ptrCranCourant = ptrCranZero;
        int goTO = tabPosition[ptrCranCourant];
        stepper.moveTo(goTO);
        stepper.runToPosition();
        stepper.setCurrentPosition(0);
        delay(250);
        powerOffMoteur();
      }
      break;

  }
}

/* 
 *  Coupe l'alimentation sur le moteur
 *  Pour éviter qu'il ne chauffe à l'arrêt
 */

void powerOffMoteur () {
  digitalWrite( 8, LOW); // Si le moteur chauffe toujours à l'arret
  digitalWrite( 9, LOW); // Remplacer les LOW par des HIGH (et inversement)
  digitalWrite(motorOffPin, HIGH); 
  // digitalWrite(11, LOW); 
}

/* 
 *  Initialisation de la carte Arduino
 *  Et des composants qui lui sont raccordés
 */
 
void setup() {

    // Le mode PULL-UP permet de s'affranchir d'une résistance
    pinMode(Inter, INPUT_PULLUP);
    pinMode(BPD, INPUT_PULLUP);
    pinMode(BPG, INPUT_PULLUP);

    // On utilise la LED intégrée à la carte comme témoin
    pinMode(ledTemoin, OUTPUT);  //LED

    // Cherche l'emplacement du point 0 dans le tableau des positions
    for (int ii=0; ii<nbPosition; ii++) {
      if (tabPosition[ii] == 0) ptrCranZero = ii;
    }

    // Force l'emplacement du point courant dans le tableau au 0
    ptrCranCourant = ptrCranZero;   // Au point 0 au début


    // Pour le mode rotation par crans 
    // On définit la vitesse MAX 
    // Et la vitesse dé départ et de fin de rotation
    // La classe "AccelStepper" se charge de calculer la courbe de vitesse :)
    stepper.setMaxSpeed(vitesseMaxCrans);
    stepper.setAcceleration(vitesseAccelerationCrans);

    // Par défaut on dit que le moteur démarre au point 0
    // Mais on peu l'ajuster en manuel
    stepper.setCurrentPosition(0);

  // initialize serial communications at 9600 bps:
  Serial.begin(9600);

  

    // Déclaration pour la partie DCC
    // La fonction est appelée sur Interruption de la broche 2
    // A chaque action faite sur la centrale

/* A activer si module DCC
 *    
 *  
 */
//    DCC.SetBasicAccessoryDecoderPacketHandler(BasicAccDecoderPacket_Handler, true);
//    DCC.SetupDecoder( 0x00, 0x00, 0 );

}

/* 
 * Fait tourner le moteur à gauche ou à droite en continu
 * Lorsque l'un des boutons est pressé
 */

void rotationManuelle (int sensRotation = 1) {
  rotationEnCours = true;
  if (digitalRead(ledTemoin)== LOW) digitalWrite(ledTemoin, HIGH);
  
  stepper.setSpeed(vitesseRotationManuelle * sensRotation);
  stepper.runSpeed();
}

/* 
 * Fait tourner le moteur à gauche ou à droite par crans prédéfinis
 * Lorsque l'un des boutons est pressé
 * On définit la position de destination avec moveTo()
 * Puis runToPosition() pour lancer la rotation à la vitesse définit et avec accélération
 * Le moteur ralentira en atteignant sa position de destination
 * (1 tour = 2048 ou 4096)
 */

void rotationByCrans () {

  rotationEnCours = btnClic = true;
  if (digitalRead(ledTemoin)== LOW) digitalWrite(ledTemoin, HIGH);  
  
  int goTO = tabPosition[ptrCranCourant];
  stepper.moveTo(goTO);
  stepper.runToPosition();
  delay(100);
  powerOffMoteur();
  
  if (ptrCranCourant == 0 || ptrCranCourant == (nbPosition-1)) {
    ptrCranCourant = ptrCranZero;
    stepper.setCurrentPosition(0);
  }
}

void loop() {

  // Mode rotation Manuelle / Calibrage
  // ---------------------------------------------
  if (digitalRead(Inter) == HIGH) {
    
    if (digitalRead(BPG) == LOW) {
      rotationManuelle (-1) ;  
    } else if (digitalRead(BPD) == LOW ){
        rotationManuelle (1) ;
    } else {
      // Arreter la rotation lorsqu'un bouton poussoir est relaché
      if (rotationEnCours == true) {
        rotationEnCours = false;
        if (digitalRead(ledTemoin) == HIGH) { digitalWrite(ledTemoin, LOW); }

        // Le point d'arrêt devient alors le point 0
        stepper.setCurrentPosition(0);
        ptrCranCourant = ptrCranZero;
        powerOffMoteur();
      }
    }

  } else {
  
    // Rotation par crans / taquets
    // ---------------------------------------------

    // Call to library function that reads the DCC data
    // Lecture DCC uniquement dans le mode Crans.
    //DCC.loop();

    if (digitalRead(BPG) == LOW) {
      ptrCranCourant --;
      rotationByCrans (); 
    } else if (digitalRead(BPD) == LOW ) {
      ptrCranCourant ++;
      rotationByCrans ();
    } else {
      if (rotationEnCours == true) {
        rotationEnCours = false;
        if (digitalRead(ledTemoin) == HIGH) { digitalWrite(ledTemoin, LOW); }
      }
    }

    // Lorsque les 2 poussoirs sont relachés
    if (digitalRead(BPG) == HIGH && digitalRead(BPD) == HIGH) { btnClic = false; } 

      {
       // print the results to the Serial Monitor:
        Serial.print("Position Courante plateau = ");
        Serial.print(tabPosition[ptrCranCourant]);
        Serial.print("\t");         // prints a tab
                Serial.print("Position dans tableau = ");
        Serial.println(ptrCranCourant);
        delay(2); }
  
  }  
}



Documentation technique

La documentation technique de la réalisation du pont transbordeur sur Barn Station est divisée en 2 documents. Une doc technique sur la conception, réalisation. Et l’autre pour la partie électronique et pupitre de commande.

 
 
 
 

Conclusion

Dans ce genre de projet, on peut mettre en œuvre des solutions empiriques pour arriver au résultat
escompté. Ici les exemples ne manquent pas : Sangle, cornière, plat, ruban adhésif varié, composants
électroniques… pour donner une deuxième vie à mes fonds de tiroirs avec quelques coups de cutter,
de lime, de colle ou de peinture.
Si c’était à refaire :

  • Épaisseur du plateau supérieur plus épais, 19 ou 22mm au lieu de 16.
  • Largeur du rainurage plus faible.

Ce que j’aimerais faire :

  • Ajouter un bouton poussoir pour déplacer automatiquement la passerelle vers la voie centrale
    d’entrée/sortie.
  • Modifier le logiciel pour conserver une vitesse de déplacement constante en cas d’appui
    prolongé sur le levier de l’inverseur de commande K1. Cela évitera une phase de
    ralentissement puis d’accélération à l’approche d’une voie de passage.
  • Remplacer les heurtoirs Peco par un modèle à l’échelle HO.

Pour information, je me suis approvisionné dans les commerces suivants :

  • Leroy Merlin : Quincaillerie, visserie, matériaux, profilés PVC
  • Action : Peinture, adhésif, équerre de fixation
  • Cultura : Adhésif papier, peinture, colle
  • Lapierre Modélisme : Éclairages, Led, fils, connecteurs. Site : www.lapierremodelisme.com
  • Genapart : Pièces et composants mécaniques, moteur, cartes, et beaucoup de matériel lié à la robotique et l’impression 3D. Site : www.genapart.com
  • SystéAl : Profilé V-Slot, charriot, quincaillerie. Site : www.systeal.com

Je recommande vivement ces sites : Des conseils de pro, réactivité du traitement des commandes,
choix du matériel et surtout une bonne qualité de leurs produits.
C’est sûr, dans la réalité un tel pont transbordeur n’existe pas…mais ce projet a été un formidable antistress
et m’a permis de dialoguer avec de nouvelles personnes ce qui est important dans cette période
que nous traversons. Et enfin, je partage volontiers cette réalisation pour apporter peut-être des
solutions ou des idées à d’autres modélistes.

Thierry.

Partager sur les réseaux sociaux en un clic.