LOCODUINO

Parlons Arduino => Vos projets => Discussion démarrée par: guillaumevlv62 le octobre 08, 2022, 07:22:13 pm

Titre: Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 08, 2022, 07:22:13 pm
Bonjour à tous,

Je suis débutant en arduino et j'ai en projet de réaliser un va et vient automatique avec 2 trains et 3 gares le plus simplement possible géré par une carte arduino Uno sur réseau analogique , la dérive de voie se fait via un aiguillage à solénoïdes.
au niveau de chaque gare il y aura un capteur pour la détection du train.
Avec mon niveau de débutant j'ai réussi à faire un simple va et vient sur voie unique , ensuite j'ai durci la chose avec 3 gares et un seul train j'ai galéré mais cela fonctionne maintenant.  :D
Aujourd'hui je voudrais compliquer la chose avec 2 trains et 3 gares mais je n'arrive pas à trouver la solution des conditions de départ. Je souhaite que le train A part le 1er vers la gare 3 après un temps donné il revient en gare 1 puis après un temps donné le train B part de la gare 2 vers la gare 3 il s'arrêt X temps puis repart vers la gare 2 et le cycle reprends en boucle.
Je mets un dessin de mon projet.
Donc : 3 gares , 2 trains , 1 aiguillages à solénoïdes et 3 capteurs.
Si une bonne âme souhaiterais me sortir une solution la plus simple possible de son chapeau j'en serais reconnaissant.
Merci
 
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: Dominique le octobre 08, 2022, 07:32:49 pm
Je vous conseille de lire des articles sur les machines à état comme par exemple;
 https://forum.arduino.cc/t/programmation-automate-fini-machine-a-etat/452532 (https://forum.arduino.cc/t/programmation-automate-fini-machine-a-etat/452532)
Et surtout :
 https://www.locoduino.org/spip.php?article25 (https://www.locoduino.org/spip.php?article25)

Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: msport le octobre 08, 2022, 08:57:13 pm
Bonjour,

déjà bravo d'avoir réussi en tant que débutant un va-et-vient 3 gares, un train (en analogique ?).

Les va-et-vient décrits sur le site font appel à la bibliothèque DCCpp mais leur structure peut vous inspirer.

https://www.locoduino.org/spip.php?article232

https://www.locoduino.org/spip.php?article321

https://www.locoduino.org/spip.php?article322

Bon courage
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: msport le octobre 09, 2022, 10:35:00 pm
... 2 trains et 3 gares ...

Bonsoir,
en fait, est-ce que vous ne pouvez pas dupliquer votre va et vient pour un train pour avoir chacun des trains en va et vient.
Ensuite il suffirait de conditionner le démarrage du deuxième train au retour du premier. Et réciproquement.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 10, 2022, 05:58:00 pm
Bonjour msport,

Je vais voir si j'arrive à développer quelque chose avec cette idée de dupliquer le va et vient.
Ensuite vient l'histoire de comment faire démarrer 1 seul train ??? Car en début de cycle la gare 1 et la gare 2 seront occupés toute les 2 par un train !!!! j'étais partir avec cette idée d'écrire : if ((Capteur1==LOW)&&(Capteur3==HIGH)){  Mais je doute fort que cette façon de faire soit fiable car ensuite j'aurais un if ((Capteur2==LOW)&&(Capteur3==HIGH)){
Pas simple tout ça quand on commence à marcher seul  :-\
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: msport le octobre 10, 2022, 10:31:47 pm
C'est pour cela que la machine à état a été inventée. Au bout du compte ce n'est pas si compliqué :

Je vous propose de numéroter les états successifs et de conditionner le passage à l'état suivant (+1) à la survenue de l'évènement suivant :
0 on attend
1 on démarre (BP) -> A roule avant
2 Capteur3 -> A attend
3 fin attente ->   A roule AR
4 Capteur1 -> A attend
5 fin attente ->   B roule AV
6 Capteur3 -> B attend
7 fin attente ->   B roule AR
8 Capteur2 -> B attend
9 fin attente ->   retour état 1

Utilisez un BP pour faire ON/OFF de votre automate.
Vous saurez certainement piloter l'aiguillage.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: chris_bzg le octobre 11, 2022, 09:51:14 am
Bonjour à tous,
...
Aujourd'hui je voudrais compliquer la chose avec 2 trains et 3 gares mais je n'arrive pas à trouver la solution des conditions de départ. Je souhaite que le train A part le 1er vers la gare 3 après un temps donné il revient en gare 1 puis après un temps donné le train B part de la gare 2 vers la gare 3 il s'arrêt X temps puis repart vers la gare 2 et le cycle reprends en boucle.
...

Ce problème peut être résolu avec un programme qui exécute les actions les unes après les autres (un tel programme s'appelle un séquenceur, comme par exemple un feu rouge de carrefour).
Il vous faut un relais 2RT pour inverser le sens du courant sur la voie, et deux relais 1RT pour alimenter les zones d'arrêt des gares 1 et 2, mais pas en même temps. La gare 3 peut être gérée par une simple diode afin de créer un garage, la diode alimentant ce garage que dans le sens départ du garage.
Voici les actions du programme :
Polariser la voie dans le sens départ.
Alimenter la section d'arrêt 1 -> le train 1 part vers 3. Lorsqu'il arrive en 3, la diode fait qu'il s'arrêtera.
Attendre.
Polariser en inverse le circuit : la diode alimente la section 3 et le train repart en sens inverse. Positionner le relais pour que la voie 1 ne soit pas alimentée. Le train s'arrêtera dessus.
Attendre.
Même chose pour le train 2, après avoir positionné l'aiguille (il suffit d'alimenter le solénoïde avec un ou deux relais, suivant qu'il y a ou non des contacts de fin de course : j'ai décrit cela dans une fiche pratique Loco-Revue). Lorsque le train est revenu en 2, remettre l'aiguille en position pour le train 1.
Comme vous le voyez, il n'y a pas besoin de capteurs mais vous pouvez aussi les garder pour bien contrôler le processus.
En espérant que cela vous aura aidé...  ;)
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: Rob1 le octobre 11, 2022, 10:34:17 am
Bonjour à tous
En complément du post de msport je voudrait préciser que dans le mode des automatismes
on utilise beaucoup, mais pas exclusivement, le Grafcet (Graphe Fonctionnel de Commande des Étapes et Transitions)
pour aborder la programmation des machines dont le fonctionnement est effectivement une succession d'états cadencée par
le franchissement de transitions temporelles ou conditionnelles.

Le Web propose diverses initiation au Grafcet j'invite les non initiés à s'y reporter car c'est souvent ce qui leur manque pour concevoir leurs programmes.
Dans le monde industriel ont utilise des automates programmables pour la commande des machines,
ceux-ci dispose d'un langage de programmation bénéficiant d'instructions dédiées au Grafcet.
Dans le monde Arduino on parle de machines à états et de manière très pratique l'instruction Switch nous facilite la programmation.

Le lien ci-dessous est un début de tuto que j'avais commencé et qui mériterait d'être terminé.
https://www.rob-train.fr/500-Stages/0-Doc/Stages/Ard/Init/Rob_Form_PRG_LeGrafcet_20220506.pdf (https://www.rob-train.fr/500-Stages/0-Doc/Stages/Ard/Init/Rob_Form_PRG_LeGrafcet_20220506.pdf)

A+ Roland
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 11, 2022, 05:11:15 pm
Merci à tous pour vos retours je vais voir pour faire un mix de tout cela et j'espère en sortir quelque chose.
Entre temps si d'autre idée vous viennent je suis preneur.
Salutations
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: msport le octobre 12, 2022, 11:07:13 pm
Bonsoir,

postez votre code 1 train et 3 gares, il nous donnera peut-être des idées ...
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 13, 2022, 05:26:24 pm
Bonjour msport,

Ci-joint le code pour 1 train et 3 gares.
Attention il y a surement de mal façon mais j'ai commencé à me mettre à l'arduino il y a 1 mois 1/2 et j'ai bricolé avec les divers chose que j'ai trouvé sur le net.
Comment je ne sais pas mais le code fonctionne. :-\
J'espère ne pas choquer trop de monde  ::)
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: bobyAndCo le octobre 13, 2022, 06:37:31 pm
B'hein c'est bien pour quelqu'un qui dit débuter. Bon, il faut toujours trouver un petit quelque chose à dire pour progresser alors moi je dirais qu'il n'est ps nécessaire d'avoir les deux fonctions

void Aiguillage1() {
  digitalWrite(8, LOW);
  delay(200);
  digitalWrite(8, HIGH);
}

void Aiguillage2() {
  digitalWrite(9, LOW);
  delay(200);
  digitalWrite(9, HIGH);
}

Il faut remplacer par une seule fonction que l'on peut appeler Aiguillage() avec en paramètre le n° de la broche :

void Aiguillage(const int AigG) {
  digitalWrite(AigG, LOW);
  delay(200);
  digitalWrite(AigG, HIGH);
}
}


Les appels de cette fonction ligne 78 et 91 deviennent alors :

Aiguillage(AigG1);  au lieu de : Aiguillage1();
Aiguillage(AigG2);  au lieu de : Aiguillage2();
C'est en forgeant qu'on devient forgeron.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 13, 2022, 08:34:21 pm
Bonsoir bobyAndCo,

Merci pour cette petite astuce j'aime bien aussi cette façon de faire.
je garde cela bien au chaud   ;)
Mais mon problème aujourd'hui est de gérer 2 trains avec 3 gares en va et vient et la je fais face à un mur je galère mais je ne baisse pas les bras  8)
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: bobyAndCo le octobre 13, 2022, 08:50:43 pm
J'ai survolé l'ensemble de ce fil, mais il me semble que de nombreuses contributions donne la méthode : La machine d'état. Il s'agit ici avant tout de logique. La programmation résoudra sans aucune difficulté le sujet quand le graphe logique sera écrit.

Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: msport le octobre 13, 2022, 11:11:26 pm
Sans garantie et ni vérifié ni testé, un programme modifié.
Probablement pas un exemple à suivre mais qui permet de jouer avec les variables logiques.
Attention à ne pas se taper sur les doigts en forgeant.

J'oubliais : pour suivre l'évolution d'un programme, rien de tel que de le barder de Serial.println
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 14, 2022, 05:37:50 pm
Merci msport, pour ce code je vais tester cela ce weekend.
Je vous ferais un retour sur ce projet car je souhaite encore faire evoluer la chose ( commander un servo pour ouverture de portail mais avant je vais cherche seul ;-) )
Merci aussi autre pour tout les conseils cela m'aide beaucoup à avancer.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: msport le octobre 14, 2022, 05:52:07 pm
Bonsoir,
vous devriez poster un schéma électrique de votre montage. J'avais oublié l'inversion de la tension pour inverser le sens de marche. Pour cela utilisez un relais bipolaire en inverseur, commandé par la broche 6.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 14, 2022, 06:58:32 pm
Bonsoir msport,

Je n'ai pas arrivé à attendre demain...
J'ai chargé votre code dans ma UNO et malheureusement rien ne fonctionne même avec votre modification.
Vraiment désolé.
Je vais voir pour partager un schéma électrique de tout cela !
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: msport le octobre 14, 2022, 11:01:42 pm
Bonsoir,

le programme est loin d'être au point.

Mais déjà, il manque la lecture des capteurs juste au début du loop :

   Capteur1 = digitalRead(capG1);
   Capteur2 = digitalRead(capG2);
   Capteur3 = digitalRead(capG3);
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: msport le octobre 15, 2022, 11:24:21 am
Bonjour,
une version avec des Serial.println qui permettent de suivre le déroulement du programme dans le Moniteur série.
Dans un premier temps on peut tester avec simplement un fil faisant un contact ponctuel entre le GND et les broches 2, 3 et 4 pour simuler la présence des locos.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 15, 2022, 12:19:50 pm
Bonjour,

J'ai téléchargé le code je vais voir cela rapidement encore merci a vous pour tout ce temps passé
Je vous ferais un retour
Cordialement.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 16, 2022, 12:33:34 pm
Bonjour msport,

J'ai testé le code en volant il y a un semblant de fonctionnement par contre il y a un souci sur la commande de l'aiguillage  :(
Je commande l'aiguillage avec 2 relais ( un relais par solénoïde ) malgré la commande

void Aiguillage1(){  // Aiguillage direct
   digitalWrite(8, LOW);
   delay(200);
   digitalWrite(8, HIGH);
   }

   void Aiguillage2(){  // Aiguillage dévié
   digitalWrite(9, LOW);
   delay(200);
   digitalWrite(9, HIGH);
   }

La sortie 8 ou 9 reste active en continue pourtant on demande bien une impulsion ???
selon vous ou serez le problème ??

Ps : Je n'ai pas encore eu le temps de réaliser le schéma électrique du projet
Cordialement.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: msport le octobre 16, 2022, 05:00:42 pm
Bonjour,
le problème est que les fonctions Aiguillage() sont réactivées à chaque boucle du loop.
Il faut qu'elles soient one shot.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: chris_bzg le octobre 16, 2022, 06:15:27 pm
Bonjour Guillaumevlv62,

La bonne méthode est de gérer la direction de l'aiguille (directe ou déviée) : comme il n'y a que deux possibilités, un booléen est parfait, par exemple true si dévié et false sinon. Il faut aussi garder l'état antérieur de l'aiguille et on effectue le mouvement que si la commande donne un état différent de l'état antérieur.
Exemple : au départ (initialisation), l'aiguille A est directe : etat_A = false et old_etat_A = false
On veut manoeuvrer l'aiguille A en appuyant sur un BP ou automatiquement. A l'appui du BP, etat_A devient true (on veut que l'aiguille dévie). Donc etat_A est différent de old_etat_A : dans ce cas, on envoie l'impulsion sur le bon solénoïde.
Une fois que c'est fait, il ne faut pas oublier de faire old_etat_A = etat_A pour mémoriser le nouvel état de l'aiguille. A la boucle suivante de la fonction loop, il n'y aura pas de mouvement, jusqu'à ce qu'on change à nouveau etat_A.
Etc.

Ceci va vous faire réviser les variables booléennes, et les tests de comparaison. Pour le reste, vous y êtes presque.  ;)

Vous pouvez aussi mettre la commande des solénoïdes à l'intérieur d'une routine qui traite de l'appui sur le BP (dans ce cas, l'impulsion n'a lieu que si BP appuyé) :.
if(pinBP == LOW) {
  etat_A = !etat_A;  // l'etat devient son opposé parce que BP appuyé
  if(etat_A) {
  // envoyer impulsion sur solénoïde 1
  }
  if(!etat_A) {
  // envoyer impulsion sur solénoïde 2
  }
}

L'appui sur le BP doit être traité contre les rebonds (une petite temporisation devrait suffire).
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 16, 2022, 07:21:46 pm
Bonsoir à vous msport et chris_bzg,

@chris_bzg Merci pour ce retour ceci me montre encore une autre façon de faire mais l'aiguillage est géré automatiquement et non avec un Bp  :(

@msport oui je m'en suis rendu compte
Que le problème est que les fonctions Aiguillage() sont réactivées à chaque boucle du loop.
Il faut qu'elles soient one shot.
Il faudrait le prendre de quelle façon ??
Il me reste du budget Cpf je vais m'inscrit à une formation car l'arduino me passionne ;)

Bien Cordialement à vous 2
Titre: Re : Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: msport le octobre 16, 2022, 09:00:00 pm
les fonctions Aiguillage() sont one shot dans la version d. A tester ...
Titre: Re : Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: chris_bzg le octobre 17, 2022, 09:44:58 am
Bonsoir à vous msport et chris_bzg,

@chris_bzg Merci pour ce retour ceci me montre encore une autre façon de faire mais l'aiguillage est géré automatiquement et non avec un Bp  :(

...

Automatiquement ou manuellement, peu importe : le traitement est le même !
Face à un problème, il y a toujours plusieurs façons de faire. Les réponses données vous en montrent quelques unes qu'il faut essayer.

Pour ma part, mon mini-réseau est commandé avec un TCO dessiné sur ordinateur par Processing : je clique sur une aiguille et c'est tout un itinéraire qui se constitue. Je clique sur une voie et j'envoie le courant sens aller ou sens retour.
Les principes ont été expliqués dans : https://www.locoduino.org/spip.php?article226 pour une aiguille motorisée par servomoteur, mais une fois que vous saurez faire avec des relais, il suffit de remplacer.

Pour une formation aux microcontrôleurs (notamment Arduino), je vous recommande celle de l'Ecole Polytechnique Fédérale de Lausanne (EPFL) que vous pouvez suivre sous forme d'un MOOC gratuit (tapez Coursera dans un moteur de recherche et regardez ce qui est proposé) : c'est très sérieux et très accessibles, avec TP à réaliser et diplôme final. Je l'ai faite il y a quelques années.  ;)
Titre: Re : Re : Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: savignyexpress le octobre 17, 2022, 12:54:33 pm
...Pour une formation aux microcontrôleurs (notamment Arduino), je vous recommande celle de l'Ecole Polytechnique Fédérale de Lausanne (EPFL) que vous pouvez suivre sous forme d'un MOOC gratuit (tapez Coursera dans un moteur de recherche et regardez ce qui est proposé) : c'est très sérieux et très accessibles, avec TP à réaliser et diplôme final. Je l'ai faite il y a quelques années.  ;)

Bonjour à tous,

Je confirme la qualité et l'accessibilité de ce MOOC.

Les enseignants sont excellents. J'ai suivi les cours de systèmes logiques / microprocesseurs donnés par le Prof. J.D. Nicoud durant mes études à l'EPFL il y a quelques décennies et P.Y. Rochat m'a donné de précieux conseils lorsque je me suis lancé dans les microcontrôleurs Atmel en 2009.

Bon début de semaine et meilleures salutations.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 17, 2022, 06:15:50 pm
Bonsoir msport,

Désolé je n'avais pas vu la version d  :-[
J'ai téléverser le code est Excellente nouvelle cela fonctionne vraiment comme je le souhaite  :)
Je l'ai remis en forme en fonction de mon câblage électrique et en prenant bien soins de ne rien casser et cela marche toujours LoL.
Par contre je souhaite décomposer les actions des relais via un delay entre l'activation d'une gare et le sens de marche ( voir ligne 125 , 133 , 141 et 149 ). J'ai mis un delay (1500); mais il n'ai pas prix en compte.
Seriez vous me dire pourquoi ??
Encore un grand merci à vous pour tout ce temps passé
Cordialement.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: msport le octobre 17, 2022, 06:54:48 pm
Bonsoir,

il faut avoir à l’esprit que le loop est parcouru en permanence en boucle comme son nom l'indique.
Et que les fonctions sont donc réactivées au même rythme.

Au point où vous êtes, il faut comprendre le déroulement du programme (les Serial.print sont là pour cela) et expérimenter.
Testez le UNO débranché mais connecté en USB avec simplement un fil faisant un contact ponctuel entre le GND et les broches 2, 3 et 4 pour simuler la présence des locos.

Manifestement, la formation proposée répond à votre attente, reste à la suivre.
Bon courage.


Titre: Re : Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 17, 2022, 07:48:55 pm
msport,

Testez le UNO débranché mais connecté en USB avec simplement un fil faisant un contact ponctuel entre le GND et les broches 2, 3 et 4 pour simuler la présence des locos.

J'ai déjà testé comme vous me le conseillé et je peux vous dire que votre code après remise à ma sauce fonctionne superbement bien.

Donc je peux résoudre ce problème de tempo avec Serial.print ?? je vais bien analyser ceci
Merci à vous pour votre implication

Bien cordialement
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: chris_bzg le octobre 18, 2022, 11:35:12 am
J'ai regardé un peu votre code.
Il y a un petit effort à faire pour trouver des noms de variables explicites. Ici, on a deux variables Aller et aller qui sont différentes, mais je ne comprends pas en première lecture à quoi elles servent. Alors, oui, un nom de variable explicite est plus long à taper mais c'est le prix à payer pour avoir un programme clair pour tout le monde (et pour vous si vous le reprenez dans un an ou plus).
Sinon, pour régler le problème des delay non pris en compte, on peut utiliser des Serial.print pour repérer par où passe le programme : il suffit de faire afficher des messages différents. Et avec cela, on peut mieux comprendre comment le programme se déroule.
Ne vous inquiétez pas : nous sommes aussi passés par là. Depuis, nous avons acquis des réflexes et plus on le fait tôt, mieux cela vaut.
Donc, ce que nous disons n'est pas une critique, mais plutôt un conseil : si vous l'appliquez, vous progresserez plus rapidement.
Titre: Re : Va et vient automatique avec 2 trains analogique et 3 gares
Posté par: guillaumevlv62 le octobre 22, 2022, 07:57:11 pm
Bonsoir à tous,

J'ai enfin pu tester ce projet sur un mini prototype de 1,50m avec 2 locos et 3 gares et le résultat est bien celui attendu
Merci à @msport pour la proposition de code.
Merci aussi à @chris_bzg pour les critiques constructive j'ai appris à me servir des Serial.prin cela fait plaisir de voir le déroulement d'un code à l'écran  :) Maintenant il me reste à mettre au propre le noms des variables.
Et enfin merci au autre membre du forum pour les divers remarque et conseil.
Maintenant direction un nouveau projet  ::)

Cordialement.