Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - jojo 77

Pages: [1]
1
Débuter / Re : Problème tempo passage à niveau (RESOLU)
« le: mars 29, 2019, 08:14:43 am »
Bonjour,
En mettant une valeur plus élevée à setSpeed, le résultat est acceptable. Je mets donc ce post en résolu.
Merci à tous pour votre aide.

Cordialement;

2
Débuter / Re : Problème tempo passage à niveau
« le: mars 24, 2019, 06:35:15 pm »
Bonsoir,

J'ai déplacé mes capteurs et il y a du mieux. Les barrières sont totalement baissées juste avant l'arrivée du train, mais il faut pour cela qu'il n'aille pas trop vite.
Je ne peux pas allonger la distance des capteurs car la voie plus loin est sous un tunnel. N'est-il pas possible que les barrières se baissent plus vite même si cela enlève un peu de réalisme ?
Cordialement.

3
Débuter / Re : Problème tempo passage à niveau
« le: mars 19, 2019, 01:05:52 pm »
En effet, selon votre message, mes capteurs sont placés beaucoup trop près du pn.
Je vais donc les déplacer.
Je pense faire cela ce week-end à moins que je trouve le temps avant.
De toutes façons je vous tiens au courant.

Cordialement

4
Débuter / Re : Problème tempo passage à niveau
« le: mars 19, 2019, 09:38:41 am »
Bonjour,
Nouveaux essais après modifications du sketch. Ajout d'un Serial.println.
La locomotive passe sur le capteur, la barrière se ferme une fois que le train à dépassé le pn.
Je vois donc deux réponses : soit agir sur la rapidité de fermeture de la barrière, soit, ce qui est pour moi le plus probable, j'aurais placé mes capteurs trop près du pn.
Qu'en pensez-vous ?

Cordialement

5
Débuter / Re : Problème tempo passage à niveau
« le: mars 18, 2019, 06:58:11 pm »
Bonsoir,
J'ai en effet omis d'indiquer que j'avais repris le sketch de Jean-Luc qui m'a bien conseillé et je vous prie de m'en excuser.
Avant d'ouvrir cette nouvelle discussion, j'avais répondu au bas de la rubrique "Comment concevoir rationnellement votre système" pour expliquer mon problème.
Je ne l'ai peut-être pas fait au bon endroit.
En tout cas, merci à vous deux de votre patience car je ne suis pas très doué.
Je vais donc essayer vos conseils ce soir. Je vous tiendrais au courant des résultats demain.
Bonne soirée !
Cordialement

6
Débuter / Re : Problème tempo passage à niveau
« le: mars 18, 2019, 11:26:19 am »
Merci encore !
Je dois m'absenter mais j'essaierai ce soir et je vous tiens au courant.
Cordialement

7
Débuter / Re : Problème tempo passage à niveau
« le: mars 18, 2019, 10:45:28 am »
Oui, je l'ai vérifié, ils fonctionnent correctement.
Merci pour votre aide.

8
Débuter / Re : Problème tempo passage à niveau
« le: mars 18, 2019, 09:48:36 am »
Bonjour,
Merci pour cette réponse.
Seulement je suis novice. De plus je ne comprends pas l'anglais.
J'ai effectué une recherche sur le site d'Arduino pour comprendre Sérial.print() et j'ai tenté une traduction mais je n'ai pas compris où placer cette commande dans le programme.
Cordialement.

9
Débuter / Problème tempo passage à niveau
« le: mars 17, 2019, 05:36:52 pm »
Bonjour,
Première réalisation de programme avec Arduino, je bute sur un petit problème.
Il s'agit d'un passage à niveau sans feux clignotant (juste les barrières) détecté par un ILS pour l'ouverture, la fermeture s'effectuant au bout d'une temporisation.
Seulement, lorsque le train arrive sur le capteur, il se passe un certain temps avant que les barrières se ferment, de ce fait elles sont complètement fermées quand le train commence à quitter le pn. Que dois-je changer sur le programme ?
Sinon elles se referment bien au bout de la tempo

Voici le programme

/*
   Gestion d'un passage à niveau avec 2 capteurs ILS.

   Bibliothèques utilisées :
   - SlowMotionServo pour les barrières
   - LightDimmer pour le clignotement du feu du PN

*/

#include <Servo.h>
#include <SlowMotionServo.h>

/*
 * Décommentez la ligne ci-dessous pour avoir l'affichage
 * de l'état courant de l'automate sur les broches 8 à 12
 */
// #define AVEC_AFFICHAGE_ETAT

/*-------------------------------------------------------------------*/
/* Les états possible pour le PN */
enum { PN_OUVERT, PN_SE_FERME, PN_FERME, PN_TEMPO, PN_S_OUVRE };

/*-------------------------------------------------------------------*/
/* Les pin des capteurs et les informations renvoyées                   */
const byte capteurPin1 = 2;
const byte capteurPin2 = 6;
const byte trainPresent = LOW;
const byte trainAbsent = HIGH;




/*-------------------------------------------------------------------*/
/* Les pins des servos */
const byte barriere1Pin1 = 4;
const byte barriere2Pin1 = 5;
const byte barriere1Pin2 = 4;
const byte barriere2Pin2 = 5;

/* Les positions cibles des barrières */
const float positionOuverteBarriere1 = 0.0;
const float positionFermeeBarriere1 = 1.0;
const float positionOuverteBarriere2 = 0.0;
const float positionFermeeBarriere2 = 1.0;

/* Les servos */
SMSSmooth barriere1;
SMSSmooth barriere2;

/*-------------------------------------------------------------------*/
/* La temporisation entre la fin du train et l'ouverture des barrières
   en ms
*/
const unsigned long temporisationOuverture = 3000;

#ifdef AVEC_AFFICHAGE_ETAT
const byte ledEtat = 8;

void initAffEtat()
{
  for (byte i = ledEtat ; i < ledEtat + 5; i++) {
    pinMode(i, OUTPUT);
    digitalWrite(i, LOW);
  }
}

void afficheEtat(const byte etat)
{
  for (byte i = ledEtat ; i < ledEtat + etat; i++) {
    digitalWrite(i, LOW);
  }
  for (byte i = ledEtat + etat + 1 ; i < ledEtat + 5; i++) {
    digitalWrite(i, LOW);
  }
  digitalWrite(ledEtat + etat, HIGH);
}

#define INITAFFETAT() initAffEtat()
#define AFFICHEETAT(e) afficheEtat(e)
#else
#define INITAFFETAT()
#define AFFICHEETAT(e)
#endif

/*-------------------------------------------------------------------*/
/* Intialisations */
void setup()
{
  /* capteur de présence */
  pinMode(capteurPin1, INPUT_PULLUP);
  pinMode(capteurPin2, INPUT_PULLUP);
 
  /* les barrières */
    barriere1.setPin(barriere1Pin1);
    barriere1.setPin(barriere1Pin2);
    barriere1.setSpeed(1.0);
    barriere1.setInitialPosition(0.5);
    barriere1.goTo(positionOuverteBarriere1);
    barriere2.setPin(barriere2Pin1);
    barriere2.setPin(barriere2Pin2);
    barriere2.setSpeed(1.0);
    barriere2.setInitialPosition(0.5);
    barriere2.goTo(positionOuverteBarriere2);   
  INITAFFETAT();
}

/*-------------------------------------------------------------------*/
/* Contrôle du PN */
void loop()
{
  static byte etatPN = PN_OUVERT;
  static unsigned long dateOuverture;

  /* Fait fonctionner les servos */
  SlowMotionServo::update();

  AFFICHEETAT(etatPN);
 
  switch (etatPN)
  {
    case PN_OUVERT:
      /* lecture du capteur pour détecter un train */
      if (digitalRead(capteurPin1) == trainPresent || digitalRead(capteurPin2) == trainPresent) {
        /* train présent */
        /* On ferme les barrière */
        barriere1.goTo(positionFermeeBarriere1);
        barriere2.goTo(positionFermeeBarriere2);
        /* Le PN est en train de se fermer */
        etatPN = PN_SE_FERME;
      }
      break;

    case PN_SE_FERME:
      /* Si les deux servos sont arrêtés, le PN a terminé de se fermer */
      if (barriere1.isStopped() && barriere2.isStopped()) {
        etatPN = PN_FERME;
      }
      break;

    case PN_FERME:
      /* lecture du capteur pour détecter le départ du train */
      if (digitalRead(capteurPin1) == trainAbsent && digitalRead(capteurPin2) == trainAbsent) {
        dateOuverture = millis() + temporisationOuverture;
        etatPN = PN_TEMPO;
      }
      break;

    case PN_TEMPO:
      /* Un train est présent, on retourne à l'état PN_FERME */
      if (digitalRead(capteurPin1) == trainPresent || digitalRead(capteurPin2) == trainPresent){
        etatPN = PN_FERME;
      }
      else {
        /* Si la date est arrivée, on ouvre */
        if (millis() >= dateOuverture) {
          /* On ouvre les barrière */
          barriere1.goTo(positionOuverteBarriere1);
          barriere2.goTo(positionOuverteBarriere2);
          etatPN = PN_S_OUVRE;
        }
      }
      break;

    case PN_S_OUVRE:
      /* Un train est présent, on retourne à l'état PN_SE_FERME et on ferme la barrière */
      if (digitalRead(capteurPin1) == trainPresent || digitalRead(capteurPin2) == trainPresent) {
        barriere1.goTo(positionFermeeBarriere1);
        barriere2.goTo(positionFermeeBarriere2);
        etatPN = PN_SE_FERME;
      }
      else {
        /* Si les deux servos sont arrêtés, le PN a terminé de s'ouvrir */
        if (barriere1.isStopped() && barriere2.isStopped()) {
          etatPN = PN_OUVERT;
        }
      }
      break;

    default:
      /* normalement impossible */
      break;
  }
}

Merci pour vos réponses

Pages: [1]