Nouvelles:

25/06/2023 : Mise à jour du forum. En cas de bug, merci de contacter le Grand Sachem

Menu principal

Rail de commande

Démarré par loco45, 14 Février 2015 à 16:24:12

« précédent - suivant »

0 Membres et 1 Invité sur ce sujet

Ph Blondé

Philippe Blondé
Un 59 dans le 22

Ph Blondé

En numérique.

Pour un décodeur LENZ qui peut utiliser la technique ABC :
CV51 = 3 (distance de freinage constante  + ABC) et CV 52 à régler pour préciser la longueur de cette distance constante ; j'ai mis pour essai CV52 = 8.

Sinon, avec le même montage et le même type de décodeur on peut faire faire un effet de navette. L'engin redémarre dans l'autre sens après un temps d'arrêt à définir. Dans ce cas :
CV51 = 10 (distance de freinage constante + ABC + navette sans arrêt intermédiaire), CV 52 à régler comme précédemment et CV54 à régler pour le temps d'arrêt ; ce CV52 peut prendre une valeur comprise entre 0 et 255 ce qui correspond à un choix entre 0 à 255 secondes.

Je prépare actuellement une navette pour voie unique avec un aiguillage à chaque extrémité pour trois autorails. Ceci pour remplacer mon ancienne version en courant haché (enfin, en tension hachée pour les puristes  :)) :)))

L'assemblage de diodes est en fait le BM1 de chez LENZ ; leur référence est FR2B chez LENZ, c'est de la diode rapide ; la BY299 convient parfaitement.
Pourquoi "rapide"? Parce que nous sommes sur des fréquences élevées dans la transmission des "signaux numériques". Avec des diodes du type 1N4007 cela fonctionne mais...

Philippe
Philippe Blondé
Un 59 dans le 22

loco45

Super ! merci pour les dessins et de l'info.  :D
@+Christian

Pierre de Vannes

Et je ne lis ça que maintenant!!!
Merci Philippe pour ces schémas, c'est exactement ce qu'il me fallait pour un projet de diorama en aller-retour.
Une envie de faire tourner à minima quelques matériels sur peu de place...une étagère par exemple. Après il va falloir que je vois où je l'installe ::)
La mer, un train, le bonheur...
http://boutique.maquettecreation.fr/ accessoires de décor du N au I

Ph Blondé

Citation de: Pierre de Vannes le 01 Mars 2015 à 16:23:36
Et je ne lis ça que maintenant!!!
Merci Philippe pour ces schémas, c'est exactement ce qu'il me fallait pour un projet de diorama en aller-retour.
Une envie de faire tourner à minima quelques matériels sur peu de place...une étagère par exemple. Après il va falloir que je vois où je l'installe ::)
Bonjour Pierre,
C'est OK pour les décodeurs qui ont la possibilité de l'ABC. J'utilise des sylver 10331.
Pour le BM1 rien de plus facile  ;) ;)
Philippe
Philippe Blondé
Un 59 dans le 22

Pierre de Vannes

OK pour le moment je n'ai absolument rien à part une "vieille" centrale Lenz Compact qui me va parfaitement et des décodeurs lenz, viessmann et Esu.
Il va falloir que je regarde pour la compatibilité ABC car mes vieux Lenz datent de ....2004?
La mer, un train, le bonheur...
http://boutique.maquettecreation.fr/ accessoires de décor du N au I

loco45

Bonjour,
Puis-je me servir de ces schémas en analogique pour un va et vient ou y a t-il une modif à faire ?
@+Christian

Ph Blondé

Bonsoir Christian,
Avec le BM1 hélas non, ce n'est pas valable en "analogique" c'est à dire pour toutes les tensions continues, hachées etc.

Si c'est pour ce type d'alimentation alors il existe un système en kit très simple à monter chez MICROPROCESSOR.
C'est le kit µP80 dont je joins la notice téléchargeable sur leur site.

J'ai cela depuis plus de deux ans et cela fonctionne sans problème. L'alimentation est du 12v continu mais il vaut mieux la filtrer avec un condensateur de 470µF à 1000µF.

Accueil très sympa au téléphone et surtout ils connaissent très bien notre loisir.
Cordialement
Philippe Blondé
Un 59 dans le 22

Ph Blondé

J'oubliais, mais c'est aussi ans la notice, que l'on peur régler les temps d'arrêt, les inerties de l'accélération et du freinage
Philippe Blondé
Un 59 dans le 22

loco45

Bonjour,
Ok merci pour l'info
@+Christian

Papachef

Bonjour,
Avec un rail de commande à distance, a chaque fois qu'un essieu passe il y a fonctionnement du servo. Pour info l'action du servo se fait avec une carte Arduino. Comment éviter ce "multicontacts"
Merci 
Patrick

Ph Blondé

#41
Si, si, il est toujours vivant le Philippe  :)
Je remonte en surface après une longue période sans train. Bon, j'ai tout de même fais du décor (les photos suivront).
Pour le programme du va et vient avec trois autorails, j'ai rectifié et modifié pour obtenir des coups de klaxons deux tons avant le PN avec des variantes du style ti-taaa-ti ou tiiiiiii-ta etc... L'ambiance quoi!
Au sujet de l'Arduino, je vous recommande le HS n°1 de HACKABLE. C'est un guide pour commencer avec l'Aduino (Genuino en Europe, c'est la même chose mais j'étale ma science  8) 8)).
Citation de: Papachef le 07 Septembre 2016 à 12:02:10
Bonjour,
Avec un rail de commande à distance, a chaque fois qu'un essieu passe il y a fonctionnement du servo. Pour info l'action du servo se fait avec une carte Arduino. Comment éviter ce "multicontacts"
Merci 
Patrick
Patrick, si tu pouvais en dire un peu plus. Tu commandes un servo, OK, mais pourrais-tu indiquer la séquence logique du fonctionnement?
C'est souvent un problème d'écriture du programme au niveau de la surveillance du contact de détection de passage.
Cordialement
Philippe
Philippe Blondé
Un 59 dans le 22

Papachef

Bonsoir Philippe
La séquence Arduino est la suivante
Merci
Bien Cordialement
Patrick

#include <Servo.h>

const byte SERVO_A_ANGLE_MIN = 0;
const byte SERVO_A_ANGLE_MAX = 1;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX = 2;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN = 3;

const int angleMin = 1150;
const int angleMax = 1650;

int led=13;

Servo monServo;
int vitesse = 0;
int angle = angleMin;
byte etatServo = SERVO_A_ANGLE_MIN;

const int pinBouton = 0; /* le bouton est connecté à la broche A0 */

const boolean PRESSE = true;
const boolean RELACHE = false;

boolean etatBouton = RELACHE;

const byte AUCUN_EVENEMENT = 0;
const byte EVENEMENT_PRESSE = 1;
const byte EVENEMENT_RELACHE = 2;

/*
* fonctions de gestion du poussoir
*/
boolean lirePoussoir()
{
    boolean resultat = RELACHE;
    if (analogRead(pinBouton) > 512) {
        resultat = PRESSE;
    }
    return resultat;
}

byte lireEvenement()
{
    byte evenement;
    boolean nouvelEtat = lirePoussoir();
    if (nouvelEtat == etatBouton)
        evenement = AUCUN_EVENEMENT;
    if (nouvelEtat == PRESSE && etatBouton == RELACHE)
        evenement = EVENEMENT_PRESSE;
    if (nouvelEtat == RELACHE && etatBouton == PRESSE)
        evenement = EVENEMENT_RELACHE;
    etatBouton = nouvelEtat;
    return evenement;
}

/*
* La fonction setup() est exécutée 1 fois
* au démarrage du programme
*/
void setup()
{
  monServo.attach(2);
  pinMode(led, OUTPUT);
  pinMode(8, OUTPUT);
}

/*
* La fonction loop() est exécutée
* répétitivement
*/
void loop()
{


    /* actualisation de l'angle du servo */
    monServo.writeMicroseconds(angle);
 
    angle = angle + vitesse;
 
    if (angle > angleMax) {
        angle = angleMax;
        vitesse = 0;
        etatServo = SERVO_A_ANGLE_MAX;

digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
  delay(1000); // wait for a second



       
    }
    else if (angle < angleMin) {
        angle = angleMin;
        vitesse = 0;
        etatServo = SERVO_A_ANGLE_MIN;


  digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
  delay(1000); // wait for a second


   


       
    }

    /* lecture de la commande de l'utilisateur */
    byte evenement = lireEvenement();
 
    if (evenement == EVENEMENT_PRESSE) {
        switch (etatServo) {
            case SERVO_A_ANGLE_MIN:
            case SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN:
                vitesse =  1;
                etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX;
                break;

               
            case SERVO_A_ANGLE_MAX:
            case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX:
                vitesse = -1;
                etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN;
                break;

             
        }
    }

    delay(3);



}

Ph Blondé

Si j'ai bien compris, tu testes le détecteur.
Si contact (présence) tu bascules le servomoteur
Et ensuite il revient dans sa position lorsqu'il n'y a plus de contact.

Si c'est cela, je te propose un "delay" entre les deux actions du servo.


/* lecture de la commande de l'utilisateur */
    byte evenement = lireEvenement();
 
    if (evenement == EVENEMENT_PRESSE) {
        switch (etatServo) {
            case SERVO_A_ANGLE_MIN:
            case SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN:
                vitesse =  1;
                etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX;
                break;
AJOUTER DELAY? POUR QUE TOUT LE TRAIN PASSE AVANT QUE LE SERVO REVIENNE DANS SA POSITION INITIALE,
               
            case SERVO_A_ANGLE_MAX:
            case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX:
                vitesse = -1;
                etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN;
                break;
Philippe Blondé
Un 59 dans le 22

Papachef

Re bonsoir,
Avant le passage du train sur le 1er rail de commande, le servo est dans une position, au passage du train sur le rail de commande, le servo tourne dans une position et il y reste, ensuite en passant le 2ème rail de commande il revient dans sa position initiale.
Pour info, je veux commander les barrières d'un passage à niveau.
La delay n'apporte pas de modification
Merci
Patrick