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](https://europe1.discourse-cdn.com/arduino/original/3X/f/8/f8e6a6ce4f38e476e6f9ed485fd33cd489573077.jpg)
![DSC_0133[1].JPG](https://europe1.discourse-cdn.com/arduino/original/3X/0/2/025b824a278ecdc9df7aad8ce9bde656b7af955f.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...
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...