Forums LR PRESSE

Où il est question de trains, petits et grands

  • Advertisement

Démarrer en électronique programmable

Toutes les discussions sur l'Arduino !

Modérateur: MOD

Re: Démarrer en électronique programmable

Publié: Dim 31 Jan 2016, 20:21 
alanya a écrit:Pour la situation initiale, pas tout à fait, parce que dans celle que j'avais décrite au départ, les deux voies étaient occupées.
Mais en fait, ce n'est pas important, j'imagine qu'il faut pouvoir démarrer la séquence quelques soit la situation "matérielle".


Effectivement, cela n'a pas une grande importance. En effet, si les deux voies sont occupées pour le premier départ, on se retrouve vite dans une situation qui se répète : une voie occupée avec un train à l'arrêt et une voie libre sur laquelle arrivera le prochain train, puis ça recommence.

alanya a écrit:Pour le feu et l'alimentation de la zone d'arrêt, je ne suis pas tout à fait d'accord : il vaut mieux séparer les actions : 1) passer le feu au vert ; 2) petite tempo ; 3)alimenter la voie ; cela, pour créer une certaine forme d'inertie avant le départ du train.


Je pense moi aussi que c'est mieux de décomposer ces deux actions et encore mieux de les réaliser avec une petite temporisation entre les deux (forme d'inertie), ce qui est plus facile à faire en électronique programmée qu'en électronique câblée. :wink:
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1690
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Dim 31 Jan 2016, 20:38 
A noter que dans ce qui est demandé c'est l'arrivée d'un train et son arrêt qui déclenche après temporisation le départ de l'autre train...

Il me semble d'ailleurs que cela simplifie la réflexion puisque c'est le train 1lui-même qui initie le processus pour le train 2
Avatar de l’utilisateur
sergio11
Bavard
 
Messages: 59
Inscrit le: Ven 08 Jan 2016, 23:20
Localisation: 11 Ouveillan
Âge: 64
Echelle pratiquée: N
Prénom: Serge

Re: Démarrer en électronique programmable

Publié: Dim 31 Jan 2016, 20:56 
Voici maintenant pour sergio11 :

Dans ton projet, il y a deux détecteurs d'occupation scrutant les portions d'arrêt des voies V1 et V2. Ceci rejoint le scénario N°2 d'alanya, mais avec une différence qui me parait très intéressante : les détecteurs positionnent les aiguilles à l'opposé de la voie occupée, alors qu'alanya dirigeait ses aiguilles pour permettre au train de partir et revenir (si j'ai bien compris).

Ta solution me parait donc apporter une sécurité supplémentaire. En effet, dans la solution alanya, les deux trains partent l'un après l'autre, mais que se passerait-il si un train revient alors qu'un problème mécanique n'a pas permis à l'autre train de partir ? (il faut toujours penser au pire si on veut faire de la sécurité).

Ta solution réclame cependant des tests pour la manœuvre des aiguilles (manœuvre possible que si l'autre voie est libre). C'est un choix et je ne le critique aucunement, mais cela aura une répercussion sur la façon d'écrire le programme.

Une fois de plus, on voit qu'il est fait appel à des temporisations et c'est une bonne chose. Ton travail d'analyse est très bon car il suit bien ta conception de l'électronique environnante. Dans ce travail, il n'est pas nécessaire de parler de front montant ou descendant : d'abord, on décrit ce qu'on doit faire (les actions) et ensuite seulement, on cherchera le meilleur moyen de les faire.

Merci pour ta solution sergio11.

J'ai analysé trois solutions différentes ; il y aura sans doute encore des petits détails à régler mais c'est une bonne base de travail. Merci à vous trois pour votre participation :D . Je vous laisse discuter entre vous des avantages et inconvénients de chaque solution, et je vous invite maintenant à réfléchir aux ressources que chaque solution réclame et à la façon de concevoir les interfaces entre réseau et Arduino. Et lorsque vous aurez peaufiné tout cela, il n'y aura plus qu'à écrire le programme et ce sera le plus facile. :wink:
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1690
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Dim 31 Jan 2016, 20:59 
sergio11 a écrit:A noter que dans ce qui est demandé c'est l'arrivée d'un train et son arrêt qui déclenche après temporisation le départ de l'autre train...

Il me semble d'ailleurs que cela simplifie la réflexion puisque c'est le train 1lui-même qui initie le processus pour le train 2


Disons que pour un premier exercice, j'ai essayé de simplifier.
Mais par la suite, vous pourrez très bien introduire une table d'horaire pour faire partir vos trains (c'est plus compliqué mais c'est tout à fait envisageable).
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1690
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Dim 31 Jan 2016, 21:37 
bonsoir voila où j'en suis ;bon pas facile avec les petiots à m'occuper dans le W E ,mais je vais m'y remettre toutes les nuits de cette semaine
en parallèle je regarde pour concevoir ne partie électronique pour le hard sur le réseau




Code: Tout sélectionner
         
            //  NOTE
// V1 , V2 pour voie1 et voie2
// AigE , AigS pour aiguille entrée et sortie  Position droite sur V1 Déviée sur V2
// SV1 , SV2 pour signal de v1 et de V2 placés en sortie de gare
 
// sans trains les aiguilles sont droites et les signaux sont au rouge
//un train en V1 et pas de train en V2 met l'aiguille d'entrée en position déviée -> V2
//coupe l'alimentation de V1 et alimente V2
// un train sur V1 et V2 remet les aiguilles  en position droite -> V1 ,coupe l'alimentation de V2 lance une tempo , en fin de tempo le signal de V1 passe au
// vert et on alimente V1 si aiguille de sortie en position V1 confirmée 

int AigE_2Pin = 2;        // commande aiguille d'entrée +5v = V2 / 0v = V1
int AigS_3Pin = 3;        // commande aiguille de sortie +5v = V2 / 0v = V1
int aige_4Pin = 4;        // aiguille d'entrée en V2 = 0v  / en V1 = +5v
int aigs_5Pin = 5;        // aiguille de sortie en V2 = 0v / en V1 = +5v
int SV1_6Pin = 6;         // commande Signal V1    +5v = Rouge / 0v = Vert
int SV2_7Pin = 7;         // commande Signal V2    +5v = Rouge / 0v = Vert
int sv1_8Pin = 8;
int sv2_9Pin = 9;
int RV1_10Pin = 10;       // commande d'alim V1
int RV2_11Pin = 11;       // commande d'alim V2
int tv1_12Pin = 12;       // détection train V1
int tv2_13Pin = 13;       // détection train V2

void setup (){


  pinMode (AigE_2Pin,OUTPUT);                //aiguille entrée , commande
  pinMode (AigS_3Pin,OUTPUT);                //aiguille sortie , commande
  pinMode (aige_4Pin,INPUT_PULLUP);          //aiguille entrée , position
  pinMode (aigs_5Pin,INPUT_PULLUP);          //aiguille sortie , position
  pinMode (SV1_6Pin,OUTPUT);                 //signal V1 , commande
  pinMode (SV2_7Pin,OUTPUT);                 //signal V2 , commande
  pinMode (sv1_8Pin,INPUT_PULLUP);           //signal V1 , état                                           
  pinMode (sv2_9Pin,INPUT_PULLUP);           //signal V2 , état                                                   
  pinMode (RV1_10Pin,OUTPUT);                //relai alim V1
  pinMode (RV2_11Pin,OUTPUT);                //relai alim V2
  pinMode (tv1_12Pin,INPUT_PULLUP);          // présence train V1 , état
  pinMode (tv2_13Pin,INPUT_PULLUP);          // présence train V2 , état
}
void loop (){
   
(digitalRead ( !tv1_12Pin )&& digitalRead (!tv2_13Pin ));  {         // pas de trains
     digitalWrite ( SV1_6Pin, HIGH); // SV1 rouge
     digitalWrite ( SV2_7Pin, HIGH); // SV2 rouge
     digitalWrite ( RV1_10Pin,HIGH); // mise sous tension de V1
  }
(digitalRead ( tv1_12Pin )&& digitalRead ( ! tv2_13Pin ));   {      // train en V1 et pas en V2
     digitalWrite (RV1_10Pin,LOW);
     digitalWrite ( AigE_2Pin,HIGH);

(digitalRead ( tv2_13Pin) && digitalRead (tv1_12Pin));      {      // train en V2 et en V1
     



}

















 
}







































































































dieu existe ! donc je suis
Avatar de l’utilisateur
Dudule
Communicatif
 
Messages: 762
Inscrit le: Lun 23 Juil 2007, 08:37
Localisation: Fourques 30300 France
Âge: 66
Echelle pratiquée: H0
Prénom: Gérard

Re: Démarrer en électronique programmable

Publié: Dim 31 Jan 2016, 22:00 
Il va forcement falloir un détecteur de présence pour savoir dans quel configurations l'arduino va démarrer.
L'initialisation doit être différente en fonction des possibilités:
1 trains sur V1 et V2
1 trains sur V1 ou V2
Aucun train

A moins que l'on arrive à mémoriser la derniere position des trains avant de couper l'arduino ;)
Avatar de l’utilisateur
tgvdu88
Papotier
 
Messages: 178
Inscrit le: Sam 25 Oct 2008, 17:45

Re: Démarrer en électronique programmable

Publié: Dim 31 Jan 2016, 22:35 
Arduino a écrit:Ta solution réclame cependant des tests pour la manœuvre des aiguilles (manœuvre possible que si l'autre voie est libre). C'est un choix et je ne le critique aucunement, mais cela aura une répercussion sur la façon d'écrire le programme.
:wink:


En fait la commande de l'aiguille d'entrée peut de ce fait être complètement indépendante du programme et ne prendre en compte que les détecteurs V1 et V2. L'aiguille est toujours positionnée au moment où un train arrive ou quitte une zone d'arrêt.. vers la voie libre ou immobile si aucune ou les deux sont occupées.. Z1 low && Z2 high Aig à droite.... Z1 High && Z2 low Aig à gauche
Avec deux trains espacés normalement il n'y a aucune autre condition à prendre
Avatar de l’utilisateur
sergio11
Bavard
 
Messages: 59
Inscrit le: Ven 08 Jan 2016, 23:20
Localisation: 11 Ouveillan
Âge: 64
Echelle pratiquée: N
Prénom: Serge

Re: Démarrer en électronique programmable

Publié: Dim 31 Jan 2016, 22:44 
tgvdu88 a écrit:Il va forcement falloir un détecteur de présence pour savoir dans quel configurations l'arduino va démarrer.
L'initialisation doit être différente en fonction des possibilités:
1 trains sur V1 et V2
1 trains sur V1 ou V2
Aucun train

A moins que l'on arrive à mémoriser la derniere position des trains avant de couper l'arduino ;)



Suivant comment on conçoit le système, il faut une information au début pour déclencher le premier évènement...un bouton par exemple

Quant à mémoriser des informations nécessaire au redémarrage on peut le faire dans l'EEPROM du microcontroleur ...mais c'est une manip que nous étudierons peut-être plus tard
Personnellement cette solution m'intéresse pour mémoriser la position de mes servos d'aiguilles car sinon ils retournent tous en position mini, et surtout assez nerveusement pour mes petites aiguilles en N
Avatar de l’utilisateur
sergio11
Bavard
 
Messages: 59
Inscrit le: Ven 08 Jan 2016, 23:20
Localisation: 11 Ouveillan
Âge: 64
Echelle pratiquée: N
Prénom: Serge

Re: Démarrer en électronique programmable

Publié: Dim 31 Jan 2016, 23:53 
Pour faciliter la poursuite de cet intéressant exercice et éviter de s'éparpiller ou de se perdre, on pourrait peut être trancher sur un scénario commun.
Christian, tu peux sans doute nous proposer ta solution ? Nous pourrions alors tous poursuivre en tentant de concevoir une interface ?

D'ailleurs, c'est souvent comme ça à l'école, c'est le prof qui dispose ! :lol:
RGP49
alanya
Papotier
 
Messages: 192
Inscrit le: Jeu 14 Août 2008, 13:33
Localisation: Saumur
Âge: 62
Echelle pratiquée: N, HO et H0e
Prénom: Yves
Club: RGP49

Re: Démarrer en électronique programmable

Publié: Lun 01 Fév 2016, 01:48 
mon scénario
sans prétention
juste pour jeter une idée sur le papier



au départ il n'y a pas de train , les aiguilles sont en position droite --->V1. et seule la voie V1 est sous tension et les deux signaux sont au rouge

donc :premier train sur V1 sa détection coupe l'alim de la voie V1 et positionne l'aiguille d'entrée en V2 et met V2 sous tension

deuxième train sur V2 ,sa détection coupe l'alimentation de V2 et remet l'aiguille d'entrée en V1 , à ce moment là on lance le
cycleDEPART1: aiguille de sortie positionnée sur V1, tempo, signal au vert sur V1 mise sous tension V1 pour départ train N°1,et remise au rouge par libération de la voie
un comptage est effectué pour présence sur V1 il s'incrémente donc de 1.

là on attend l'arrivée d'un autre train sur V1 et sa détection remet le compteur à 0 . ce qui à pour effet de lancer le
cycleDEPART2 :aiguille de sortie positionnée sur V2 ,tempo,signal au vert sur V2 mise sous tension V2 pour départ train N°2, remise au rouge par libération de la voie et retour de l'aiguille de sortie en V1
on attend le prochain train sur voie 1 et tout recommence

note : sans train sur les voies les aiguilles sont automatiquement mises en V1 , les feux sont forcées au rouge et il n'y a que V1 sous tension
dieu existe ! donc je suis
Avatar de l’utilisateur
Dudule
Communicatif
 
Messages: 762
Inscrit le: Lun 23 Juil 2007, 08:37
Localisation: Fourques 30300 France
Âge: 66
Echelle pratiquée: H0
Prénom: Gérard

Re: Démarrer en électronique programmable

Publié: Lun 01 Fév 2016, 10:43 
tgvdu88 a écrit:L'initialisation doit être différente en fonction des possibilités:
1 trains sur V1 et V2
1 trains sur V1 ou V2
Aucun


La première proposition serait le plus logique. "Le jeu" pourrait démarrer les trains en gare, prêt à partir pour une longue journée de labeurs :?
RGP49
alanya
Papotier
 
Messages: 192
Inscrit le: Jeu 14 Août 2008, 13:33
Localisation: Saumur
Âge: 62
Echelle pratiquée: N, HO et H0e
Prénom: Yves
Club: RGP49

Re: Démarrer en électronique programmable

Publié: Lun 01 Fév 2016, 12:11 
alanya a écrit:Pour faciliter la poursuite de cet intéressant exercice et éviter de s'éparpiller ou de se perdre, on pourrait peut être trancher sur un scénario commun.
Christian, tu peux sans doute nous proposer ta solution ? Nous pourrions alors tous poursuivre en tentant de concevoir une interface ?

D'ailleurs, c'est souvent comme ça à l'école, c'est le prof qui dispose ! :lol:


C'est effectivement une bonne idée :idea: :!:
Je vais donc vous proposer ma solution ; cependant, comme Dudule a rejoint le jeu, je m'engage à analyser sa solution et lui dire ce que j'en pense, comme je l'ai fais pour vous trois. 8)


Je rappelle tout de même qu'il n'y a pas qu'une seule solution ; celle que je vous propose n'est qu'une possibilité. Vous verrez qu'elle reprend les points communs des trois solutions proposées :
- temporisation
- répétition des instructions car symétrie voie 1 / voie 2
- un capteur pour assurer la sécurité

Voici donc ce que je vous propose :


L’automatisme qui vous a été proposé peut être monté sur un petit réseau comme un simple ovale avec deux voies sur un côté, ce que propose les coffrets de départ éventuellement complétés par un coffret additionnel comprenant deux aiguilles et quelques coupons de voie.

Un train part de la voie 1, fait le tour du réseau et revient sur la voie 1. Quelques temps plus tard, un train part de la voie 2, fait le tour du réseau et revient sur la voie 2. Ce programme se répète autant qu’on le veut.

Essayons de décomposer cette tâche complexe en tâches élémentaires, comme nous l’avons fait pour changer les roues de notre voiture (voir le chapitre « Initiation à la programmation »). Voyons déjà quelles sont les conditions initiales à réaliser en début de programme.

Conditions initiales

Un train arrêté sur la voie 1, un train arrêté sur la voie 2.
Signal 1 et 2 au rouge
Aiguille B vers voie 1 (le train 1 sort en premier)
Un capteur ILS est positionné en amont de l’aiguille A pour signaler l’arrivée d’un train dans la coulisse.

Image

Voyons maintenant le déroulé du programme, c’est-à-dire l’enchainement de tâches élémentaires. Ce qui est en italique correspond à des commentaires.

On supposera qu’un train met 10 secondes pour quitter sa voie et se retrouver sur le réseau en dehors de la gare ; ce temps est appelé attente 1. On supposera également que le train met 10 secondes pour réintégrer sa voie de stationnement à partir du moment où il passe au-dessus de l’ILS, et que l’autre train part 5 secondes après ce délai. La somme des deux temps, soit 15 secondes, est appelée attente 2. Bien entendu, les valeurs des variables attente 1 et attente 2 sont réglables en fonction des besoins de chacun.

Programme

Mettre signal 1 au vert (ce qui suppose auparavant d’éteindre le rouge sur ce signal)
Alimenter portion d’arrêt voie 1
Le train 1 démarre
Attente 1 que le train 1 soit entièrement sorti
Mettre signal 1 au rouge
Retirer alimentation sur portion d’arrêt voie 1
Aiguille A vers voie 1 (pour le retour du train)
Attendre signal ILS
Au signal ILS, attente 2 (pour que le train 1 soit entièrement rentré sur voie 1 + attente avant que train 2 démarre).
Le train 1 s’arrête sur voie 1
Fin d’attente 2 : mettre signal 2 au vert
Alimenter portion d’arrêt voie 2
Le train 2 démarre
Attente 1 que le train 2 soit entièrement sorti
Mettre signal 2 au rouge
Retirer alimentation sur portion d’arrêt voie 2
Positionner aiguille A vers voie 2
Attendre signal ILS
Au signal ILS, attente 2 (pour que le train 2 soit entièrement rentré sur voie 2 + attente avant que train 1 démarre).
Le train 2 s’arrête sur voie 2
Fin d’attente 2
Revenir au début du programme.

Voyons maintenant quelles ressources sont nécessaires.

Ressources

4 sorties numériques pour les 4 LED des deux signaux
1 entrée numérique pour le capteur ILS
2 sorties numériques pour commander les deux relais 1RT alimentant les portions d’arrêt
2 aiguilles à commander soit 4 bobines, ce qui représente 4 sorties

Au total :
1 entrée et 10 sorties, ce qui est compatible avec un module Uno.

L’automatisme réalisé est ce qu’on appelle un séquenceur : le programme réalise des tâches les unes après les autres, toujours dans le même ordre et avec le même tempo (autre exemple, un feu tricolore de carrefour routier). Il n’y a pas de test pour connaitre des conditions et prendre des décisions. Ce genre de programme est le plus simple à réaliser mais n’est pas toujours possible.

Comme il faut imaginer le pire :evil: , on peut penser que le train arrive sur l’ILS (ce qui démarre le compte à rebours du départ de l’autre train) puis plante sur l’aiguille A ; dans ce cas, l’autre train démarrera et viendra télescoper le train planté. On se rend compte qu’un seul système de sécurité n’est pas suffisant pour garantir à 100% que les trains ne se rencontrent jamais ; il en faut au moins deux, comme dans un avion où tous les équipements sont doublés, voire triplés. Mais si le circuit est équipé de cantons, cela marchera à 100%, car le deuxième train viendra s’arrêter sur le canton précédant celui du train planté :ange3: .

Ma solution ressemble au scénario N°1 d'alanya. Vous pouvez maintenant imaginer les interfaces à réaliser entre réseau et Arduino, puis traduire le scénario en langage Arduino pour l'exécuter. Pour vous donner un peu de temps, demain nous verrons la gestion du temps, puis après-demain, on poursuivra cet exercice.
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1690
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Lun 01 Fév 2016, 12:22 
Dudule a écrit:bonsoir voila où j'en suis ;bon pas facile avec les petiots à m'occuper dans le W E ,mais je vais m'y remettre toutes les nuits de cette semaine
en parallèle je regarde pour concevoir ne partie électronique pour le hard sur le réseau
.....


Pense à dormir tout de même ! :lol:

Bon, tu joins un programme et pour moi, c'est mettre la charrue avant les bœufs. Dans un premier temps, je souhaite avoir ton travail d'analyse, ce que tu as fait un peu plus loin.
Donc je regarde cela et je te dis ce que j'en pense.
En effet, tant que le travail d'analyse n'est pas terminé, rien ne sert de coder car si tu dois faire des modifications, ce sera plus difficile de les retrouver dans du code. Et pour moi, c'est plus difficile de comprendre ton scénario à partir d'un code plutôt qu'à partir d'une description de ce que tu veux faire. Donc, à tout à l'heure :moi:
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1690
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Lun 01 Fév 2016, 13:24 
bonjour Christian
pour ce qui est de la programmation c'est juste des essais pour voir si j'arrive à concrétisé mes idées
bien sûr j'attends avec impatience tes commentaires
dieu existe ! donc je suis
Avatar de l’utilisateur
Dudule
Communicatif
 
Messages: 762
Inscrit le: Lun 23 Juil 2007, 08:37
Localisation: Fourques 30300 France
Âge: 66
Echelle pratiquée: H0
Prénom: Gérard

Re: Démarrer en électronique programmable

Publié: Lun 01 Fév 2016, 13:51 
Dudule a écrit:bonjour Christian
pour ce qui est de la programmation c'est juste des essais pour voir si j'arrive à concrétisé mes idées
bien sûr j'attends avec impatience tes commentaires


Je n'ai pas encore analysé ton programme, mais je viens d'analyser ton cahier des charges. Voici mes commentaires en toute amitié (remarques plutôt que critiques) :wink: :

Tu fais tout un préambule avant de lancer cycleDEPART1, qui me parait bien compliqué; Par exemple "seule voie V1 sous tension avec les deux signaux au rouge"; C'est un peu illogique : si un signal est au rouge, faire en sorte que la voie soit non alimentée.

Ensuite, tu détectes un train sur V1 ce qui coupe l'alimentation sur V1 : le plus simple est de démarrer avec V1 et V2 non alimentées, et signaux au rouge, ce qui crée les conditions de départ, soit aucun train (ils arriveront plus tard), soit deux trains mais arrêtés en attendant leur départ.

Les cyclesDEPART1 (et 2) sont bien décrits.

Je n'ai pas compris l'utilité de ta variable de comptage qui ne passe que par 1 puis 0. Que comptes-tu en faire :?: (Peut-être gérer le côté V1 ou V2 où il faut agir ?)

Je pense donc qu'il faut essayer de simplifier. Par exemple, tes conditions initiales = deux portions d'arrêt non alimentées et deux signaux au rouge. Ensuite, ton cycle de départ et retour me semble bon.

On a souvent tendance à compliquer soi-même un problème ; pourtant, comme nous sommes tous fainéants (moi du moins :lol: ), en simplifiant ce qui peut l'être, on s'économise... :siffle:

Merci pour ta participation ; étudie ma solution (pratiquement ce que proposait alanya). Ensuite tu as deux possibilités, soit tu l'adoptes, soit tu préfères aller jusqu'au bout de ce que tu proposes. Tout est possible et c'est à chacun de décider. :gne:
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1690
Inscrit le: Mer 25 Sep 2013, 17:14

PrécédentSuivant

Retour vers Arduino

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 4 invité(s)