Projet Funiculaire

Bonjour,
Je suis tout nouveau dans le monde de l’arduino et je n’y connais rien du tout en électronique.
J’ai comme projet de construire un funiculaire.
J’ai trouvé sur le net un code qui fonctionne parfaitement. Il effectue pratiquement tout ce dont j’ai besoin.
Le moteur tourne dans un sens pendant 15 secondes, s’arrête pendant 5 secondes, puis repart dans l’autre sens pendant 15 secondes, puis pause de 5 secondes et ainsi de suite.
Mon problème est que je souhaite ajouter deux capteurs de fin de course pour éviter ces fameux 15 secondes. Car si je laisse cette tempo de 15 secondes et que je coupe le courant au milieu de la course, le funiculaire repartira pour 15 secondes dès la remise du courant.
Donc, je souhaiterai placer 1 capteur au début et 1 capteur à la fin.
L’idée serait que le funiculaire arrivant en haut, appuie sur le capteur, s’arrête 5 secondes, puis redescend pour aller appuyer sur le capteur du bas et s’arrêter encore 5 secondes et ainsi de suite.
Je ne sais pas comment brancher mes capteurs sur l’arduino. Petite précision, je commande un moteur d’imprimante HP avec une L293D branché sur un arduino elegoo uno R3.
Ci-joint en zip, les capteurs et le code utilisé.
Merci pour votre aide.
Cordialement

Funiculaire.zip (5.44 KB)

Tu devrais te renseigner sur le concept de machine d'états, J-M-L a fait un bon tuto, dans la section des tutos, qui t'aidera à voir comment adapter ça à ton problème.

lesept:
Tu devrais te renseigner sur le concept de machine d'états, J-M-L a fait un bon tuto, dans la section des tutos, qui t'aidera à voir comment adapter ça à ton problème.

Bonsoir et merci pour cette info.

Pour bien débuter avec l'arduino, un bon point de départ c'est de lire les tutos d'eskimon. vous y verrez notamment une partie sur les moteurs et une autre sur les boutons.

Un détecteur de fin de course, c'est comme un bouton (pour simplifier votre gestion des boutons, éventuellement utilisez la librairie de @bricoleau ou alors la librairie OneButton de Matthias Hertel).

Pour la machine à états : cf mon tuto éventuellement

J-M-L:
Pour bien débuter avec l'arduino, un bon point de départ c'est de lire les tutos d'eskimon. vous y verrez notamment une partie sur les moteurs et une autre sur les boutons.

Un détecteur de fin de course, c'est comme un bouton (pour simplifier votre gestion des boutons, éventuellement utilisez la librairie de @bricoleau ou alors la librairie OneButton de Matthias Hertel).

Pour la machine à états : cf mon tuto éventuellement

Bonjour et merci.
Mon projet avance.
J'ai branché mes 2 capteurs fin de course. Seulement mon code fonctionne dans un sens mais pas dans l'autre. En faite quand j'appuie sur le 1er capteur mon moteur s’arrête, mais je n'arrive pas à le faire repartir dans l'autre sens. Voici mon code (Glané à droite à gauche, car je débute en programmation)

int Moteur_sens1=5; // Pin 5 Arduino vers broche A+ du L293D
int Moteur_sens2=6; // Pin 6 Arduino vers broche A- du L293D
int bouton = 12; // création de la variable "bouton" connectée à la broche 2 de la carte.
int etatbouton = 0; // variable qui servira à mémoriser la position du bouton.
int bouton2 = 13; // création de la variable "bouton" connectée à la broche 2 de la carte.
int etatbouton2 = 0; // variable qui servira à mémoriser la position du bouton.
void setup() {
pinMode (bouton, INPUT_PULLUP); // on annonce que la variable bouton connectée sur la PIN 2 est une entrée avec la résistance de PULLUP activée.
pinMode (bouton2, INPUT_PULLUP); // on annonce que la variable bouton connectée sur la PIN 7 est une entrée avec la résistance de PULLUP activée.
 // On définit les bornes 5 et 6 de l'Arduino en sorties digitales
pinMode(Moteur_sens1, OUTPUT); // Pin 5 Arduino en sortie digitale
pinMode(Moteur_sens2, OUTPUT); // Pin 6 Arduino en sortie digitale

}

void loop() {
etatbouton = digitalRead(bouton);//la variable etatbouton mémorise la position du bouton
etatbouton2 = digitalRead(bouton2);//la variable etatbouton mémorise la position du bouton
if (etatbouton == LOW){// si la variable etatbouton est à LOW /Attention l'état est inversé lorsque l'on utilise une résistance de PULLUP.
 // Le moteur tourne dans le sens normal
digitalWrite(Moteur_sens1,HIGH); //Activation de la broche A+ du L293D
digitalWrite(Moteur_sens2,LOW); //Désactivation de la broche A- du L293D
}
else{
digitalWrite(Moteur_sens1,LOW); //Activation de la broche A+ du L293D
digitalWrite(Moteur_sens2,LOW); //Désactivation de la broche A- du L293D
delay(3000);
digitalWrite(Moteur_sens1,LOW); //Activation de la broche A+ du L293D
digitalWrite(Moteur_sens2,HIGH); //Désactivation de la broche A- du L293D
}
}

Merci pour votre aide

corrigez votre post ci dessus et rajoutez les code tags autour du code:

[code]

[color=blue]// votre code ici[/color]

[/code]

.

ça doit ressembler à cela:

// votre code ici

(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l’IDE avant de copier le code pour qu’il soit indenté correctement)


lisez les tutos mentionnes plus haut ca vous aidera a comprendre ce que vous faites

pour faire très simple, votre code devrait lancer le moteur dans un sens, attendre qu’on touche le détecteur de fin de course associé, attendre 5 secondes puis la lancer dans l’autre sens, attendre qu’on touche l’autre détecteur de fin de course, attendre 5s et reboucler

void loop() {
  monter();
  while (digitalRead(pinFinDeCourseHaut) == HIGH); // on attend d'arriver en haut
  stop();
  delay(5000); // on attend 5s
  descendre();
  while (digitalRead(pinFinDeCourseBas) == HIGH); // on attend d'arriver en bas
  stop();
  delay(5000); // on attend 5s
}

avec les fonction monter(), descendre() qui lancent le moteur dans le bon sens et stop() qui l’arrête

J-M-L:
corrigez votre post ci dessus et rajoutez les code tags autour du code:

[code]

[color=blue]// votre code ici[/color]

[/code]

.

ça doit ressembler à cela:

// votre code ici

(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)


lisez les tutos mentionnes plus haut ca vous aidera a comprendre ce que vous faites

pour faire très simple, votre code devrait lancer le moteur dans un sens, attendre qu'on touche le détecteur de fin de course associé, attendre 5 secondes puis la lancer dans l'autre sens, attendre qu'on touche l'autre détecteur de fin de course, attendre 5s et reboucler

void loop() {

monter();
  while (digitalRead(pinFinDeCourseHaut) == HIGH); // on attend d'arriver en haut
  stop();
  delay(5000); // on attend 5s
  descendre();
  while (digitalRead(pinFinDeCourseBas) == HIGH); // on attend d'arriver en bas
  stop();
  delay(5000); // on attend 5s
}



avec les fonction monter(), descendre() qui lancent le moteur dans le bon sens et stop() qui l'arrête
-----

Bonsoir,
Merci pour votre réponse.
Ça fonctionne !!!
J'ai réussi à déclarer mes fonctions comme vous me l'aviez suggéré.
Pas facile quand on est un débutant niveau 0, de comprendre tout ça...
Encore merci pour votre aide.

ravi d'avoir aidé mais j'eusse apprécié que vous modifiassiez votre message #4 comme demandé.

ça me semblait pourtant la moindre des choses que de respecter le forum sur lequel on vient chercher des réponses...

pas cool.

J-M-L:
ravi d'avoir aidé mais j'eusse apprécié que vous modifiassiez votre message #4 comme demandé.

ça me semblait pourtant la moindre des choses que de respecter le forum sur lequel on vient chercher des réponses...

pas cool.

Bonjour,
C'est fait...
Merci.

merci pour le forum