Forums LR PRESSE

Où il est question de trains, petits et grands

  • Advertisement

Inversion automatique de polarité des rails pour pont tourna

Toutes les discussions sur l'Arduino !

Modérateur: MOD

Inversion automatique de polarité des rails pour pont tourna

Publié: Lun 15 Juin 2015, 18:47 
Bonjour

J'ai sur mon réseau alimenté en DCC un pont tournant Fleischmann 6152, manœuvré manuellement avec son bouton rotatif. Je cherche depuis plusieurs années une solution d'inversion automatique de la polarité des rails du pont (les décodeurs spécialisés étant très cher.

Grace à la découverte dans LR de ce que l'on pouvais faire avec un Arduino et surtout aux explications sur la programmation faites de main de maitre dans LR et dans ce forum, je me suis passionné en temps que NUL à apprendre la programmation et à essayer de l'appliquer.

Voici ce que j'ai réussi à faire, pardonnez mon vocabulaire qui est celui d'un nul, mais je pense que vous devriez me comprendre

Installation et branchements:
Mettre 2 modules d'accès Fleischmann côte à côte axés sur la zone d'inversion de polarité des voies d'axés du réseau au pont tournant.

Pour chaque module relier électriquement chaque rail à un pont de diode de telle sorte que lors de la rotation du pont tournant ses 2 rails rentrant en contact avec les 2 rails du module crée une détection en courant digital qui sera transformée en courant continu par son pont de diodes.

Comme il y a 2 modules, il y aura 2 détections qui seront utilisées via leur opto-coupleur sur une seule entrée detec d'Arduino.

L'inversion de polarité sera exécuté mécaniquement par un bistable dont chacun de ses relais d'inversion sera commandé par 2 sorties relais_gauche et relais_droit d'Arduino.

Principe de fonctionnement:
Lors de la rotation du pont, le temps mis pour passer d'une voie d'accès à la suivante est d'environ 1 seconde.
L'inversion de polarité se fait que s'il y à une première détection premiere_detection et qu’après avoir quitté la première détection, la second détection deuxieme_detection se passe dans un délai de 1,5 seconde, si non cela veut dire que le pont est repartie en arrière et l’inversion ne doit pas se faire.

Le programme a été écrit avec mise en mémoire EEPROM pour Arduino uno et pour transfert sur ATtiny85-20UP

Croquis de principe avec Arduino
Image

Croquis de principe avec ATtiny85
Image

Voici le programme :ange:

#include <EEPROM.h>

int detec = 2; /* entrée détecteurs connectés à l'entrée 2 de l'Arduino */
/* (PinMode) 2 correspond à la Pin 7 de l'ATtiny85 */
int relais_gauche = 3; /* la commande relais gauche connectée à l'entrée 3 de l'Arduino */
/* (PinMode) 3 correspond à la Pin 2 de l'ATtiny85 */
int relais_droit = 4; /* la commande relais droit connectée à l'entrée 4 de l'Arduino */
/* (PinMode) 4 correspond à la Pin 3 de l'ATtiny85 */
const byte droite = 0;
const byte gauche = 1;

boolean detection = false; /* aucune détection faite */
boolean premiere_detection = false;
boolean deuxieme_detection = false;
boolean detection_suivante = false;

#define ADR_POS 0
#define POS_relaisDroit 0
#define POS_relaisGauche 1

/*
* la fonction setup() est exécutée une seule fois
*/
void setup() {
pinMode(detec , INPUT);
digitalWrite (detec , HIGH);
pinMode(relais_gauche , OUTPUT);
pinMode(relais_droit , OUTPUT);

/* On initialise la valeur à mettre en mémoire EEPROM si la valeur actuelle est différente de la position POS_relaisDroit ET de la position POS_relaisGauche, alors on écrit POS_relaisDroit par défaut */
if (EEPROM.read (ADR_POS) != POS_relaisDroit && EEPROM.read (ADR_POS) != POS_relaisGauche) {
EEPROM.write (ADR_POS , POS_relaisDroit) ;
}
}

/*
* la fonction loop() est exécutée répétitivement
*/

void loop() {

if (digitalRead (detec) == LOW && detection == false) { /*Le pont occupe une détection*/
premiere_detection = true;
}

if (digitalRead (detec) == HIGH && premiere_detection == true) {
/*Le pont à quitté la détection */
detection_suivante = true; /* chercher la deuxième détection */
}

if (detection_suivante == true) {
/*On contrôle si le pont va occuper la deuxième détection en 1,5 seconde maxi*/
for (int i = 0; i <= 150; i = i + 1) {
delay (10);
if (digitalRead (detec) == LOW) { /*le pont occupe la deuxième détection */
deuxieme_detection = true;
detection = true;
detection_suivante = false;
}
}
if(deuxieme_detection == false) { /* le pont n’est pas passé sur la deuxième détection */
premiere_detection = false;
detection_suivante = false;
}
}

if (detection == true) {
/* on inverse la polarité des rails du pont */
detection = false;
premiere_detection = false;
deuxieme_detection = false;
if (EEPROM.read (ADR_POS) == POS_relaisDroit) {
digitalWrite (relais_droit , LOW);
digitalWrite (relais_gauche , HIGH);
EEPROM.write (ADR_POS , POS_relaisGauche);
}
else {
digitalWrite (relais_gauche , LOW);
digitalWrite (relais_droit , HIGH);
EEPROM.write (ADR_POS , POS_relaisDroit);
}
}

}


Lors de la première mise en route si les polarités ne sont pas correctes, couper le courant, faire passer manuellement le pont dans la zone après les contacts et remettre le courant.

Sur mon réseau ça marche. :lol: :lol: :lol: ouf

A bientôt

Pierrot
Pierrot
 
Messages: 31
Inscrit le: Mer 30 Août 2006, 19:36
Localisation: AUBAGNE 13400
Âge: 79
Echelle pratiquée: H0

Re: Inversion automatique de polarité des rails pour pont to

Publié: Lun 15 Juin 2015, 19:26 
Je viens de voir que j'avais fait une erreur dans le croquis avec Arduino pour les points de branchement à ce dernier. Voici le croquis modifié.

Image

Toutes mes excuses :moi:

Pierrot
Pierrot
 
Messages: 31
Inscrit le: Mer 30 Août 2006, 19:36
Localisation: AUBAGNE 13400
Âge: 79
Echelle pratiquée: H0

Re: Inversion automatique de polarité des rails pour pont to

Publié: Lun 15 Juin 2015, 19:52 
Pas mal, :applause:
Cordialement,

Christian.
Avatar de l’utilisateur
likiki
Causant
 
Messages: 252
Inscrit le: Dim 29 Avr 2012, 15:21
Localisation: Corbeil Essonne
Âge: 50
Echelle pratiquée: N
Prénom: Christian

Re: Inversion automatique de polarité des rails pour pont to

Publié: Dim 30 Avr 2017, 08:59 
Pourqoui ne pas faire une distinction entre les 2 détecteurs?

Je ne comprends pas bien ce que tu utilises comme détecteur; je vois que c'est une détection de présence de voltage DCC mais je manque quelque chose. Peux-tu décrire le détecteur svp?

Aussi: pourquoi ne pas utiliser une détection photocell?

PS: tu as 79 ans?? Salutations!!
Avatar de l’utilisateur
Erik84750
 
Messages: 14
Inscrit le: Mer 26 Avr 2017, 06:37
Localisation: Gand
Âge: 56
Echelle pratiquée: HO.usa
Prénom: Erik


Retour vers Arduino

Qui est en ligne ?

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