Ouverture d'une pince

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

bonjour,
sans code difficile de répondre.

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

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)

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 {}
}

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

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

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 :

 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...

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

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

DSC_0132[1].JPG

DSC_0133[1].JPG

Le reste

DSC_0134[1].JPG

DSC_0135[1].JPG

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

Oui j'actionne les boutons a la main

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 {}
}

teste ca

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



  
  }
 
}

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

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

c'est a dire?

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

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

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 (speedA, LOW) ; // moteur pwm A VERIFIER CE QUI MET EN ACTION
  digitalWrite (speedB,LOW) ; // aimant pwm A VERIFIER CE QUI MET EN ACTION

  int buttonJState = digitalRead(buttonJ);
  int buttonBState = digitalRead(buttonB);
  
    if (buttonJState == LOW)
  {
  digitalWrite (speedA, HIGH) ; // moteur pwm
  digitalWrite (directionA, HIGH) ; // moteur direct
  digitalWrite (speedB, LOW) ; // aimant pwm
  digitalWrite (directionB, HIGH) ; // Aimant direct
  

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

  
  }
  
  

  
    if (buttonBState == LOW)
  {
  
  digitalWrite (speedA,HIGH) ; // moteur pwm
  digitalWrite (directionA,LOW) ; // adirect moteur
  digitalWrite (speedB,HIGH) ; // aimant pwm
  digitalWrite (directionB,LOW) ; // aimant direct
  
  
  delay(1000); //Durée de fonctionnement electroaimant



  
  }
 
}

Excuse moi je n'ai pas compris ce que tu veux que je fasse...

tu déclares des variables au début

int directionA=12 ;
int speedA=3 ;
int speedB=11 ;
int directionB=13 ;

pourquoi après mettre

 digitalWrite (3, HIGH) ; // moteur pwm
  digitalWrite (12, HIGH) ; // moteur direct
  digitalWrite (11, LOW) ; // aimant pwm
  digitalWrite (13, HIGH) ; // Aimant direct

Ah ouai d'accord je comprends mieux ! Je suis débutant excuse moi...

Le soucis c'est que quelque soit la combinaison que je fais si je veux mettre en marche le moteur et l'aimant en même temps ça ne fonctionne pas... Et ça ça m'embete...