|
| PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement | |
|
+6corwin92 Dodesir F.GODEFERT nordouest patniste GrandCharles 10 participants | |
Auteur | Message |
---|
Jeanmi67 Membre
Age : 71 Localisation : Antibes Nombre de messages : 275 Date d'inscription : 12/09/2010
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement Dim 22 Juil 2018 - 19:11 | |
| - nordouest a écrit:
- Sur une boucle de retournement oui, là ce n'en est pas une. C'est un OS de chien,(un cercle aplati). Une boucle c'est quand on rentre sur une partie duréseau au même endroit d'où lon en est sorti via une aiguille.
C'est là qu'est l'os, hélas... Si nordouest veut bien se donner la peine de relire le premier post de GrandCharles (15/07/2018 - 0:35) : - GrandCharles a écrit:
- Il s'agit d'une gestion de deux boucles de retournement. Pratique pour le cas d'un réseau de type "Os de chien" avec des aiguillages en travers !
Donc en reprenant le schéma "Os de chien en voie simple" et que l'on y rajoute quatre aiguilles, comme dans le schéma montré dans le même post de GrandCharles, on voit assez clairement que cela génère deux boucles de retournement quand un train parcourt les itinéraires matérialisés en rouge ci-dessous. Jean-Michel |
| | | nordouest Membre banni
Age : 103 Localisation : fort myers 27400 Nombre de messages : 388 Date d'inscription : 27/03/2018
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement Dim 22 Juil 2018 - 19:24 | |
| Sauf si tu isoles entre tes aiguilles qui, en fait , ne servent pas à grand chose. Comme on faisait avant et qui est en principe la règle. Ce qui était bien plus simple et moins source de panne! |
| | | GrandCharles Membre
Age : 46 Localisation : 54700 PONT-A-MOUSSON Nombre de messages : 1972 Date d'inscription : 29/12/2016
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement Dim 22 Juil 2018 - 19:35 | |
| Mais si les aiguilles sont alimentées quand même, il y aura un court circuit au moment du passage de la locomotive.
Charles |
| | | corwin92 Membre
Age : 51 Localisation : 78 Nombre de messages : 1809 Date d'inscription : 21/08/2007
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement Dim 22 Juil 2018 - 20:04 | |
| - GrandCharles a écrit:
- Mais si les aiguilles sont alimentées quand même, il y aura un court circuit au moment du passage de la locomotive.
Charles C'est bien cela que nordouest ne semble pas vouloir comprendre. |
| | | Jeanmi67 Membre
Age : 71 Localisation : Antibes Nombre de messages : 275 Date d'inscription : 12/09/2010
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement Dim 22 Juil 2018 - 20:21 | |
| Je ne sais pas s'il ne veut pas comprendre, mais il pourrait nous expliquer ce qu'il sous-entend avec cette phrase : - nordouest a écrit:
- ...tes aiguilles qui, en fait , ne servent pas à grand chose....
Jean-Michel |
| | | Dodesir Membre
Age : 81 Localisation : 78350 Jouy en Josas Nombre de messages : 2408 Date d'inscription : 20/11/2007
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement Dim 22 Juil 2018 - 21:07 | |
| - nordouest a écrit:
- Sauf si tu isoles entre tes aiguilles qui, en fait , ne servent pas à grand chose. Comme on faisait avant et qui est en principe la règle. Ce qui était bien plus simple et moins source de panne!
C'est effectivement les aiguillages qui compliquent le système mais GrandCharles a bien le droit de les juger utile, voire nécessaire... |
| | | GrandCharles Membre
Age : 46 Localisation : 54700 PONT-A-MOUSSON Nombre de messages : 1972 Date d'inscription : 29/12/2016
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement Jeu 2 Aoû 2018 - 21:56 | |
| - GrandCharles a écrit:
- barbadidoua a écrit:
- Bonsoir,
Pour faciliter la compréhension du code, je me suis autorisé à le modifier comme suit : - Code:
-
/* *********************************************************************** ** Programme ARDUINO pour deux boucles de retournement à l'aide de ** ** détecteurs infrarouge ** *********************************************************************** */
// L'utilisation de #define permet de definir un mnemonique qui sera remplacé par sa valeur à la compilation // Cela permet de minimiser le nombre de variable non utilisées #define LED 13 // Definit la led interne #define Relais1 9 // définit la broche du relais 1 #define Relais2 10 // définit la broche du relais 2 #define Relais3 11 // définit la broche du relais 3 #define Relais4 12 // définit la broche du relais 4
#define Occupation1 3 // définit la broche de l'interface IR 1 #define Occupation2 4 // définit la broche de l'interface IR 2 #define Occupation3 5 // définit la broche de l'interface IR 3 #define Occupation4 6 // définit la broche de l'interface IR 4
// On definit des variables si leur valeur évolue lors de l'execution du programme. int IR1 ; // définit la variable de lecture de l'état de l'interface IR 1 int IR2 ; // définit la variable de lecture de l'état de l'interface IR 2 int IR3 ; // définit la variable de lecture de l'état de l'interface IR 3 int IR4 ; // définit la variable de lecture de l'état de l'interface IR 4
unsigned long tempoBoucle1; unsigned long tempoBoucle2;
#define antirebond 500 // permet d'eviter les rebonds dus au materiel (en ms)
// ============================================ // Initialisations // ============================================ void setup (){ Serial.begin(9600); while(!Serial); // Initialisation des Capteurs IR pinMode(Occupation1,INPUT_PULLUP); pinMode(Occupation2,INPUT_PULLUP); pinMode(Occupation3,INPUT_PULLUP); pinMode(Occupation4,INPUT_PULLUP); // Initialisation de la LED en sortie pinMode (LED, OUTPUT) ; // Initialisation des Relais pinMode (Relais1, OUTPUT); // initialise la broche en sortie 9 pinMode (Relais2, OUTPUT); // initialise la broche en sortie 10 pinMode (Relais3, OUTPUT); // initialise la broche en sortie 11 pinMode (Relais4, OUTPUT); // initialise la broche en sortie 12 Serial.begin(9600); // Permet d'utiliser le Monitor pour comprendre ce qui se passe (debug) }
// ============================================ // Gestion Boucle : // Teste les 2 capteurs d'occupations de la boucle // et positionne les relais correspondant // L'utilisation du else if permet de voir tous les cas possibles. // ============================================ void Gest_inversion(int Ir1, int Ir2, int R1, int R2, long tempoBoucle) {
if ((Ir1 == LOW) || (Ir2 == LOW)) // Un train est detecté en entrée de la boucle (au moins une occupations)=> on ferme les relais { Serial.println("Un train est detecte en entrée de la boucle"); digitalWrite (R1, LOW); // ferme le relais 1 digitalWrite (R2, LOW); // ferme le relais 2 tempoBoucle1=millis(); // Remise a zero de la temporisation de la boucle } else if ((Ir1 == HIGH) && (Ir2 == HIGH) && (millis()-tempoBoucle> antirebond)) // Passé le delais antirebond, il n'y a plus de train face aux 2 capteurs => on ouvre les relais { Serial.println("Passe le delais antirebond, il n'y a plus de train face aux 2 capteurs"); digitalWrite (R1, HIGH); // ouvre le relais 1 digitalWrite (R2, HIGH); // ouvre le relais 2 } else if (Ir1 == HIGH) { Serial.println(String(Ir1) + " est encore occupe"); } else if (Ir2 == HIGH) { Serial.println(String(Ir2) + " est encore occupe"); } else { Serial.println("Le delais n'est pas encore passe"); } }
// ============================================ // boucle // ============================================ void loop (){
// lecture et memorisation des occupations IR1 = digitalRead (Occupation1) ; // lit la valeur de l'état de l'interface IR 1 et la mémorise dans la variable IR2 = digitalRead (Occupation2) ; // lit la valeur de l'état de l'interface IR 2 et la mémorise dans la variable IR3 = digitalRead (Occupation3) ; // lit la valeur de l'état de l'interface IR 3 et la mémorise dans la variable IR4 = digitalRead (Occupation4) ; // lit la valeur de l'état de l'interface IR 4 et la mémorise dans la variable
delay(antirebond); // antirebond pour la detection // Les sous programmes permettent une meilleur comprehension du code. Gest_inversion(IR1, IR2, Relais1, Relais2, tempoBoucle1); Gest_inversion(IR3, IR4, Relais3, Relais4, tempoBoucle2);
// mise a jour de la led if ((IR3 == HIGH) && (IR4 == HIGH) && (IR1 == HIGH) && (IR2 == HIGH)) digitalWrite (LED , LOW); // éteint la led si aucune occupation else digitalWrite (LED, HIGH); // allume la led si au moins une occupation } (j'ai compilé mai pas testé, faute de matériel) A priori : - Les capteurs d'occupation donnent un 0 quand un train est en face. - Les relais sont fermés à l'état bas.
J'espère avoir éclairé votre lanterne en évitant le paracétamol .
Amicalement, Xavier Merci beaucoup !
Je vais tester ton code dès que je rentre de vacances. J'y ai déjà corrigé une petite erreur d'inattention. En tout cas, il est vraiment bien expliqué. Merci encore !
Charles Salut à toi ! Je viens de tester ton code et il fonctionne mais... (parce qu'il y a un "mais", désolé...) il y a trop de temps entre le moment où le détecteur détecte une présence et le moment où le relais bascule. Par conséquent, le trais arrive sur le court-circuit avant que le relais bascule. Aurais-tu une idée . Charles |
| | | barbadidoua membre s'en étant allé
Age : 65 Localisation : Challes les eaux / Chambéry Nombre de messages : 202 Date d'inscription : 03/01/2008
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement Jeu 2 Aoû 2018 - 22:21 | |
| Bonsoir,
Tu peux diminuer la valeur de antirebond: #define antirebond 500 // permet d'eviter les rebonds dus au materiel (en ms)
En la passant a 50, cela devrait être suffisant. Si cela ne fonctionne pas, une autre solution serait de relire lR1 et IR2 temps que 5 lectures successives identiques ne sont pas observées. Cela est à mon avis un meilleur anti-rebond, qui de plus n'introduit pratiquement aucun retard (contrairement au delay)
Si tu le souhaites, je pourrai regarder la modification, mais je suis en plein démarrage d'un projet au travail, et ne serai pas disponible avant la fin du mois.
Amicalement,
|
| | | GrandCharles Membre
Age : 46 Localisation : 54700 PONT-A-MOUSSON Nombre de messages : 1972 Date d'inscription : 29/12/2016
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement Jeu 2 Aoû 2018 - 22:30 | |
| Merci encore, je vais regarder ça. Je t'avoue que la première solution est la plus simple à tester. Je ne suis pas encore assez fort pour comprendre que faire pour effectuer la seconde. Même en fin de mois, je serais ravi de voir comprendre comme tu réalises ça. Ca sera avec plaisir, d'autant que tes commentaires sont explicites dans le code. Par contre, il y a deux fois : - Code:
-
Serial.begin(9600); J'imagine qu'il y en a un de trop, non ? Charles EDIT : A 50, c'est déclenche plus vite, mais ça se désactive aussi plus vit. Je voudrais que lorsqu'il y a une détection même très brève, le relais s'active tout de suite et se désactive 500ms après. Par contre, qu'il reste activé tant qu'il détecte. C'est pour évite qu'il claque deux fois s'il détecte 2 "parties" de la même locomotives en mois de 500ms. Je ne sais pas si c'est clair... Charles |
| | | barbadidoua membre s'en étant allé
Age : 65 Localisation : Challes les eaux / Chambéry Nombre de messages : 202 Date d'inscription : 03/01/2008
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement Ven 3 Aoû 2018 - 18:41 | |
| Bonsoir, Effectivement le second n'est pas nécessaire (sauf pour voir si tu suis ) Pour l'obliger les relais à rester fermés 500 ms tu peux modifier Gest_inversion comme suit: delay(500); // temporisation de 500ms a l'occupation tempoBoucle1=millis(); // Remise a zero de la temporisation de la boucle Je supprimerais aussi dans Loop: delay(antirebond); // antirebond pour la detection Ainsi, la mise à jour des occupations se fait plus souvent (plus de delay systématique) mais le programme est bloqué antirebond ms dès qu'une occupation est détectée. A vérifier ... Amicalement, Xavier |
| | | GrandCharles Membre
Age : 46 Localisation : 54700 PONT-A-MOUSSON Nombre de messages : 1972 Date d'inscription : 29/12/2016
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement Sam 4 Aoû 2018 - 17:41 | |
| Salut !
Je viens d'essayer avec ces nouveaux paramètres et le déclenchement est toujours légèrement en retard... Je crois que je vais lui remettre mon code pour voir s'il y a une réelle différence.
Charles |
| | | Contenu sponsorisé
| Sujet: Re: PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement | |
| |
| | | | PAS CHER : 4 détecteurs IR, 4 relais, 1 Arduino : 2 boucles de retournement | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |