Forums LR PRESSE

Où il est question de trains, petits et grands

  • Advertisement

Gestion d'un PN double voie

Toutes les discussions sur l'Arduino !

Modérateur: MOD

Gestion d'un PN double voie

Publié: Dim 02 Août 2015, 12:47 
CdC : Circulations dans les deux sens, avec abaissement des barrières si présence sur l’une ou l’autre des deux voies et bien évidement des deux simultanément, le relevage ne devant intervenir qu’après passage complet des convois sur les deux voies.
Afin de trouver la logique, j’ai effectué une simulation avec une mini application sous Delphi (code en Pascal).
Il me reste donc à indentifier les outils pour détecter et transmettre l’information des occupations de voies et transmettre les ordres de mouvement.
Sachant que j’envisage la commande de barrières oscillantes par le biais de servomoteurs (avec si possible la simulation du "rebond"), je pense qu’Arduino, associé à une solution de détection par rétro signalisation, pourrait apporter la solution.
Qu’elles interfaces (au sens large) dois-je mettre en œuvre pour répondre à la définition du besoin ?
Etat des lieux : Projet de réseau actuellement au bureau d’étude, un peu de matériel roulant acquis et un peu de matériel en commande. Pour tout le reste et en particulier le choix des outils "numériques" rien n’est arrêté.
Un peu d’aide et de conseils me serait précieux.
Je précise également qu’après avoir sévi pendant quelques décennies dans l’informatique (essentiellemen mainframes) je n’y touche pratiquement plus depuis une petite dizaine d’années ; c’est peut-être comme le vélo mais j’ai la compréhension des algorithmes qui tourne au ralenti.
R8G for ever
Avatar de l’utilisateur
Stratus
Démonstratif
 
Messages: 1454
Inscrit le: Ven 28 Nov 2008, 13:20
Localisation: Yonne
Âge: 69
Echelle pratiquée: O Epoque III
Club: CDZ

Re: Gestion d'un PN double voie

Publié: Dim 02 Août 2015, 13:00 
il te faut un détecteur a l'entré et a la sortie de chaque voies.

Le reste est des plus simple.

:siffle:
Cordialement,

Christian.
Avatar de l’utilisateur
likiki
Causant
 
Messages: 257
Inscrit le: Dim 29 Avr 2012, 14:21
Localisation: Corbeil Essonne
Âge: 50
Echelle pratiquée: H0 3R
Prénom: Christian

Re: Gestion d'un PN double voie

Publié: Dim 02 Août 2015, 15:31 
likiki a écrit:il te faut un détecteur a l'entré et a la sortie de chaque voies.

Le reste est des plus simple.

:siffle:

Sans doute ...
R8G for ever
Avatar de l’utilisateur
Stratus
Démonstratif
 
Messages: 1454
Inscrit le: Ven 28 Nov 2008, 13:20
Localisation: Yonne
Âge: 69
Echelle pratiquée: O Epoque III
Club: CDZ

Re: Gestion d'un PN double voie

Publié: Dim 02 Août 2015, 17:18 
Pour ce qui est de la motorisation, pas de souci on peut tout faire y compris la gestion de ce rebond. Je t'invite à aller voir le blog de Jean Luc, il avait d'ailleurs consacré un post sur l'utilisation du servo-moteur avec toutes les sortes de mouvements.

Pour ce qui est de la détection, effectivement il faut 2 détecteurs sur chaque voie : 1 à l'entrée et l'autre à la sortie.
Donc 4 au total.

La détection en elle-même peut faire appel à plusieurs méthodes :
* mesure par ultrason mais les modules sont voyants
* détection par courant mais elle est peu accessible pour les nouveaux et sujets aux coupures des voies
* le mieux est les ILS qui agissent comme des boutons poussoirs quand un aimant passe à proximité, le pb est d'équiper les voitures avec un aimant.

Voila quelques idées
Guillaume22
Papotier
 
Messages: 145
Inscrit le: Dim 29 Sep 2013, 08:20

Re: Gestion d'un PN double voie

Publié: Lun 03 Août 2015, 10:28 
Joli projet. Pour la détection, on peut même ajouter l'infra rouge, simple, peu chère et utilisable si on est pas dans une ambiance trop lumineuse. On a aussi le modèle de luxe avec une caméra qui fixe le PN, et une analyse assez grossière des pixels devant et derrière le PN...
Avatar de l’utilisateur
Trusty
Bavard
 
Messages: 63
Inscrit le: Lun 03 Déc 2012, 11:04
Localisation: Melun
Âge: 55
Echelle pratiquée: N
Prénom: Thierry

Re: Gestion d'un PN double voie

Publié: Lun 03 Août 2015, 13:22 
L'idée de la caméra est intéressante mais réclame un traitement plus sophistiqué. Suivant le champ observé, on voit les trains arriver de plus ou moins loin. Il suffit de faire la soustraction de deux images consécutives pixel per pixel et si on trouve zéro, c'est que les deux images sont identiques donc pas de train. Sinon, un train est détecté. Mais ce n'est pas simple pour un débutant et je ne connais pas le niveau de stratus.
Je dirais plutôt que le mieux est de considérer deux cantons, un dans chaque sens et le PN se situant à la fin de chaque canton. Dès que le canton est occupé, le PN se ferme et quand il est libéré, le PN se rouvre. En effet, dans la réalité, le PN se ferme bien avant l'arrivée du train et se rouvre juste après son passage. Voilà pourquoi le PN doit se trouver à la fin de chacun des cantons. On peut utiliser un détecteur d'occupation classique par consommation de courant. Ce signal est ensuite traité par Arduino. Si tous les essieux sont graphités, cela fonctionnera. On peut aussi commander les feux rouges clignotants et imiter le bruit de la cloche. Mais je conseille de ne pas vouloir tout faire en même temps.
Le rebond peut tout à fait être simulé par le servo.
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1634
Inscrit le: Mer 25 Sep 2013, 16:14

Re: Gestion d'un PN double voie

Publié: Mar 04 Août 2015, 13:47 
Arduino a écrit:… et je ne connais pas le niveau de stratus.

Moi non, plus d’ailleurs :oops:
En fait je ne sais pas comment ont évolué les langages de programmation depuis que je m’en suis éloigné. Cobol puis Pascal furent mes deux mamelles de création, un peu bidouiller d’assembleur et de C (très peu, juste quelques fonctions "pompées" et remodifiées) ; de plus quand je me remets à Delphi, que j’ai aussi un peu pratiqué en fin de carrière, je me rends bien compte que les réflexes intellectuels ne sont plus là et les petites bidouilles que je ponds pour dépanner l’association ne sont pas sans comporter de petits bugs que j'ai, parfois, un peu de mal à résoudre.


Arduino a écrit:Je dirais plutôt que le mieux est de considérer deux cantons, un dans chaque sens et le PN se situant à la fin de chaque canton. Dès que le canton est occupé, le PN se ferme et quand il est libéré, le PN se rouvre. En effet, dans la réalité, le PN se ferme bien avant l'arrivée du train et se rouvre juste après son passage. Voilà pourquoi le PN doit se trouver à la fin de chacun des cantons. On peut utiliser un détecteur d'occupation classique par consommation de courant. Ce signal est ensuite traité par Arduino. Si tous les essieux sont graphités, cela fonctionnera. On peut aussi commander les feux rouges clignotants et imiter le bruit de la cloche. Mais je conseille de ne pas vouloir tout faire en même temps.
Le rebond peut tout à fait être simulé par le servo.


Toutes ces descriptions et propositions vont bien dans le sens de ce que j’imaginais, y compris la rermarque sur l’environnement sonore et lumineux que je n’envisagerai, peut être, mais que bien plus tard, si…
R8G for ever
Avatar de l’utilisateur
Stratus
Démonstratif
 
Messages: 1454
Inscrit le: Ven 28 Nov 2008, 13:20
Localisation: Yonne
Âge: 69
Echelle pratiquée: O Epoque III
Club: CDZ

Re: Gestion d'un PN double voie

Publié: Mar 04 Août 2015, 16:13 
Bonjour Stratus,

Je pense effectivement que les cantons avec signal d'occupation est ce qui sera le plus simple. Si tu arrives à réaliser cela, il te sera facile de compléter ensuite ton montage pour avoir les feux de PN et la sonnerie...

Arduino possède un langage qui est facile à assimiler car il n'y a que quelques ordres à connaitre. Ensuite, il existe des bibliothèques permettant de commander des accessoires. Parmi celles-ci, la bibliothèque Servo qui commande des servo-moteurs. Je te conseille de lire les écrits de jlb concernant l'utilisation de cette bibliothèque et tu verras que ce n'est pas compliqué.

Si tu débutes en Arduino, commence par te familiariser avec des programmes très simples. Pour cela, il te suffit d'un Arduino, d'un câble USB et d'un ordinateur que tu as déjà puisque tu es sur ce forum. Ensuite, c'est en forgeant qu'on devient forgeron... Que puis-je dire de plus ? :wink:
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1634
Inscrit le: Mer 25 Sep 2013, 16:14

Re: Gestion d'un PN double voie

Publié: Sam 28 Nov 2015, 13:25 
Je vous laisse prendre connaissance du petit programme que j'ai rédigé et qui me permet de controler les feux d'un "passage à niveau double sens".



/*---PASSAGE A NIVEAU------

---|------//------|---<<<<
ilsC ilsD

---|------//------|--->>>>
ilsA ilsB


**************************
*/
const int feuclignotPin = 8;

const int ilsAPin = 3;
const int ilsBPin = 4;
const int ilsCPin = 5;
const int ilsDPin = 6;

int ilsAState = 0;
int ilsBState = 0;
int ilsCState = 0;
int ilsDState = 0;

int monCompteur = 0;

void setup() {

pinMode(feuclignotPin, OUTPUT);
pinMode(ilsAState, INPUT);
pinMode(ilsBState, INPUT);
pinMode(ilsCState, INPUT);
pinMode(ilsDState, INPUT);
}

void loop() {
ilsAState = digitalRead(ilsAPin);
ilsBState = digitalRead(ilsBPin);
ilsCState = digitalRead(ilsCPin);
ilsDState = digitalRead(ilsDPin);

delay(100);

if (ilsAState == HIGH)
{
monCompteur = monCompteur + 1;
}
else
{
monCompteur = monCompteur;
delay(100);
}
if (ilsBState == 1)
{
monCompteur = monCompteur - 1;
}
else
{
monCompteur = monCompteur;
delay(100);
}
if (ilsDState == HIGH)
{
monCompteur = monCompteur + 1;
}
else
{
monCompteur = (monCompteur);
delay(100);
}
if (ilsCState == HIGH)
{
monCompteur = monCompteur - 1;
}
else
{
monCompteur = (monCompteur);
delay(100);
}
if (monCompteur > 0)
{
digitalWrite(8, HIGH);
}
else
{
digitalWrite(8, LOW);
}
}




Ci-dessous lien vers l'image de ma plaque d'essai.

http://www.Utilisez "ajouter une image".com/i/151128125456217670.png.html][img]


Merci de vos éventuels commantaires.
TRAINTRAIN89
 
Messages: 6
Inscrit le: Ven 27 Nov 2015, 20:00
Echelle pratiquée: N
Prénom: PHILIPPE

Re: Gestion d'un PN double voie

Publié: Sam 28 Nov 2015, 17:05 
Désolé pour le lien !
Voici l'image.



Image
TRAINTRAIN89
 
Messages: 6
Inscrit le: Ven 27 Nov 2015, 20:00
Echelle pratiquée: N
Prénom: PHILIPPE

Re: Gestion d'un PN double voie

Publié: Dim 29 Nov 2015, 13:25 
TRAINTRAIN89 a écrit:Je vous laisse prendre connaissance du petit programme que j'ai rédigé et qui me permet de controler les feux d'un "passage à niveau double sens".

Merci pour cette participation.
Mon projet est, non pas la commande de feux mais, avant tout, la manœuvre (la plus fidèle possible) de deux barrières oscillantes ; à la quelle pourrait, éventuellement, s'ajouter la commande de feux rouges clignotants voire le déclenchement d'une sonnerie enregistrée sur un MP3.
Je suis conscient que ce projet est très ambitieux et je compte m'atteler prochainement à la rédaction d'un CdC à soumettre à quelques unes de mes connaissances susceptibles de maîtriser les compétences nécessaires.
R8G for ever
Avatar de l’utilisateur
Stratus
Démonstratif
 
Messages: 1454
Inscrit le: Ven 28 Nov 2008, 13:20
Localisation: Yonne
Âge: 69
Echelle pratiquée: O Epoque III
Club: CDZ

Re: Gestion d'un PN double voie

Publié: Dim 29 Nov 2015, 16:50 
En plus de la LED, vous pouvez, en complètant le programme, commander 2 servomoteurs ou 2 moteurs pas à pas.
(Voir divers Tuto sur le Net.)
Bonne soirée à vous.
TRAINTRAIN89
 
Messages: 6
Inscrit le: Ven 27 Nov 2015, 20:00
Echelle pratiquée: N
Prénom: PHILIPPE

Re: Gestion d'un PN double voie

Publié: Dim 29 Nov 2015, 19:54 
TRAINTRAIN89 a écrit:Je vous laisse prendre connaissance du petit programme que j'ai rédigé et qui me permet de controler les feux d'un "passage à niveau double sens".



/*---PASSAGE A NIVEAU------

---|------//------|---<<<<
ilsC ilsD

---|------//------|--->>>>
ilsA ilsB


**************************
*/
const int feuclignotPin = 8;

const int ilsAPin = 3;
const int ilsBPin = 4;
const int ilsCPin = 5;
const int ilsDPin = 6;

int ilsAState = 0;
int ilsBState = 0;
int ilsCState = 0;
int ilsDState = 0;

int monCompteur = 0;

void setup() {

pinMode(feuclignotPin, OUTPUT);
pinMode(ilsAState, INPUT);
pinMode(ilsBState, INPUT);
pinMode(ilsCState, INPUT);
pinMode(ilsDState, INPUT);
}

void loop() {
ilsAState = digitalRead(ilsAPin);
ilsBState = digitalRead(ilsBPin);
ilsCState = digitalRead(ilsCPin);
ilsDState = digitalRead(ilsDPin);

delay(100);

if (ilsAState == HIGH)
{
monCompteur = monCompteur + 1;
}
else
{
monCompteur = monCompteur;
delay(100);
}
if (ilsBState == 1)
{
monCompteur = monCompteur - 1;
}
else
{
monCompteur = monCompteur;
delay(100);
}
if (ilsDState == HIGH)
{
monCompteur = monCompteur + 1;
}
else
{
monCompteur = (monCompteur);
delay(100);
}
if (ilsCState == HIGH)
{
monCompteur = monCompteur - 1;
}
else
{
monCompteur = (monCompteur);
delay(100);
}
if (monCompteur > 0)
{
digitalWrite(8, HIGH);
}
else
{
digitalWrite(8, LOW);
}
}




Ci-dessous lien vers l'image de ma plaque d'essai.

http://www.Utilisez "ajouter une image".com/i/151128125456217670.png.html][img]


Merci de vos éventuels commantaires.


Si je puis me permettre sur ce programme. Quelques lignes sont inutiles : la plupart des différentes instructions else. valeur = valeur ; est une surcharge au programme, réassigner la même valeur ;). D'ailleurs seul le if est indispensable dans cette condition. Et on peut écrire un if sans else mais pas le contraire. Par exemple si on souhaite qu'un compteur revienne à 0 après 4
compteur++;
if (compteur>=5) compteur=0;

Les delay empêche un pooling correct, des appuis sur un bp peuvent être non pris en compte. Les interruptions évitent ce problème.

Commander plusieurs moteurs et servo et del oui mais pas les alimenter attention...

Bonne soirée
Guillaume22
Papotier
 
Messages: 145
Inscrit le: Dim 29 Sep 2013, 08:20

Re: Gestion d'un PN double voie

Publié: Lun 30 Nov 2015, 11:37 
Merci pour ces remarques dont je vais, de ce pas, tenir compte (je suis néophyte en matière d’Arduino).
En ce qui concerne les "delay", je pensai ainsi neutraliser l'effet de rebond?

Merci encore de vos conseils.
TRAINTRAIN89
 
Messages: 6
Inscrit le: Ven 27 Nov 2015, 20:00
Echelle pratiquée: N
Prénom: PHILIPPE

Re: Gestion d'un PN double voie

Publié: Lun 30 Nov 2015, 11:54 
Pour éviter le rebond :
lecture du bp
temps attente (20ms) un peu près
et relecture du bp pour savoir si le bp s'est bien enclenché
Guillaume22
Papotier
 
Messages: 145
Inscrit le: Dim 29 Sep 2013, 08:20

Suivant

Retour vers Arduino

Qui est en ligne ?

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