LOCODUINO

Passage à niveau géré par Arduino

Passage à niveau géré par Arduino (5)

Amélioration et résolution des problèmes

.
Par : Christian

DIFFICULTÉ :

Les quatre précédents articles nous ont permis de construire un passage à niveau automatique de type SAL 2 et de l’intégrer à un réseau de trains miniatures comme le réseau Train’ In Box. Cet article, le dernier de la série, va vous donner des pistes pour améliorer le montage et surtout vous montrer comment le dépanner si certains éléments devaient tomber en panne.

Article mis à jour le 17 octobre 2021 pour préciser que l’emploi de détecteurs d’occupation par consommation de courant simplifie grandement le programme pour déterminer l’état d’occupation de la zone du PN.
Mise à jour le 6 août 2024 pour ajouter un lien vers le simulateur Wokwi.

Il aura fallu quatre articles qui s’enchaînent pour arriver à bout de notre projet de passage à niveau reproduisant la réalité le plus fidèlement possible. Chaque article complétait le précédent afin de rajouter une fonctionnalité. On ne développe pas une application complète en une seule fois ; il faut opérer par petits bouts et toujours partir d’un montage qui fonctionne pour l’améliorer en lui ajoutant une nouvelle option.

Bien évidemment, au cours de notre développement, nous avons dû faire des choix qui n’étaient sans doute pas les meilleurs mais qui s’imposaient pour d’autres raisons :

  • Facilité d’intégration sur un réseau déjà monté
  • Facilité d’approvisionnement en matériaux ou composants
  • Facilité d’usinage des pièces mécaniques sans nécessiter de machines spécialisées
  • Possibilités d’évolution

Nous allons voir ici comment remettre en cause certains des choix qui ont été faits et comment améliorer notre passage à niveau.

Les améliorations possibles

La détection des trains
La première chose que nous pouvons améliorer est la détection des trains. Nous avons fait le choix de positionner des capteurs ponctuels à la périphérie de la zone de voies à surveillée, solution qui a le mérite de ne nécessiter aucun travaux sur les voies en elles-mêmes. Nous avons fait le choix d’utiliser des ILS mais ceux-ci ont des contacts mécaniques qui peuvent parfois se rompre ou rester collés (sans parler des problèmes de rebonds mais nous en avions tenu compte par une temporisation de 2 s). Il peut être intéressant de remplacer ces ILS par des capteurs à effet Hall qui réagissent également à la présence d’un champ magnétique ; ces capteurs sont faciles à trouver et bon marché. Le signal transmis à la carte Arduino doit rester compris entre 0 et 5 V. Pour plus d’informations sur la mise en oeuvre de capteurs à effet Hall, vous pouvez consulter l’article Capteurs à effet Hall.

Que ce soit des ILS ou bien des capteurs à effet Hall, il faut que les locomotives soient équipées d’un aimant, ce qui peut constituer une contrainte si vous voulez que vos amis viennent sur votre réseau avec leurs locomotives personnelles qui ne sont peut-être pas équipées d’aimant. On peut alors faire appel à des capteurs infra-rouge par réflexion qui vont également se fixer sous la voie entre deux traverses et qui restent relativement discrets. Encore une fois, le signal délivré à la carte Arduino doit rester compris entre 0 et 5 V et il faudra faire un traitement informatique car le capteur verra passer chaque wagon qu’il faudra ensuite reconstituer comme un seul et unique train. Ceci n’est pas très compliqué ; il suffit de mettre une temporisation pour filtrer le temps relativement court de non détection entre wagons.

Comme on l’a dit au début, le nec plus ultra est de faire de la détection d’occupation de voies par consommation de courant. On peut utiliser des détecteurs d’occupation du commerce ou bien monter ses propres détecteurs en s’inspirant de schémas trouvés sur internet ou sur notre forum. Le signal délivré doit être compris entre 0 et 5 V pour être envoyé à la carte Arduino ; si ce n’est pas le cas, on peut utiliser un coupleur optique comme on l’a fait pour le module son. Néanmoins, l’utilisation de détecteur d’occupation par consommation de courant nécessite de créer physiquement des zones de détection en coupant une file de rail aux endroits stratégiques. Les voitures et wagons doivent consommer du courant pour être détectés. Pour des voitures, c’est assez simple si elles sont éclairées et pour les wagons, il suffit de graphiter les essieux ou de mettre des feux de fin de convois.

La figure 1 montre en bleu la forme des zones de protection du PN pour chaque voie ainsi que le positionnement de certains accessoires (cliquez sur l’image pour l’agrandir). La distance "L" est la longueur du plus long train circulant sur le réseau. L’utilisation de ce genre de détecteurs est d’autant plus facile que le réseau a été conçu en ce sens, en créant par exemple des cantons pour que plusieurs trains puissent se suivre. Une fois le réseau monté, c’est plus compliqué d’intervenir dessus sans être pour autant impossible ; il suffit de couper les rails et de souder sur les flancs un fil électrique pour réalimenter la portion. Avec le décor en place, cela peut devenir assez sportif…

Figure 1
Figure 1
Zones de protection des voies avec des détecteurs d’occupation

Le gros avantage des détecteurs d’occupation par rapport aux capteurs ponctuels en périphérie de zone à protéger est qu’on n’a plus à tenir compte de conditions à respecter lors de l’initialisation. Si un détecteur envoie un signal, c’est que la zone est occupée et qu’un train approche du PN et il n’y a plus à se poser la question de l’état antérieur de la zone. Mais il faut aussi un minimum de tension sur la voie pour détecter un train arrêté en gare ; ceci ne concerne pas un réseau en DCC puisque la voie est toujours sous tension, même avec des trains à l’arrêt.

Il faut aussi se rappeler que la mise en parallèle de plusieurs capteurs sur une même entrée n’est possible que pour des contacts (ILS tels qu’ils ont été montés dans ce projet) ou bien des sorties à collecteur ouvert (capteurs à effet Hall ou détecteurs d’occupation par consommation de courant). Un peu d’électronique peut se révéler nécessaire pour traiter plusieurs capteurs. Dans le cas de la figure 1, il ne faut que deux détecteurs d’occupation (un sur chaque voie) qui peuvent alors être reliés aux entrées 2 et 3 de la carte Uno ; dans ce cas, l’entrée 3 travaille de la même façon que l’entrée 2 pour déterminer l’occupation globale du PN comme nous l’avons expliqué dans le premier article et le traitement de l’information n’est plus qu’un simple exercice de programmation.

Les programmes donnés dans cette série d’articles ont été conçus pour traiter des événements de courte durée (fermeture d’ILS) et ils surveillent la périphérie de la zone PN en faisant appel aux interruptions pour ne pas louper des événements. Les détecteurs d’occupation fournissent des signaux de longue durée (tant que la zone à surveiller est occupée) ; le programme est considérablement simplifié puisqu’il suffit de lire l’état des entrées reliées aux détecteurs en début de boucle loop pour déterminer l’état d’occupation de la zone du PN. Toutes les entrées sont utilisables à la condition que le signal fourni par le détecteur soit ramené dans l’intervalle 0-5 V.

Quatre feux de PN au lieu de deux
Il suffit de rajouter deux LED et une résistance de 470 Ω sur la sortie 5 (PWM) comme le montre la figure 2, et bien évidemment modifier le programme. Chaque ensemble de deux LED sera positionné d’un côté ou l’autre des voies et bien évidemment les LED d’un même ensemble seront positionnées de chaque côté de la route pour être vues par les automobilistes devant s’arrêter avant la barrière.

Figure 2
Figure 2
Montage pour quatre feux de passage à niveau

Concernant le programme, il suffit d’instancier un deuxième objet (feu2PN) avec LightDimmer. Chaque opération sur le premier objet est répétée sur le deuxième.

/*******************************************************************************
 * PN_TIB_4Feux_Barrieres_SortieSon_InitFerme.ino
 * *****************************************************************************
 * Programme developpe pour le projet de PN pour Train In Box.
 * Il prend en compte l arrivee du train, le clignotement des feux en simulant 
 * une ampoule a filaments, un delai avant mouvement des barrieres,
 * le mouvements des deux barrieres sur 90° d amplitude (depend de 
 * la transmission adoptee).
 * Le programme s'initialise barrieres fermees, donc AVEC TRAIN EN GARE SUR TIB.
 * La LED_SON est allumee tant que sonnerie doit jouer ; cette sortie commande
 * le module sonore.
 * *****************************************************************************
 * Christian BEZANGER - 13 Novembre 2018 - 2 Juin 2019 - 29 mai 2020
 ******************************************************************************/

#include <LightDimmer.h>  // Bibliotheque pour gerer les feux du PN
#include <Servo.h>        // Bibliotheque pour gerer les barrieres du PN

const byte ILS=2; // entree des capteurs 
const byte LED=6; // sortie PWM pour deux feux du PN
const byte LED2=5; // sortie PWM pour deux autres feux du PN
const byte LED_SON=7; // sortie pour indiquer sonnerie
const byte S1=4; // sortie pour le servomoteur 1
const byte S2=8; // sortie pour le servomoteur 2
unsigned int compteur = 1;  // compteur d evenements (survol ILS)

// Variables utilisateur pour reglage du mouvement des barrieres
// -------------------------------------------------------------
unsigned long delaiFermeture = 0; // Regle le delai entre clignotement LED 
// et fermeture barrieres - entre 2000 et 8000 mais 0 sur TIB (pas de delai)
int speedServo = 30;  // Regle la vitesse de mouvement des barrieres

// Variables non utilisateur
// -------------------------
volatile static boolean etatZonePN = true; // true si la zone du PN est occupee
volatile static boolean old_etatZonePN = false; // etat anterieur de la zone
volatile static unsigned long old_top_debutISR;  // Date anterieure d appel ISR
unsigned long old_top = 0;  // variable pour afficher donnees utiles
int posServo = 90; // position courante a initialiser imperativement FERMEE
int posOuvert = 0;  // barriere a la verticale
int posFerme = 90; // barriere a l'horizontale (90° de la verticale)
unsigned long topAttente = 0; // top pris au début franchissement de la zone PN
boolean etatSon = false; // true si sonnerie doit retentir

// Instanciations
LightDimmer feuPN;
LightDimmer feu2PN;
Servo servo1;
Servo servo2;

void changeEtat() { // routine d'interruption (ISR)
  unsigned long top_debutISR = millis();  // date appel ISR
  if((top_debutISR - old_top_debutISR) > 2000) {
    // 2 secondes au moins entre execution ISR
    etatZonePN = !etatZonePN; // etat passe a etat oppose
    old_top_debutISR = top_debutISR;  // initialisation date anterieure d appel ISR
  }
} // fin de ISR

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200); // communication avec le moniteur
  pinMode (ILS, INPUT_PULLUP);  // entree capteur
  pinMode (LED_BUILTIN, OUTPUT);  // LED du module allumee si Zone PN occupee
  pinMode (LED, OUTPUT);  // sortie pour feux du PN
  pinMode (LED2, OUTPUT); // sortie pour autres feux du PN
  pinMode (LED_SON, OUTPUT);
  attachInterrupt (digitalPinToInterrupt(ILS), changeEtat, FALLING);
  digitalWrite (LED_BUILTIN, LOW);
  feuPN.begin(LED, HIGH); // LED s'allume avec etat haut
  feu2PN.begin(LED2, HIGH); // LED2 s'allume avec etat haut
  servo1.attach(S1);
  servo2.attach(S2);
  // initialisation des barrieres en position fermee
  servo1.write(posFerme); // barriere 1 FERMEE apres initialisation
  servo2.write(posFerme); // barriere 2 FERMEE apres initialisation
  delay(2000);
  digitalWrite (LED_BUILTIN, HIGH); // Indique fin de setup
}  // fin de setup

void loop() {
  // put your main code here, to run repeatedly:
  if(etatSon == false) {digitalWrite (LED_SON, LOW);}
  if(etatSon == true) {digitalWrite (LED_SON, HIGH);}
  if(etatZonePN == false) {
    old_etatZonePN = etatZonePN;
    digitalWrite (LED_BUILTIN, LOW); // eteint LED de controle de la zone PN
    etatSon = false;  // pas de sonnerie
    feuPN.stopBlink();  // arrete le clignotement
    feu2PN.stopBlink(); // arrete le clignotement
    feuPN.off();  // eteint les feux
    feu2PN.off(); // eteint les feux
    // ouverture barriere
    if(posServo > posOuvert) {
      posServo = posServo - 1;
      servo1.write(posServo);
      servo2.write(posServo);
      delay(speedServo);
    }  // fin du test sur position des servos
  }  // fin du test sur etat de la Zone du PN -> false
  if(etatZonePN == true) {
    if(etatZonePN != old_etatZonePN) {
      topAttente = millis();  // prend un top d'entree dans zone PN
      old_etatZonePN = etatZonePN;
      etatSon = true; // sonnerie
    }  // fin du deuxieme if
  digitalWrite (LED_BUILTIN, HIGH); // allume LED de controle de la zone PN
  feuPN.startBlink(); // commence le clignotement
  feu2PN.startBlink();  // commence le clignotement
  // fermeture barriere après attente
  if(millis() - topAttente > delaiFermeture) {
      if(posServo <= posFerme) {
        posServo = posServo + 1;
        servo1.write(posServo);
        servo2.write(posServo);
        if(posServo >= 89) {etatSon = false;}
        delay(speedServo);
      }  // fin du test sur position des servos 
    }  // fin du test sur delai avant ouverture
  }  // fin du test sur etat de la Zone du PN -> true
  LightDimmer::update();
  if(old_top_debutISR != old_top) { // Affichage pour chaque nouveau survol ILS
    Serial.print(compteur);
    Serial.print("     ");
    Serial.print(old_top_debutISR);
    Serial.print("     ");
    Serial.println(old_top_debutISR - old_top);
    old_top = old_top_debutISR; 
    compteur = compteur + 1;   
  }
}  // fin de loop

Vous pouvez voir le fonctionnement de ce PN en cliquant sur le lien ci-dessous :
https://wokwi.com/projects/40546224...
Wokwi ne permettant pas de mettre deux LED en série, chaque sortie de feu de PN n’est donc constituée que d’une seule LED.

La bibliothèque LightDimmer permet de régler la fréquence de clignotement, les temps de montée et descente de la luminosité des ampoules pour reproduire l’inertie thermique des filaments. Les choix faits par défaut dans la bibliothèque reproduisent très bien un PN français de la SNCF, si bien qu’il n’est pas forcément nécessaire de les changer. Reportez-vous au fichier « readme » fourni avec la bibliothèque.

Mouvement des barrières
Comme on l’a dit, les barrières en plastique du PN Auhagen sont très fragiles et ce PN ne ressemble pas vraiment à ce qu’on trouve en France. On peut donc envisager d’autres marques mais si on veut appliquer la transmission du mouvement décrite dans cette série d’articles, la commande de la barrière doit se faire en tirant ou poussant une tige ou une corde à piano. Peu importe la valeur du déplacement, il suffit de modifier la forme de la came. Par contre, une corde à piano devra être rigidifiée comme on l’a fait pour le PN Auhagen. Parmi les candidats possibles, nous conseillons les barrières réalisées en impression 3D par NTrail45 ; l’avantage est que vous n’avez pas à monter la barrière car elle est livrée fonctionnelle, l’inconvénient est que le mouvement est limité à l’ouverture par le socle sur lequel vient buter le contrepoids. Il convient de limer un peu ce socle sur un côté. Il existe aussi des feux équipés d’une LED donc fonctionnels ; un ensemble de deux barrières et de deux feux vous coûtera un peu plus de 50 € (prix 2020) mais ceci vous évite quelques heures de travail.

Il existe aussi de très beaux kits en laiton de barrières oscillantes manœuvrées par un ou une garde-barrières. Il fallait tourner une manivelle pour faire descendre ces barrières qui rebondissaient un peu en arrivant en bout de course. Ceux qui voudront reproduire ce mouvement de façon très réaliste auront intérêt à utiliser la bibliothèque SlowMotionServo de LOCODUINO qu’on trouve dans le gestionnaire de bibliothèques de l’IDE. Pour plus d’informations sur la bibliothèque SlowMotionServo, consultez l’article La bibliothèque SlowMotionServo.

Une autre amélioration possible est de construire un passage à niveau automatique SAL 4, c’est-à-dire avec quatre barrières. Il suffit de rajouter deux autres servomoteurs, d’alimenter tous les servos à part (parce que cela ferait trop pour votre carte Uno) et bien évidemment, modifier le programme. C’est un peu plus compliqué de fermer quatre barrières, car elles se ferment deux par deux, les unes après les autres. Par contre, elles s’ouvrent en même temps. La sonnerie s’arrête juste après la fermeture des deux premières barrières. Voilà donc un bel exercice de programmation !

La vidéo ci-dessous vous donne un exemple de PN SAL 4 :

Recherche de pannes

Vous avez installé le PN sur votre réseau, conformément à cette série d’articles et lors de la mise en route de la carte Arduino, ça ne fonctionne pas comme cela devrait. Voici quelques éléments de réponses aux questions que vous vous posez.

Lorsque la carte est branchée, rien ne se passe

Vérifiez que la carte Arduino est bien alimentée (sa LED ON doit être allumée).

Si elle l’est, vérifiez que la LED reliée à la sortie 13 est allumée après l’initialisation (la zone est supposée être occupée à l’initialisation).

Si oui, les LED du PN clignotent-elles ? Non, alors vérifiez qu’elles ne sont pas montées à l’envers et vérifiez aussi les connexions avec la carte Arduino. Cette partie du montage doit fonctionner sans problème.

Le train tourne mais rien ne se passe

Avez-vous pensé à mettre un aimant sous la locomotive ? Car sans aimant, pas de déclenchement des ILS !

Vérifiez que la carte Arduino est bien alimentée (sa LED ON doit être allumée).

Essayez de surpasser un ILS en pontant les fils qui en sortent au niveau du domino de connexion. Cette action équivaut à la fermeture des contacts de l’ILS et doit donc déclencher des actions au niveau de la LED de la carte Arduino, des LED de feux de PN, des mouvements de barrières.

Les barrières s’ouvrent quand elles devraient se fermer et se ferment quand elles devraient être ouvertes.

Cela peut être dû à une mauvaise initialisation de la carte Arduino. Amenez un train dans la gare du réseau TIB puis appuyez sur le bouton RESET de la carte Arduino. Attendez que l’initialisation se fasse ; les barrières doivent être fermées et les feux doivent clignoter. Faites démarrer le train et laissez-le tourner ; le comportement du passage à niveau doit être correct. Sinon, c’est qu’un ILS ne joue pas son rôle et ne détecte pas quand un train passe. La solution est de le changer. Pour tester tous les ILS, laisser le train tourner sur toutes les voies possibles.

La barrière n’est pas horizontale quand elle est fermée

Essayez de régler la rallonge de la tige de commande sans forcer.

La barrière est à moitié ouverte au lieu de complètement ouverte

La tige de commande ne redescend pas assez et ceci doit se voir car elle ne frotte plus sur la came. Changez l’élastique de rappel pour un plus petit qui exercera une force de rappel un peu plus grande.

Le fonctionnement des feux est correct mais les barrières ne bougent pas

Vérifiez la connexion des servomoteurs à la carte Arduino. Vérifiez aussi que la transmission mécanique ne soit pas coincée par un objet ou un élastique tirant trop fort sur la tige de commande. Au besoin, retirez les deux cames et regardez si les servomoteurs tournent correctement.

Vérifiez que les servomoteurs que vous avez utilisés ne consomment pas trop de courant par rapport à ce que peut délivrer la sortie 5 V de la carte Arduino ; au besoin, alimentez les servomoteurs avec une alimentation à part.

Une des deux barrières ne bouge pas

Vérifiez le fonctionnement de son servomoteur et que rien ne bloque la transmission mécanique.

Tout fonctionne sauf le son

Vérifiez que la carte Arduino du module sonore est bien alimentée (sa LED ON doit être allumée) et vérifiez les connexions avec la carte Uno de commande du PN.

Lors de l’initialisation de la carte Arduino du module sonore, vous devez entendre la sonnerie durant trois secondes ; est-ce le cas ?

Vérifiez les connexions du DFPlayer avec la carte Arduino du module sonore.

Vérifiez que vous avez bien inséré la carte SD et que celle-ci contient bien un fichier audio au format MP3.

Si cela ne fonctionne toujours pas, branchez la carte Arduino du module sonore à votre ordinateur, ouvrez le moniteur et regardez les messages envoyés par DFPlayer ; ils vous permettront de comprendre d’où peut venir le problème.

J’entends la sonnerie durant trois secondes, puis plus rien

Vérifiez la sortie son de la carte Arduino de commande du PN en branchant une LED entre cette sortie et la masse (GND) ; cette LED doit être allumée lorsque la sonnerie doit jouer.

Vérifiez alors la connexion de cette sortie son avec le module sonore.

Si vous entendez la sonnerie en reliant l’entrée 2 de la carte Arduino du module sonore à la masse (GND) de cette carte, alors le problème vient sans doute du coupleur optique ; remplacez-le.

Le fonctionnement de mon PN est erratique : un coup ça marche, puis ça ne marche plus

C’est certainement dû à des mauvais contacts dans le câblage. Vérifiez le câblage, les connecteurs Dupont utilisés. Remplacer les dominos d’électricien par de vraies soudures bien plus fiables.

Le programme ne veut pas se téléverser sur ma carte Arduino

Vérifiez que vous avez sélectionné le bon type de carte dans le menu Outils et que le port série utilisé est le bon ; au besoin, réglez ces paramètres.

Vérifiez que vous avez pensé à inclure la bibliothèque « LightDimmer » dans votre IDE ; sans cette bibliothèque, la compilation génère un message d’erreur (puisqu’il manque une « partie » du programme), ce qui empêche le téléversement.

Le programme a été modifié et depuis, plus rien ne marche

Visiblement, cette modification est la cause du dysfonctionnement. Il faut trouver pourquoi en demandant de l’aide sur notre forum.

Il est toujours possible de revenir en arrière, il suffit de téléverser à nouveau dans votre carte Arduino le programme publié dans cette série d’articles (ou l’avant dernière version que vous avez modifiée et qui fonctionnait).

Conclusion

Faire une recherche de panne n’a rien de compliqué, il suffit d’être méthodique. Souvent, on oublie de brancher quelque chose, parfois c’est un composant qui claque. Mais la plupart du temps, ce sont des mauvais contacts dus à des liaisons mal serrées ou à de mauvaises soudures. Le problème peut aussi se cacher derrière quelque chose qu’on ne remet pas en cause parce qu’on est persuadé d’avoir bien fait ; par exemple, vous êtes certain que votre carte SD contient bien un fichier MP3 car vous avez vous-même fait la copie de ce fichier mais êtes vous certain que cette copie n’a pas corrompu votre fichier ? Le diable se cache parfois dans les détails !

Ce montage n’est pas seulement un montage électronique ; il y a aussi une partie de pure mécanique qui peut gripper ou casser, mais ce genre de panne n’arrive qu’au bout d’un certain temps de fonctionnement. Par exemple, un élastique peut devenir cassant avec le temps. Il est donc important de bien surveiller les organes mécaniques de ce passage à niveau.

Enfin rassurez-vous : les montages bien construits peuvent aussi fonctionner parfaitement et ne jamais connaître de panne !

41 Messages

  • Passage à niveau géré par Arduino (5) 18 janvier 2021 15:46, par Gamulf

    Bonjour,

    J’ai réalisé le montage et l’ai essayé. Un servo ne tourne pas dans le bon sens ; ne devrait-il pas être anti-horaire pour que les deux 1/2 barrières bloquent le passage ?

    Répondre

    • Passage à niveau géré par Arduino (5) 18 janvier 2021 16:21, par Christian

      Avez-vous monté les deux demi-barrières du même côté de la voie ? (cas de la moitié d’un PN SAL4)
      Si oui, effectivement un des deux servos ne tourne pas dans le bon sens, mais ce montage ne propose pas un SAL4 mais un SAL2, auquel cas, par symétrie, chaque barrière joue un rôle identique. Revoyez la figure 1 de l’article 3 et imaginez-vous prendre la barrière la plus près de vous et l’installer de l’autre côté de la voie, ce qui oblige à la tourner de 180°.

      Répondre

  • Passage à niveau géré par Arduino (5) 18 janvier 2021 17:21, par JPB

    Bonjour,
    Concernant ce sujet très complet, voici ma config :

    • 2 barrières gérées par servos très proches de l’arduino
    • 2 feux clignotants
    • détection par IR (TCRT5000L)distants de 70/80 cm du PN et donc de l’arduino
    • Arduino nano sur alim bien séparée du feeder du réseau
      En fait tout fonctionne correctement, la détection se fait bien sauf que, dès que je pose une loco sur les rails quel que soit l’endroit ou elle se trouve sur le réseau, les barrières se ferment au moindre bougé de la loco.
      J’ai posé des condos de filtrage 4700 µF, des 100nF un peu partout et à proximité de chaque équipement, rien y fait.

    Mon réseau est en analogique et une alim distincte alimente les voies à partir d’une régulation à transistor 2N3055

    Avez-vous un ou plusieurs conseils concernant ce soucis ? Câbles blindés peut-être !

    Répondre

    • Passage à niveau géré par Arduino (5) 18 janvier 2021 17:55, par Christian

      Alimentation des voies par 2N3055 : de fabrication personnelle ou achetée dans le commerce ?
      Que tout fonctionne correctement hors locomotive est déjà une bonne chose. Le problème vient donc du courant traction ou de la locomotive. Que se passe-t-il si on change de locomotive ? Avez-vous essayé d’éloigner le Nano en allongeant les fils des servomoteurs ? Les servomoteurs sont alimentés comment ?

      Répondre

      • Passage à niveau géré par Arduino (5) 18 janvier 2021 19:22, par JPB
        • Oui alim perso mais plan pris sur des sites de trains miniatures.
        • Quelle que soit la loco, le phénomène se produit. Comme si des parasites perturbaient le système. Certaines sont même équipées du "roulnet"
        • J’ai câblé le nano juste au-dessous du plateau à proximité du PN. Les fils des servos sont donc câblés au plus court et je n’ai pas essayé d’éloigner la carte...
        • Les servos sont alimentés par une alim stabilisée indépendante à deux sorties. 8V pour l’arduino et 5V pour les servos, masses reliées.
          Je pense que les micro coupures entre les rails et la locos perturbent le système mais je pêche pour m’en dépêtrer. Je vais essayer d’éloigner la nano pour voir...

        Répondre

        • Passage à niveau géré par Arduino (5) 18 janvier 2021 20:45, par msport

          Pour vérifier si le problème vient de l’environnement ou des alimentations (via les masses p.e.) je propose de substituer pour test les alimentations des servos et du nano par deux braves piles plates 4,5V. Le nano via le +5V.

          Répondre

          • Passage à niveau géré par Arduino (5) 19 janvier 2021 06:28, par JPB

            Bonjour,

            Merci pour ce conseil. Avant de déplacer et rallonger des fils, je vais passer par cette étape (piles).
            Dans tous les cas, je me souviens à l’ére de la tv en analogique, perturber allègrement la télévision du salon :) Je viens rendre compte dès que possible de l’avancée.

            J’ai oublié au passage : Excellents site et forum très riches en faveur de notre passion du train miniature. Merci entre autre pour ce superbe sujet très complet...

            Répondre

            • Passage à niveau géré par Arduino (5) 19 janvier 2021 09:37, par JPB

              Compte rendu de l’opération piles...

              Test fonctionnel non concluant, toujours autant de perturbations.

              Je vais tester cette maquette de PN sur ma ligne de test de 1m et voir pour remplacer mes alims. Le fait d’avoir seulement du redressé double alternance fait une superbe antenne avec mon feeder. Je pense que ça vient de là et que je vais aussi avoir des soucis quand j’aurai branché mes 8 aiguilles (plan modelleisenbahn...)

              Je viendrai donner des nouvelles si ça peut aider un membre...

              Répondre

              • Passage à niveau géré par Arduino (5) 19 janvier 2021 10:36, par Christian

                Au vu de tout ce qui a été dit, je pense que le problème est l’alimentation en courant traction : avec les rails, ça rayonne bien. Et la double alternance redressée n’est pas la panacée même si les plans ont été trouvés sur un site de modélisme ferroviaire !
                Dans un premier temps, essayez d’éloigner le Nano des rails ou bien se procurer une autre alimentation pour le courant traction. Hélas, dans notre hobby, les parasites sont très nombreux et perturbent beaucoup les microcontrôleurs. Un montage fonctionnel au banc d’essai peut se mettre à dérailler (sans jeu de mot) en condition réelles ; nous l’avons tous subi.
                Pour ma part, le PN a été testé avec un coffret TIB : locomotive PIKO et alimentation de base PIKO et comme je l’ai dit, plus de 100 tours de circuit consécutifs sans problème.

                Répondre

                • Passage à niveau géré par Arduino (5) 19 janvier 2021 13:10, par JPB

                  J’ai des alims qui vont bien(en théorie) et je vais tâcher de régler un à un chaque problème... Mes voies sont dans un gernier isolé et hors poussières mais je n’y monte pas tous les jours ! un nettoyage est nécessaire à chaque démarrage :)

                  Merci pour ta contribution et tes réponses rapides.

                  Répondre

                  • Passage à niveau géré par Arduino (5) 19 janvier 2021 14:17, par Christian

                    De rien.
                    Bonne chance pour la recherche d’une solution à ce problème.

                    Répondre

                    • Passage à niveau géré par Arduino (5) 19 janvier 2021 15:42, par JPB

                      OUF !
                      problème résolu... Comme quoi une simple idée venue d’ailleurs ! J’ai déporté l’arduino du plateau vers le TCO et je n’ai plus de "parasitage". Ce qui me semblait complètement farfelu au départ du fait des tensions de traction diverses y transitant. Le fait de câbler court me semblait tellement évident !

                      Merci à toi et à tous ceux qui animent ce forum/site

                      Amicalement,

                      Répondre

  • Passage à niveau géré par Arduino (5) 18 janvier 2021 17:33, par Gamulf

    Merci pour ces précisions. J’ai fait la modification et ça marche. Par contre, mes servos sont atteint de ’parkinson’, que puis-je faire ?

    Merci pour votre tutoriel qui est très clair.

    Cordialement

    Répondre

    • Passage à niveau géré par Arduino (5) 18 janvier 2021 17:37, par JPB

      J’avais ce pb au départ aussi et j’ai mis des condos 100nF sur l’alim des servos.

      Répondre

      • Passage à niveau géré par Arduino (5) 18 janvier 2021 17:47, par Christian

        Mettre un condo sur l’alimentation des servomoteurs est une bonne chose.
        Si le Parkinson persiste, il peut aussi venir des servomoteurs : origine asiatique bon marché ? Ou marque réputée ? Une solution serait de changer un servomoteur pour une marque plus prestigieuse et voir ce que cela donne. Et auparavant, vérifier le fonctionnement du servomoteur défectueux en dehors de tout montage (carte Arduino + Servomoteur seul).
        Après, on peut aussi vérifier que le signal transmis au servomoteur respecte bien la norme, mais pour cela, il faut un oscilloscope.

        Répondre

  • Passage à niveau géré par Arduino (5) 4 février 2021 17:14, par Chrisang

    J’ai voulu réinventer la roue alors que cela existait sur LOCODUINO grand merci pour ce code qui fonctionne impeccable j’ai juste remplacé les ILS par des capteurs Jeu de diodes IR (émettrice-réceptrice) et un petit ISD1820 pour le son , tout est nickel, merci beaucoup.

    Répondre

  • Passage à niveau géré par Arduino (5) 5 février 2021 09:47, par Christian

    Avoir remplacé certains éléments par ceux en votre possession est une très bonne idée.
    En général, les schémas et programmes que nous publions ne sont là que pour donner un principe de fonctionnement et ils sont parfaitement modifiables. Et surtout améliorables pour que le montage réalisé s’adapte au mieux avec les aspirations des lecteurs et à leur réseau.

    Répondre

  • Passage à niveau géré par Arduino (5) 25 janvier 2022 10:33, par mulroy55

    bonjour
    quel serait le programme avec des detecteurs d’occupaton

    Voir en ligne : muller roger

    Répondre

    • Passage à niveau géré par Arduino (5) 25 janvier 2022 11:43, par Christian

      Relisez le paragraphe qui est situé juste après la figure 1 et surtout la fin du paragraphe noté en avertissement. Vous n’avez plus besoin de faire appel aux interruptions, puisque vos détecteurs d’occupation vont donner un signal qui dure dans le temps. Donc, en début de boucle de programme, vous lisez l’état de vos détecteurs pour savoir si une voie est occupée, et dans ce cas vous en déduisez l’occupation de la zone PN (constituée de plusieurs voies). La scrutation se fait à chaque itération de la boucle principale (loop), donc à une fréquence suffisamment élevée pour ne pas louper les événements.
      La zone PN est occupée si une voie au moins est occupée, et elle est libre si toutes les voies sont libres. Une fois que vous connaissez le statut d’occupation de la zone PN, le traitement est identique à ce qui est fait dans cette série d’articles.
      Je pense qu’avec ces quelques indications, vous devez être capable de rédiger un programme et de le tester. Pour ma part, je ne vais pas publier une solution pour deux raisons :

      • il faudrait que je puisse la tester et je n’ai plus le matériel pour le faire
      • et je ne suis pas là pour faire le travail de ceux qui veulent une solution différente.
        Ayez confiance en vous, vous y arriverez car c’est vraiment beaucoup plus simple en logiciel (même si cela demande de bricoler le réseau pour créer des zones, raison pour laquelle j’ai choisi les ILS comme je l’explique dans les articles publiés sur Loco-Revue).
        Si vous y arrivez, pensez à publier votre programme sur notre forum afin de partager. Si vous rencontrez des problèmes de mise au point, alors je vous aiderai à les résoudre via le forum. D’ailleurs, ce serait une bonne solution d’ouvrir un fil sur ce problème que vous pourrez ainsi résoudre à plusieurs ; je suis persuadé que vous n’êtes pas le seul à vouloir utiliser des détecteurs d’occupation !

      Répondre

  • Passage à niveau géré par Arduino (5) 28 juillet 2022 12:04, par Barriuso JP

    Bonjour ;
    le programme indique un bug à l avant dernière ligne :juste avant "compteur =compteur+1"
    j ai beau vérifier , la syntaxe a été revue et revue et me parait correcte ...

    Merci de votre aide.
    Salutations

    Répondre

    • Passage à niveau géré par Arduino (5) 28 juillet 2022 12:53, par Christian

      Avez-vous utilisé le bouton télécharger pour faire un copier-coller du texte du programme ?
      Parfois, un copier-coller fait à l’arrache peut introduire des caractères qui ne se voient pas mais qui sont bien là et perturbent le programme.
      Quel message d’erreur obtenez-vous ?

      Répondre

  • Passage à niveau géré par Arduino (5) 14 décembre 2022 15:57, par hinano80

    es ce qu il serait possible de remplacer les capteur ils pas des capteur infrarouge type fc-51 si oui qu’ elle serait le programme pour que cela fonctionne

    Répondre

    • Passage à niveau géré par Arduino (5) 14 décembre 2022 16:39, par Christian

      C’est tout à fait possible. Si vos capteurs délivrent un signal LOW lorsqu’ils sont activés, alors ils fonctionnent comme les ILS utilisés ici. En conséquence, le programme reste le même. Si vos capteurs délivrent un signal HIGH, alors il faut légèrement modifier le programme pour en tenir compte. Mais je suis sûr que vous avez 90% de chances d’être dans le cas N°1.

      Répondre

      • Passage à niveau géré par Arduino (5) 14 décembre 2022 16:59, par hinano80

        merci je vais teste

        Répondre

      • Passage à niveau géré par Arduino (5) 21 décembre 2022 15:28, par hinano80

        bonjour j ai fait comme conseille par Christian les modification pour mettre des capteur fc-51 le résultat est que les feu fonctionnent la sonnerie aussi mais les barrière sont fixe et enfin apparemment pas section de fin donc une fois le scenario lance les feu reste clignotant et pas de fin même en passant devant les secteurs une ide comment mettre le programme pour qu il soi visible pour être éventuellement corrige merci de votre aide

        Répondre

        • Passage à niveau géré par Arduino (5) 21 décembre 2022 18:38, par Christian

          Une fois de plus, ce lieu n’est pas fait pour résoudre un problème technique : ouvrez un fil sur notre forum !
          Pour inclure du code, il y a une balise code afin qu’il soit bien présenté et récupérable. Tout cela est expliqué sur notre site, catégorie débutants.
          A ce que je comprends, vous avez monté vos capteurs : comme je l’ai dit, si vos capteurs donnent un signal LOW lorsqu’ils déclenchent, il n’y a pas à modifier le programme. Donc, est-ce le cas ?
          La suite, j’y répondrai sur le forum et j’ai supprimé le programme que vous avez fourni car c’est difficilement lisible quand c’est du texte.
          Cordialement.

          Répondre

        • Passage à niveau géré par Arduino (5) 22 décembre 2022 10:33, par Christian

          Avant de continuer cette discussion sur le forum, je dois préciser, comme je l’ai écrit dans le texte de l’article, que les capteurs infrarouges nécessitent un traitement particulier afin de passer d’une détection qui est relancée à chaque wagon, à une détection ponctuelle comme c’est le cas des ILS. Ceci peut expliquer que votre montage ne fonctionne pas.
          Je reconnais avoir répondu un peu rapidement à votre première question, mais cet article a plus de deux ans et depuis, nous sommes passés à autre chose. Il faut donc nous y remettre nous aussi.
          Utiliser des capteurs IR est possible mais demande un peu de travail : reste à savoir si vous vous en sentez capable. Suivant la configuration de votre réseau, vous pourriez partir sur deux types de capteurs IR : ceux en entrée de zone et ceux en sortie et utiliser deux interruptions au lieu d’une seule.
          Seul le forum peut permettre de discuter de cela en détail.

          Répondre

          • Passage à niveau géré par Arduino (5) 3 janvier 2023 16:10, par hinano80

            j ai déjà jette une bouteille a la mer mais je n ai pas de bon retour, puis j ai trouve votre publication que j ai tente de modifier pour passer en IR fc_51 cela m as permis de résoudre quelle soucis mais je disait dans mon post j ai bientôt 60 ans et je débute dans l Arduino (une vrai torture pour mon cerveau) je sais que je n est pas toujours les bonne façon de présenter les choses mais bon j essais de progresser comme je peux j espère que mon projet pourra aboutir avec votre aide et vos connaissance

            https://forum.locoduino.org/index.p...

            Répondre

            • Passage à niveau géré par Arduino (5) 3 janvier 2023 17:04, par Christian

              Je suis allé voir votre "bouteille à la mer" : si vous n’avez pas eu plus de réponses, c’est que vous l’avez postée dans la rubrique "Présentez-vous" qui permet aux nouveaux venus de se présenter mais qui n’est pas très fréquentée par les membres assidus.
              Donc, le conseil que je vous donne : ouvrez un nouveau fil dans la catégorie "Vos projets" (voir en page d’accueil du forum) en lui donnant un titre évocateur (comme "Passage à niveau avec détecteurs fc51" par exemple). Là, décrivez votre problème, mais n’attendez pas que quelqu’un écrive le programme à votre place. Bien évidemment, pour décrire un problème, il faut un minimum de connaissances sur le sujet, mais celles-ci peuvent s’acquérir sur le site éditorial, en lisant nos articles. C’est sans doute la raison qui fait qu’un membre du forum vous a conseillé de réaliser un montage qui a le mérite de fonctionner, à partir d’un article, afin déjà de comprendre les principes de base. Le montage peut ensuite être modifié selon vos besoins (par exemple, les détecteurs fc51).
              De plus, si j’ai bien compris, par rapport au PN que j’ai décrit dans cette série d’articles, vous voulez non seulement changer les ILS pour des fc51 (qui n’ont pas le même comportement, voir ce que je vous ai dit plus haut), mais aussi que le PN ait deux voies au lieu d’une seule (après tout, j’ai décrit comment faire), mais aussi que votre PN ait quatre barrières au lieu de deux. N’est-ce pas un peu ambitieux pour quelqu’un qui débute ?
              Je ne veux pas vous décourager mais les connaissances et l’expérience doivent s’acquérir avec le temps, en commençant par A, dans l’espoir d’arriver à Z et c’est tout à fait possible quelque soit l’âge. Prenez votre temps, et inutile de revenir à la charge dans cet espace consacré aux articles. Une fois que vous aurez ouvert votre fil dans notre forum, je me ferai un plaisir de vous aider, ainsi que d’autres également.
              Cordialement.

              Répondre

  • Passage à niveau géré par Arduino (5) 1er avril 2023 17:08, par Francois Constant

    Bonjour, auriez vous le code pour l’utilisation en double voie avec des detecteurs IR

    Répondre

    • Passage à niveau géré par Arduino (5) 1er avril 2023 19:32, par msport

      Bonjour,
      le programme proposé fonctionne pour deux voies.
      Et comme déjà expliqué sur le forum, les ILS peuvent être remplacés par des modules IR FC-51 qui sont à collecteur ouvert et dont les sorties peuvent être mises en parallèle.
      Cordialement

      Voir en ligne : Passage à niveau avec capteurs IR

      Répondre

    • Passage à niveau géré par Arduino (5) 2 avril 2023 10:02, par Christian

      Ce passage à niveau a été conçu pour équiper le coffret Train’ In Box vendu par LR-Modélisme. Ce coffret s’adressant à des débutants, il fallait que le montage à base d’Arduino soit simple et c’est la raison pour laquelle nous avons utilisé des I.L.S qui peuvent être ajoutés facilement sur un réseau déjà terminé. Néanmoins, dans le dernier article de la série, j’ai donné quelques voies d’amélioration qui peuvent aussi être un véritable challenge pour ceux qui veulent progresser dans la programmation d’Arduino.
      Si vous voulez relever ce challenge, vous avez déjà une base qui fonctionne avec ce que nous avons publié et nous espérons qu’une fois votre programme au point, vous le publierez dans notre forum ; c’est tout l’intérêt d’appartenir à une communauté.
      La programmation avec Arduino, c’est comme une grille de sudoku ; il n’y a aucun intérêt à aller voir la solution, il faut la résoudre soi-même.

      Répondre

  • Passage à niveau géré par Arduino (5) 13 octobre 2023 19:01, par supermoun62

    Bonsoir à tous,
    D’abord merci pour cette étude et félicitation.
    J’ai simulé le programme avec deux capteurs ILS sur la borne 2, pas de problème.
    J’ai un circuit avec deux voies, donc j’ai installé deux autres ILS sur l’entrée 3, comme indiqué au début du sujet, mais la gestion de cette entrée ne se fait pas.
    Si quelqu’un peut donner une solution.
    Merci d’avance à tous.
    supermoun62

    Voir en ligne : Passage à niveau géré par Arduino (5)

    Répondre

    • Passage à niveau géré par Arduino (5) 14 octobre 2023 10:26, par Christian

      Le montage du passage à niveau est prévu pour Train’ In Box qui dispose également de deux voies, mais ne fait tourner qu’un seul train à la fois car c’est un petit réseau. En conséquence, en disposant les ILS comme indiqué dans cette série d’articles, on arrive bien à détecter le train quelle que soit la voie sur laquelle il évolue : dans ce cas, tous les ILS sont montés sur l’entrée 2.
      Pour le cas d’un réseau avec deux voies indépendantes (un double ovale par exemple) pouvant faire circuler deux trains en même temps, il faut un système de détection sur chaque voie mais il faut aussi réaliser un petit traitement logique (dans le programme) permettant de déterminer si un train est en approche du PN ou non.
      C’est certainement ce traitement qui n’a pas été bien réalisé dans votre cas. Comme il serait trop long d’en débattre ici, je vous propose d’ouvrir un fil sur notre forum en expliquant bien ce que vous avez fait et en donnant le programme tel que vous l’avez modifié : ainsi on pourra comprendre la raison du dysfonctionnement.

      Répondre

  • Passage à niveau géré par Arduino (5) 15 octobre 2023 19:47, par supermoun62

    Merci pour la réponse.
    Peut-être qu’une personne modifiera le programme 5 en programme 6 afin de gérer deux voies séparées.
    On peut partir du principe qu’aucun train ne fait de marche arrière au niveau du passage à niveau.
    Cordialement supermoun62.

    Répondre

    • Passage à niveau géré par Arduino (5) 16 octobre 2023 09:58, par Christian

      Ce que vous voulez réaliser est décrit dans le premier article de la série, au paragraphe "Cas de deux voies parcourues dans un seul sens". Il faut faire une détection sur chaque voie (en utilisant les entrées 2 et 3 qui sont les seules à permettre l’interruption externe). Ensuite un traitement logique : si voie 1 OU voie 2 occupée, alors zone PN occupée. Ou si vous préférez, zone PN libre si voie 1 ET voie 2 libres.
      Lorsque vous aurez ouvert un fil sur le forum dans la catégorie projets, mettez son titre ici, ce qui me permettra de mettre des éléments de réponses.

      Répondre

  • Passage à niveau géré par Arduino 23 novembre 19:08, par TOURNOIS Michel

    Bonsoir .
    J’ai bien reçu votre réponse du 22 novembre , je vous en remercie , le problème est que je ne trouve pas comment raccorder les effets hall sur la carte Arduino vu qu’il y a 3 fils a raccorder et que sur les croquis je vois que le raccordement avec des ILS qui eux ont que 2 fils , peut être que je ne cherche pas ou il faut ??.
    En attente de votre réponse.
    Bien Cordialement.
    Michel Tournois.

    Répondre

    • Passage à niveau géré par Arduino 24 novembre 01:38, par Christian

      Il faut choisir des capteurs dont la tension d’alimentation est de 5 V parce que cette alimentation sera prise sur la carte Arduino. Ensuite, il faut savoir repérer la broche masse (GND) de la broche V+ : pour cela, il faut consulter la notice du composant. On relie donc la broche GND à une sortie GND d’Arduino, la broche V+ au +5V d’Arduino. La troisième broche est celle qui délivre le signal à Arduino à relier à une entrée d’Arduino (analogique ou numérique selon le type de signal délivré par le capteur).

      Répondre

Réagissez à « Passage à niveau géré par Arduino (5) »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Projets »

Les derniers articles

Les articles les plus lus