LOCODUINO

Discussions Générales => Présentez vous ! => Discussion démarrée par: hinano80 le novembre 28, 2022, 05:14:30 pm

Titre: bonjour je m appel pierre j ai bientôt 60 ans
Posté par: hinano80 le novembre 28, 2022, 05:14:30 pm
bonjour   je m appel pierre j ai bientôt 60 ans  et je débute dans les système Arduino . j'ai deux gros défaut pour   cette nouvelle activité  un je ne parle pas et n écrit pas en anglais  (merci les traducteur en ligne ) 2 je ne connais rien en électricité ,ni en électronique   si je me suis lance dans ce projet c est pour pouvoir automatise mon futur réseau ferroviaire en ho  ;  néanmoins j'ai déjà pris quelque notion  via le fablab ou sur le net  mais c est très complique lorsque l on tombe sur des internaute sont plus pointu  sur la présentation du problème qu enclin a l'entraide   
viola  je vous présente mon projet   j aimerai  mettre en place un passage a niveau a 4 barrières  avec des détecteur anti collision  de type " fc -51 " sur deux voies différentes   .  j'ai déjà  fait une partie du programme mais la j avoue que je bloque . je vous ai mis en pièce jointe mon projet   j espere que vous adere a mon projet a pourrez m apporter votre par  vos compétence
Titre: Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: msport le novembre 28, 2022, 06:45:44 pm
Bonjour,

bienvenue à Locoduino.

C'est bien de se lancer directement dans le grand bain mais se familiariser avec les Arduino avant augmenterait vos chances de succès.

Différents articles du site éditorial traitent des passages à niveau :
1. la série de cinq qui commence avec : https://www.locoduino.org/spip.php?article261
2. https://www.locoduino.org/spip.php?article170
3. https://www.locoduino.org/spip.php?article145
4. https://www.locoduino.org/spip.php?article117

Je crains que vous ayez du mal à trouver quelqu'un ici qui souhaite écrire votre programme et il vaudrait mieux, au moins pour commencer, réaliser un montage qui a déjà fonctionné et sur lequel des membres ont passé du temps. Et pour lequel un support pourra vous être fourni.

A noter que les détecteurs de proximité infra-rouge de type FC-51 sont sensibles à la lumière parasite et qu'ils ont du mal à détecter les objets noirs (les locos vapeur). Néanmoins, ils fonctionnent comme détecteurs ponctuels et peuvent remplacer les ILS.

En tout cas, bravo et bon courage.
Titre: Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: hinano80 le novembre 29, 2022, 08:54:39 am
re bonjour et merci msport d  avoir pris le temps de répondre a mon post   vous dite il faut faire commencer a écrire le programme pour que vous puisiez  l étudiez voir le corriger c est ce que j ai fais je lai mis dans les pièces jointe  peut être ne le voyez vous pas  je vais donc le mette ci dessous   mais je crains que vue la longueur ce soit fastidieux a lire   


// C++ code
//
#include <Servo.h>
// Déclaration de constantes et variables
const int Detect1 = A0;     // Détection 1 branchée sur l'entée A0
const int Detect2 = A1;     // Détection 2 branchée sur l'entée A1
const int Detect3 = A2;     // Détection 3 branchée sur l'entée A2
const int Detect4 = A4;     // Détection 4 branchée sur l'entée A4

const int feu_droit = 13;   // Première paire de feux
const int feu_gauche = 12;  // Deuxième paire de feux

const int pulse_dfplayer = 11; // pour sonnerie

const int barriere1 = 8; // Fil signal servo1
const int barriere2 = 9; // Fil signal Servo2



int tempo_fermeture = 4000; // temps clignotement avant fermeture barrières
int tempo_barrieres_13_24 = 1000; // temps entre les barrières 1-3 et 2-4
int tempo_led = 500; // tempo cligno
int angle_fermeture = 0; // angle servo position fermée
int angle_ouverture = 80; // angle servo position ouverte
int vitesse_barriere = 70; // temps entre 2 degrés
int inhibition = 10000; // Pendant cette durée le PN ne peut pas se redéclencher
int angle_barriere;
Servo servo1;
Servo servo2;


unsigned long compteur_temps;
boolean etat_feux = false; // Variable 0 si leds éteintes et 1 si allumées
int valeur_Detect1 = 1023; // Détecteur 1 ( + de 512 pas de détection. - de 512 détection.)
int valeur_Detect2 = 1023; // Détecteur 2
int valeur_Detect3 = 1023;// Détecteur 3
int valeur_Detect4 = 1023;// Détecteur 4
int premiere_detection = 0; // 1 si détecteur1 en premier, 2 si détecteur2 en premier.
boolean detection1 = false; // 0 si pas de détection. 1 si train détecté.
int deuxieme_detection = 0; // 1 si détecteur3 en premier, 2 si détecteur4 en premier.
boolean detection2 = false; // 0 si pas de détection. 1 si train détecté.
boolean barriere_ouverte; // 1 si barrières ouvertes.

void setup() {

  pinMode(feu_droit,OUTPUT);
  pinMode(feu_gauche,OUTPUT);
  pinMode(pulse_dfplayer,OUTPUT);
  digitalWrite(pulse_dfplayer,HIGH);

  servo1.attach(barriere1,500,2500);
  servo2.attach(barriere2,500,2500);
  servo1.write(angle_ouverture); //ouverture au début
  servo2.write(angle_ouverture);
 
  barriere_ouverte = true;
}

void loop(){
 
  valeur_Detect1 = analogRead(Detect1);  // pour detctecion voie 1 entrre
  valeur_Detect2 = analogRead(Detect2);  // pour detctecion voie 1 sortie
    valeur_Detect3 = analogRead(Detect3);  // pour detctecion voie 2 entre
  valeur_Detect4 = analogRead(Detect4);  // pour detctecion voie2 sortie
 
  if (detection1 == 1 && premiere_detection == 0) {
    if (valeur_Detect1 > 512 && valeur_Detect2 > 512) {
      digitalWrite(feu_droit,LOW);
      digitalWrite(feu_gauche,LOW);
         
   
  if (detection2 == 1 && deuxieme_detection == 0) {

    if (valeur_Detect3 > 512 && valeur_Detect4 > 512) {
      digitalWrite(feu_droit,LOW);
      digitalWrite(feu_gauche,LOW);
         
       
     
      for (int angle_barriere=angle_fermeture; angle_barriere<=angle_ouverture; angle_barriere+=1){ //OUVERTURE BARRIERES
        servo1.write(angle_barriere);
   
        servo2.write(angle_barriere);

      }
     
      // Temporisation entre les groupes 1-3 et 2-4
      for (int tempo = 0; tempo <= tempo_barrieres_13_24; tempo +=1){ // Temporisation avant fermeture
        Fonction_feux(); // Appel de la fonction qui gère les feux
        delay(1);
      }
     
      //for (int angle_barriere=angle_fermeture; angle_barriere<=angle_ouverture; angle_barriere+=1){ //OUVERTURE BARRIERES
        //servo2.write(angle_barriere);
        //servo4.write(angle_barriere);
        //delay(vitesse_barriere);
     
     
      barriere_ouverte = true;

      detection1 = 0;
           detection2 = 0;
      //digitalWrite(feu_droit,LOW);
      //digitalWrite(feu_gauche,LOW);
      delay(inhibition);
    }
  }
  // Permet de savoir quel détecteur est passé à l'état bas en premier
  if (detection1 == false) {
   
    // détection d'un train voie 1
    if (valeur_Detect1 < 512 || valeur_Detect2 < 512) {
      detection1 = true;
          // détection d'un train voie 2
       if (detection2 == false) {
          if (valeur_Detect1 < 512 || valeur_Detect2 < 512) {
      detection2 = true;
      digitalWrite(pulse_dfplayer,LOW);
      delay(100);
      digitalWrite(pulse_dfplayer,HIGH);
      // Mise en mémoire du détecteur.
      if (valeur_Detect1 < 512) {
        premiere_detection = 1;
        } else {
        premiere_detection = 2;
      }
            if (valeur_Detect2 < 512) {
        deuxieme_detection = 1;
        } else {
        deuxieme_detection = 2;
      }
    }
        }}}
  // Un train est détecté.
  else {

    Fonction_feux(); // Appel de la fonction qui gère les feux

    if (barriere_ouverte == true) {
      for (int tempo = 0; tempo <= tempo_fermeture; tempo +=1){ // Temporisation avant fermeture
        Fonction_feux(); // Appel de la fonction qui gère les feux
        delay(1);
      }
      // Premier groupe servo 1 et 3
      for (int angle_barriere=angle_ouverture; angle_barriere>=angle_fermeture; angle_barriere-=1){ //FERMETURE BARRIERES

        servo1.write(angle_barriere);


        Fonction_feux(); // Appel de la fonction qui gère les feux
        delay(vitesse_barriere); // Vitesse angle barrière
      }
     
      // Temporisation entre les groupes 1-3 et 2-4
      for (int tempo = 0; tempo <= tempo_barrieres_13_24; tempo +=1){ // Temporisation avant fermeture
        Fonction_feux(); // Appel de la fonction qui gère les feux
        delay(1);
      }
     
      // Deuxième groupe servo 2 et 4
      for (int angle_barriere=angle_ouverture; angle_barriere>=angle_fermeture; angle_barriere-=1){ //FERMETURE BARRIERES

        servo2.write(angle_barriere);


        Fonction_feux(); // Appel de la fonction qui gère les feux
        delay(vitesse_barriere); // Vitesse angle barrière
      }
      barriere_ouverte = false;

    }
    if (premiere_detection == 1) {
      if (valeur_Detect2 < 512) {
        premiere_detection = 0;;
      }
    }
    if (premiere_detection == 2) { // Si non c'est que c'est le 2eme capteur
      if (valeur_Detect1 < 512) {
        premiere_detection = 0;
      }
    }
  }
          if (deuxieme_detection == 1) {
      if (valeur_Detect4 < 512) {
        deuxieme_detection = 0;;
      }
    }
    if (deuxieme_detection == 2) { // Si non c'est que c'est le 2eme capteur
      if (valeur_Detect3 < 512) {
        deuxieme_detection = 0;
  delay(50);
}
        }}}}
void Fonction_feux() {
  if (millis() > compteur_temps + tempo_led) {
    compteur_temps = millis();
    if (etat_feux == false) {
      etat_feux = true;
      digitalWrite(feu_droit,HIGH);
      digitalWrite(feu_gauche,HIGH);

      } else {
      etat_feux = false;
      digitalWrite(feu_droit,LOW);
      digitalWrite(feu_gauche,LOW);
    }
  }
}
Titre: Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: Thierry le novembre 29, 2022, 09:20:48 am
Bonjour et bienvenue sur notre site.

Au delà de la formation justement conseillée par michel, vous pouvez aussi vous inspirer de l'article de Jean-Luc https://www.locoduino.org/ecrire/?exec=article&id_article=25 (https://www.locoduino.org/ecrire/?exec=article&id_article=25) qui ressemble beaucoup à votre besoin et y applique un 'pattern' de programmation, c'est à dire une façon de faire qui a fait ses preuves : la machine à états.
Titre: Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: msport le novembre 29, 2022, 11:35:54 am
J'ai mis votre code entre balises code (#).

A noter que les détecteurs infrarouge FC51 sont des détecteurs tout ou rien ...

Si vous voulez savoir où votre programme passe mettez y des Serial.print("balise");
Titre: Re : Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: hinano80 le novembre 29, 2022, 01:17:39 pm
Bonjour et bienvenue sur notre site.

Au delà de la formation justement conseillée par michel, vous pouvez aussi vous inspirer de l'article de Jean-Luc https://www.locoduino.org/ecrire/?exec=article&id_article=25 (https://www.locoduino.org/ecrire/?exec=article&id_article=25) qui ressemble beaucoup à votre besoin et y applique un 'pattern' de programmation, c'est à dire une façon de faire qui a fait ses preuves : la machine à états.

 j ai essayer d aller voir votre lien apparemment il est en prive donc je  peut rien voir
Titre: Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: Jean-Luc le novembre 29, 2022, 01:20:49 pm
Bonjour et bienvenue.

Le bon lien est celui ci : https://www.locoduino.org/spip.php?article25
Titre: Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: Thierry le novembre 29, 2022, 04:22:13 pm
oups, désolé. Merci Jean Luc.
Titre: Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: msport le janvier 03, 2023, 07:16:36 pm
Bonsoir,

suite à la réponse de Christian sur le site éditorial, je confirme que vous avez la solution toute faite dans la série d'articles Passage à niveau géré par Arduino
https://www.locoduino.org/spip.php?article264

Dites nous si vous avez réussi à faire fonctionner le montage décrit en le testant avec un bouton poussoir à la place des ILS.

Mais pourquoi voulez vous qu'on réécrive votre ébauche de programme alors qu'on vous en propose un qui a été testé.

Les FC-51 peuvent être mis en parallèle comme les ILS suivant le schéma joint.
Et on peut également mettre les servos en parallèle.  Si ils sont de même fabrication, il n'y aura pas beaucoup de différence dans leur rotation.
Titre: Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: chris_bzg le janvier 04, 2023, 10:03:19 am
Je conseille de plus de lire cette série d'articles en commençant par le premier. En effet, la série montre qu'un projet doit se construire PROGRESSIVEMENT, étape par étape, la première étant de détecter des trains. Et comme vous voulez utiliser des fc51 à la place des ILS, c'est bel et bien la première étape que vous devez franchir avant d'envisager la suite.
Bref, prenez votre temps afin de bien assimiler ce que vous découvrirez avec vos différentes expériences et là, on pourra vous apporter de l'aide. On ne la refuse jamais.  ;)
Titre: Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: hinano80 le janvier 04, 2023, 10:15:44 am
j ai déjà réalise un projet qui fonctionne parfaitement  avec des FC-51  et c est la ou j appel au secours car  il ne marche que sur une voie et moi j aimerais qu’il puisse fonctionner sur deux ou plus de voie   . j aurais aimer vous mettre le programme  que j ai mais j ais je ne sais comment  le joindre
Titre: Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: msport le janvier 04, 2023, 10:31:51 am
Bonjour,
Le programme de https://www.locoduino.org/spip.php?article264 fonctionne sur deux voies.
Si vous ne testez pas ce qu'on vous propose, comment voulez vous qu'on vous aide ?
Titre: Re : bonjour je m appel pierre j ai bientôt 60 ans
Posté par: hinano80 le janvier 04, 2023, 10:36:07 am
pour lre moment je n est pas tous le nécessaire pour faire le montage  je vearis vendredi si j ai le temps d aller le chercher