Go Down

Topic: arduino et piston a air (Read 1 time) previous topic - next topic

nebukadnezare

bonsoir

j'ai un petit projet qui coince un peux et j'aurai besoin d'aide vue que je suis un petit bleu en arduino.

le projet consiste a commander 2 piston a air avec un bouton de démarrage et un switch, le tous avec bien sur un arduino.

A l'allumage de l'arduino ,le piston 1 monte et le piston 2 ce rétracte, on va dire que c 'est la position zéro.
 
puis, on appui sur le bouton de démarrage du cycle ( bouton 1 sur pin 2), le piston 1 commence sa

descente jusqu'à ce qu'il touche le switch ( bouton 2 sur pin 3) ,qui lui (switch) va actionner le piston 2 qui

va en mouvement de pousser (sortie) jusqu'à sa limite , après 500 ms le piston 1 remonte et après  500

ms le piston 2 se rétracte fin du cycle ,on attend l'appui sur le bouton 1 démarrage.

mon problème avec le code que je joins c'et qu'il marche une fois sur deux,

- une fois sa marche
- une fois le piston 1 ne descend pas jusqu'au switch mais le piston 2 pousse
- une fois la boucle se répété sans l'utilisation du bouton 1 de démarrage du cycle .

bref c 'est pas sa.

sa serais gentille de bien vouloir me dire ce qui ne va pas dans le programme, merci d'avance.

Code: [Select]
#define RELAY1  6     //piston 1 descente                 
#define RELAY2  7     // piston 1 monter                   
#define RELAY3  8     // piston 2 pousser                   
#define RELAY4  9     // piston 2 retour
const int buttonPin2 = 2;  // bouton poussoir de demarrage du cycle
const int buttonPin3 = 3;  // swith demarrage piston 2 pousser

void setup()
{   
  pinMode(buttonPin2, INPUT_PULLUP); // utilisation pulpUp interne
  pinMode(buttonPin3, INPUT_PULLUP); // utilisation pulpUp interne
  pinMode(RELAY1, OUTPUT);       
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);
  digitalWrite(RELAY1,HIGH); 
  digitalWrite(RELAY2,LOW);  // RAZ piston 1 position monter
  digitalWrite(RELAY3,HIGH);
  digitalWrite(RELAY4,LOW);  // RAZ piston 2 position retour
  delay(2000);
}

void loop()
{
 
  if (digitalRead(buttonPin2) == LOW) // Attente du bouton poussoir de demarrage du cycle
  {
    exe();                            // activation du bouton de demarrage
   
  }
  digitalWrite(RELAY1,HIGH);    // position initial des deux pistons
  digitalWrite(RELAY2,LOW);     // position initial des deux pistons
  digitalWrite(RELAY3,HIGH);    // position initial des deux pistons
  digitalWrite(RELAY4,LOW);     // position initial des deux pistons
   }         
 
 void exe(){
  digitalWrite(RELAY1,LOW);    // mouvement du piston 1 en descente
 while(1){
 if (digitalRead(buttonPin3) == LOW) // activation du suitch ...
 {
   digitalWrite(RELAY3,LOW); //mouvement piston 2 en pousser
   delay(500);
   digitalWrite(RELAY1,HIGH); //fixation piston 1 en bas
   delay(500);
   digitalWrite(RELAY2,LOW); // mouvement piston 1 ver le haut
   delay(1000);
   digitalWrite(RELAY3,HIGH); //fixation piston 2 en pousser
   digitalWrite(RELAY4,LOW);  // mouvement piston 2 en retour
   delay(2000);
 return;
   }
  }
 }

lesept

Je pense que tu devrais voir ton problème comme une machine à états (fsm : finite state machine). Cherche un peu sur le forum français il y est fait mention d'un tuto, mais je ne sais plus qui l'a écrit.

Moi j'utilise la bibliothèque qui est décrite ici :
Code: [Select]
http://www.jonblack.me/arduino-finite-state-machine-library/
elle est simple à utiliser et assez puissante pour ton besoin.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

al1fch

#2
Jan 07, 2018, 11:59 am Last Edit: Jan 07, 2018, 12:00 pm by al1fch
Bonjour
Le tutoriel de J-M-L sur le sujet est içi

nebukadnezare

merci pour vos réponse , je constat que le code fonctionne quand les relay son vide ,et des que je branche la source le code déraille , une idée merci?

J-M-L

#4
Jan 07, 2018, 05:10 pm Last Edit: Jan 07, 2018, 05:15 pm by J-M-L
C'est pas la peine de dupliquer votre question dans mon tuto... merci de virer cette question de là bas...

Quote
A l'allumage de l'arduino ,le piston 1 monte et le piston 2 ce rétracte, on va dire que c 'est la position zéro.
s'ils sont en train de bouger ce n'est pas une position.. mais un mouvement...

ça veut dire quoi "ça déraille" ?

(on dirait que vous ne traitez pas les rebonds des boutons)
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

nebukadnezare

comment je fait pour virer ma question de labas.

et sa déraille veux dire que les mouvements des pistons son aléatoire, il ne suive pas le code.

et des que je retire le câblage des relais il fonctionne selon le code .

J-M-L

#6
Jan 07, 2018, 05:38 pm Last Edit: Jan 07, 2018, 05:41 pm by J-M-L
comment je fait pour virer ma question de labas.
sous votre post vous devez voir un petit bouton "More"



Quote
et sa déraille veux dire que les mouvements des pistons sont aléatoires, ils ne suivent pas le code.
et dès que je retire le câblage des relais il fonctionne selon le code .
Photo ou dessin du câblage ? les relais et les boutons.

qu'est-ce que ça veut dire "il fonctionne selon le code" - c'est qui "il" ?

expliquez concrètement ce que vous attendez de ce code
Code: [Select]
   digitalWrite(RELAY3,LOW); //mouvement piston 2 en pousser
   delay(500);
   digitalWrite(RELAY1,HIGH); //fixation piston 1 en bas
   delay(500);
   digitalWrite(RELAY2,LOW); // mouvement piston 1 ver le haut
   delay(1000);
   digitalWrite(RELAY3,HIGH); //fixation piston 2 en pousser
   digitalWrite(RELAY4,LOW);  // mouvement piston 2 en retour
   delay(2000);
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

nebukadnezare

il fonctionne selon le code, je parle des relais, les leds des relais suive bien le code, mais des que je branche les électrovannes des pistons avec une alimentation externe (bien sur ) ,les relais ne suive pas le code.

J-M-L

vous avez peut-être un soucis électrique... comme vous ne répondez pas précisément aux questions ni ne postez pas vos schéma... on peut pas vous aider..
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

nebukadnezare

a quelle question je n'ai pas répondue précisément ?

et pour le schéma c'est un schéma classique d'un arduino et un module 4 relais plus 2 boutons poussoir

qu'on trouve sur le net.

pour un pro comme toi , lire la description et le code n'aide pas , que dire de moi.

c'est surement un problème électrique ou de parasitage, je vais cherche plus de se cote .

donc merci pour l'aide.
 

J-M-L

a quelle question je n'ai pas répondue précisément ?
expliquez concrètement ce que vous attendez de ce code
Photo ou dessin du câblage ? les relais et les boutons.
(on dirait que vous ne traitez pas les rebonds des boutons)
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

nebukadnezare

Bonsoir

j'ai résolu le problème des pistons qui déraillé , si sa peux aider quelqu'un , le problème venais d'un retours électrique ou d'une espèce de parasitage; je pense .

Après plusieurs recherche du cote électrique j'ai trouver qu'il manquer des diodes sur les bobines des électrovannes (diode de la roue libre pour relais).

 je ne suis pas expert pour vous expliquer le pourquoi du comment mais maintenant sa marche nickel.

Merci a tous ceux qui on lu et ou aider.

bien a vous.

J-M-L

Oops... c'est plus que du « parasitage » - sans diode de roue libre vous prenez une grosse surtension dans le circuit et vous risquez de tout griller...  pour éviter les surtensions, il faut protéger les circuits en prévoyant un chemin pour le courant de la bobine quand le circuit inductif s'interrompt et c'est ce à quoi sert cette diode de roue libre.

C'est surprenant d'ailleurs que vous n'ayez rien grillé!
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

nebukadnezare

Merci pour l'info et l'aide

bien a vous.

Go Up