Go Down

Topic: Ouverture d'une pince (Read 3485 times) previous topic - next topic

Skyphir

Bonjour,

J'ai un projet a réalisé et pour se faire j'ai besoin d'ouvrir une pince. Rien de méchant, je dois faire tourner un moteur à cc en sens antihoraire pour l'ouverture et horaire pour le fermeture. Pour que ma pince soit bien fermée j'utilise un électroaimant  normally closed. Je veux donc que quand mon moteur tourne en antihoraire l'électroaimant soit alimenté pour l'ouverture et que quand il tourne en horaire mon électroaimant ne soit pas alimenté pour que l'aimant se referme.
C'est là que j'ai un problème. Quand je ferme la pince (horaire + non alimentation de l'aimant) ça fonctionne mais le contraire m'est difficile, soit l'électroaimant est alimenté et mon moteur ne tourne pas ou dans le mauvais sens soit mon moteur tourne dans le bon sens mais mon aimant n'est plus alimenté.
Petite question supplémentaire : est ce que je peux grâce à un potentiomètre régler la position maximale que devra atteindre mon moteur en ouverture ?
Merci de vos réponses et demander moi si je n'ai pas été assez clair ou si vous avez besoin de plus de détails

infobarquee

bonjour,
sans code difficile de répondre.

si peux utiliser un simple interrupteur pour fin de course pour arrêter le moteur.
AUCUNE AIDE PAR MP

Skyphir

Voici mon code
(j'ai installé des boutons poussoirs pour les deux phases, la première est celle de la fermeture qui fonctionne et la deuxiémé est pour l'ouverture)
Code: [Select]

int directionA=12 ;
int speedA=3 ;
int speedB=11 ;
int directionB=13 ;
const int buttonJ = 7;
const int buttonB = 6;



void setup ()
{
  pinMode (directionA, OUTPUT) ;
  pinMode (directionB, OUTPUT) ;
  pinMode (speedA, OUTPUT) ;
  pinMode (speedB, OUTPUT) ;
  pinMode (buttonJ, INPUT) ;
}

void loop ()
{
  int buttonJState = digitalRead(buttonJ);
 
    if (buttonJState == LOW)
  {
  digitalWrite (3, HIGH) ; // moteur pwm
  digitalWrite (12, LOW) ; // moteur direct
  digitalWrite (11, HIGH) ; // aimant pwm
  digitalWrite (13, HIGH) ; // Aimant direct
 

  delay(3000) ; //Durée de fonctionnement moteur 1
 
  digitalWrite (3, LOW) ; // moteur pwm
  digitalWrite (11,LOW) ; // aimant pwm
 
  }
  else{}
 
  int buttonBState = digitalRead(buttonB);
 
    if (buttonBState == LOW)
  {
 
  digitalWrite (3,HIGH) ; // moteur pwm
  digitalWrite (12,LOW) ; // adirect moteur
  digitalWrite (11,HIGH) ; // aimant pwm
  digitalWrite (13,HIGH) ; // aimant direct
 
 
  delay(3000); //Durée de fonctionnement electroaimant

  digitalWrite (3,LOW) ; // moteur pwm
  digitalWrite (11,LOW) ; // aimant pwm
 
  }
  else {}
}
 

infobarquee

ton aimant est toujours en HIGH, quelque soit le sens, comment veux tu que ca s'ouvre?
tu bouge le moteur en mettant HIGH sur l'aimant, donc quand tu ferme, ca passe, mais quand tu ouvre, ca coince.
normal
AUCUNE AIDE PAR MP

Skyphir

Excuse moi je me suis trompé dans mon programme tu as raison je n'ai pas fais attention, en refaisant mes manips ça donne ça

Code: [Select]

int buttonJState = digitalRead(buttonJ);
 
    if (buttonJState == LOW)
  {
  digitalWrite (3, HIGH) ; // moteur pwm
  digitalWrite (12, HIGH) ; // moteur direct
  digitalWrite (11, LOW) ; // aimant pwm
  digitalWrite (13, HIGH) ; // Aimant direct
 

  delay(3000) ; //Durée de fonctionnement moteur 1
 
  digitalWrite (3, LOW) ; // moteur pwm
  digitalWrite (11,LOW) ; // aimant pwm
 
  }


Donc celui ci pour la fermeture fonctionne très bien, horaire + non alimentation de l'aimant mais la deuxième partie donne ceci :

Code: [Select]

 int buttonBState = digitalRead(buttonB);
 
    if (buttonBState == LOW)
  {
 
  digitalWrite (3,HIGH) ; // moteur pwm
  digitalWrite (12,LOW) ; // adirect moteur
  digitalWrite (11,HIGH) ; // aimant pwm
  digitalWrite (13,HIGH) ; // aimant direct
 
 
  delay(3000); //Durée de fonctionnement electroaimant

  digitalWrite (3,LOW) ; // moteur pwm
  digitalWrite (11,HIGH) ; // aimant pwm
 
  }


Avant le delay mon moteur tourne en antihoraire comme je le souhaite mais mon aimant ne s'enlève pas (les deux lumières +/- s'allume pourtant) après le delay mon moteur ne tourne plus mais mon aimant se s'enlève et il n'y a que le + qui s'allume cette fois or je n'arrive pas a alimenté mon aimant que en plus pendant que mon moteur tourne...

infobarquee

fais une photo de ton montage, car là, on s'y perd.
et dis à quoi correspond buttonJState et buttonBState
AUCUNE AIDE PAR MP

Skyphir

buttonJState = bouton jaune qui permet la fermeture (horaire + non alimentation) et buttonBState = bouton bleu qui permet l'ouverture (antihoraire + alimentation)

Skyphir

Le reste

infobarquee

ces deux boutons, tu les actionne à la mano?
mets le code entier, ca sera plus simple
AUCUNE AIDE PAR MP

Skyphir

#9
May 15, 2015, 12:17 pm Last Edit: May 15, 2015, 12:18 pm by Skyphir
Oui j'actionne les boutons a la main
Code: [Select]

int directionA=12 ;
int speedA=3 ;
int speedB=11 ;
int directionB=13 ;
const int buttonJ = 7;
const int buttonB = 6;



void setup ()
{
  pinMode (directionA, OUTPUT) ;
  pinMode (directionB, OUTPUT) ;
  pinMode (speedA, OUTPUT) ;
  pinMode (speedB, OUTPUT) ;
  pinMode (buttonJ, INPUT) ;
  pinMode (buttonB, INPUT) ;
}

void loop ()
{
  int buttonJState = digitalRead(buttonJ);
 
    if (buttonJState == LOW)
  {
  digitalWrite (3, HIGH) ; // moteur pwm
  digitalWrite (12, HIGH) ; // moteur direct
  digitalWrite (11, LOW) ; // aimant pwm
  digitalWrite (13, HIGH) ; // Aimant direct
 

  delay(1000) ; //Durée de fonctionnement moteur 1
 
  digitalWrite (3, LOW) ; // moteur pwm
  digitalWrite (11,LOW) ; // aimant pwm
 
  }
  else{}
 
  int buttonBState = digitalRead(buttonB);
 
    if (buttonBState == LOW)
  {
 
  digitalWrite (3,HIGH) ; // moteur pwm
  digitalWrite (12,LOW) ; // adirect moteur
  digitalWrite (11,HIGH) ; // aimant pwm
  digitalWrite (13,LOW) ; // aimant direct
 
 
  delay(1000); //Durée de fonctionnement electroaimant

  digitalWrite (3,LOW) ; // moteur pwm
  digitalWrite (11,HIGH) ; // aimant pwm

 
  }
  else {}
}
 

infobarquee

teste ca
Code: [Select]


int directionA=12 ;
int speedA=3 ;
int speedB=11 ;
int directionB=13 ;
const int buttonJ = 7;
const int buttonB = 6;



void setup ()
{
  pinMode (directionA, OUTPUT) ;
  pinMode (directionB, OUTPUT) ;
  pinMode (speedA, OUTPUT) ;
  pinMode (speedB, OUTPUT) ;
  pinMode (buttonJ, INPUT) ;
  pinMode (buttonB, INPUT) ;
}

void loop ()
{
  digitalWrite (3, LOW) ; // moteur pwm A VERIFIER CE QUI MET EN ACTION
  digitalWrite (11,LOW) ; // aimant pwm A VERIFIER CE QUI MET EN ACTION

  int buttonJState = digitalRead(buttonJ);
  int buttonBState = digitalRead(buttonB);
 
    if (buttonJState == LOW)
  {
  digitalWrite (3, HIGH) ; // moteur pwm
  digitalWrite (12, HIGH) ; // moteur direct
  digitalWrite (11, LOW) ; // aimant pwm
  digitalWrite (13, HIGH) ; // Aimant direct
 

  delay(1000) ; //Durée de fonctionnement moteur 1
 

 
  }
 
 

 
    if (buttonBState == LOW)
  {
 
  digitalWrite (3,HIGH) ; // moteur pwm
  digitalWrite (12,LOW) ; // adirect moteur
  digitalWrite (11,HIGH) ; // aimant pwm
  digitalWrite (13,LOW) ; // aimant direct
 
 
  delay(1000); //Durée de fonctionnement electroaimant



 
  }
 
}
 




AUCUNE AIDE PAR MP

Skyphir

Sur le bouton jaune ça fonctionne mais lorsque j'appuie sur le bouton bleu rien ne se passe...

infobarquee

Sur le bouton jaune ça fonctionne mais lorsque j'appuie sur le bouton bleu rien ne se passe...
c'est a dire?
AUCUNE AIDE PAR MP

Skyphir

Avec le bouton jaune la led du pont en h A est activé en + donc le moteur tourne en horaire (ce que je veux) et avec le bouton bleu toutes les led s'allume (des deux ponts en h) pendant un très court instant mais rien ne se produit

infobarquee

déjà, mets tes variables avec les noms au lieu de mettre les pins.
ca sert a rien d'en définir si tu les utilise pas après.
tu verras ton pb
AUCUNE AIDE PAR MP

Go Up